Skip to content

P2: Trust surface & docs for public launch readiness#18

Merged
duetCJackson merged 9 commits into
mainfrom
p2-trust-surface
Jun 11, 2026
Merged

P2: Trust surface & docs for public launch readiness#18
duetCJackson merged 9 commits into
mainfrom
p2-trust-surface

Conversation

@duetCJackson

@duetCJackson duetCJackson commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds the public-facing trust surface for launch: README storefront, PRIVACY.md, SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, CHANGELOG.md, GitHub issue/PR templates, and self-hosting docs.
  • Wires demo media (hero GIF + four feature screenshots) and a generate-readme-media script so the README renders as a cohesive product page rather than placeholder copy.
  • Differentiates the README hero from competitor layouts: single download CTA, curated badge row (no stacked nav links), platform-agnostic language, macOS system requirements, and Apple Silicon-only messaging.

Test plan

  • Review rendered README on GitHub (hero GIF, screenshot grid, Mermaid architecture diagram, comparison table, download section)
  • Confirm policy links resolve: PRIVACY.md, SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, docs/SELF_HOSTING.md
  • Verify GitHub issue templates and PR template appear correctly under .github/
  • Spot-check .env.example comments and package.json metadata (author, homepage)
  • Confirm docs/design/ archive links still resolve after moving internal design docs out of docs/superpowers/

duetCJackson and others added 6 commits June 10, 2026 11:40
Prepare the repo storefront with README, privacy/security policies, self-hosting guide, community templates, and metadata fixes ahead of going public.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add install specs for RAM, storage, and permissions, and remove Intel Mac references from the public docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub renders Mermaid cleanly; the box-drawing version misaligned in the rendered README.

Co-authored-by: Cursor <cursoragent@cursor.com>
Ship the hero GIF, feature screenshots, and a regenerate script so the public README storefront renders with cohesive mocked meeting content.

Co-authored-by: Cursor <cursoragent@cursor.com>
…tions.

Replace possessive "your Mac" phrasing with "your computer" outside macOS-specific requirements, sharpen the download CTA, fix the confusing paywall comparison row, and message Windows as coming soon.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the meetily-style stacked badge/nav rows with a single primary
download CTA and a slim curated badge line. Re-sequence the hero GIF to
open on the recording state and flow through transcript, notes, and Ask
AI, dropping the detection scene that duplicated detection.png.

Co-authored-by: Cursor <cursoragent@cursor.com>
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • Documentation
    • Added full README, Privacy, Security, Contributing, Code of Conduct, CHANGELOG, Self‑Hosting guide, media capture checklist, and design archive updates.
  • New Features
    • Added standardized issue and pull‑request templates for bug reports and feature requests.
  • Chores
    • Updated package/packaging metadata and added a README media‑generation utility.
  • Configuration
    • Extended example environment template with self‑hosting and runtime asset configuration variables.

Walkthrough

This PR adds documentation, community governance and GitHub templates, self-hosting configuration and package metadata updates, and a Playwright-based README media generation CLI with capture guidance.

Changes

Public Release & Self-Hosting Foundation

Layer / File(s) Summary
Release configuration and package metadata
.env.example, package.json, electron-builder.yml
Environment variables for self-hosting/distribution (AUTODOC_OFFICIAL_BUILD, AUTODOC_AUTH_WORKER_URL, asset base URLs) are defined; package author and homepage updated; npm script generate:readme-media added; Linux maintainer field updated.
Community governance and policies
CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md, PRIVACY.md, CHANGELOG.md
Adds Contributor Covenant Code of Conduct, contribution guidelines and build/dev workflow, security disclosure policy, privacy policy describing on-device storage and opt-in telemetry, and a changelog with “Unreleased” and “1.0.0” entries.
GitHub issue and PR templates
.github/ISSUE_TEMPLATE/{bug.md,feature.md,config.yml}, .github/PULL_REQUEST_TEMPLATE.md
Adds bug and feature issue templates with YAML front-matter and structured sections; disables blank issues and includes contact links; adds a PR template with checklist and license acknowledgement.
README and self-hosting guide
README.md, docs/SELF_HOSTING.md
Comprehensive README with features, install/build, architecture, FAQ, and acknowledgements; self-hosting guide documents env vars, Cloudflare Worker OAuth token exchange setup, and optional runtime asset hosting.
Design archive reorganization
docs/design/README.md, docs/design/plans/*
Adds a design archive landing page and updates three plan files to reference specs under docs/design/specs/.
README media generation script and capture guide
scripts/generate-readme-media.js, docs/assets/CAPTURE_CHECKLIST.md
Adds a Playwright + Vite-based CLI that mocks renderer state to produce PNGs and a hero GIF via Python/Pillow; includes a capture checklist and README wiring guidance for assets.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding trust surface documentation and supporting materials for public launch readiness.
Description check ✅ Passed The description provides detailed context about the PR's objectives, including specific files added, test plan items, and rationale for design choices.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • LINEAR integration encountered authorization issues. Please disconnect and reconnect the integration in the CodeRabbit UI.

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
.github/ISSUE_TEMPLATE/config.yml (1)

9-9: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Add trailing newline.

POSIX text files should end with a newline character. Add a blank line at the end of the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/ISSUE_TEMPLATE/config.yml at line 9, Add a trailing newline to the
end of the config.yml file so the file ends with a POSIX-compliant newline
character; simply append a single blank line/newline at the end of
.github/ISSUE_TEMPLATE/config.yml (ensure the file ends with '\n').
.github/PULL_REQUEST_TEMPLATE.md (1)

29-29: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Add trailing newline.

POSIX text files should end with a newline character. Add a blank line at the end of the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/PULL_REQUEST_TEMPLATE.md at line 29, The file
.github/PULL_REQUEST_TEMPLATE.md is missing a trailing newline; update the file
by adding a single blank line (newline character) at the end of the file so it
conforms to POSIX text file conventions and ensures tools that expect an EOF
newline behave correctly.
.github/ISSUE_TEMPLATE/feature.md (1)

25-25: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Add trailing newline.

POSIX text files should end with a newline character. Add a blank line at the end of the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/ISSUE_TEMPLATE/feature.md at line 25, Add a POSIX-compliant trailing
newline by appending a single blank line at the end of the file (ensure the file
ends with a newline character at EOF); update the
.github/ISSUE_TEMPLATE/feature.md file so its final character is a newline
(i.e., add a trailing newline at EOF).
.github/ISSUE_TEMPLATE/bug.md (1)

41-41: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Add trailing newline.

POSIX text files should end with a newline character. Add a blank line at the end of the file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/ISSUE_TEMPLATE/bug.md at line 41, Add a POSIX-compliant trailing
newline to the end of the ISSUE TEMPLATE file (bug.md) by ensuring there is a
blank line/linefeed character at the end of the file so the file ends with a
newline character.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CONTRIBUTING.md`:
- Around line 47-51: Add a blank line before the opening fenced code block (the
line with ```) and a blank line after the closing fenced code block (the closing
```) in the CONTRIBUTING.md snippet so the fenced block is separated from
surrounding text per MD031; locate the triple-backtick block shown in the diff
and insert one empty line immediately above the first ``` and one empty line
immediately below the last ```.

In `@docs/assets/CAPTURE_CHECKLIST.md`:
- Around line 13-22: The fenced code block showing the directory tree (the
triple-backtick block containing the docs/assets/ tree and the screenshots list)
is missing a language specifier; update that and any other similar blocks (the
one around lines 28–40) by adding an appropriate language tag such as ```text or
```bash after the opening backticks so the snippets render/accessibly with
syntax highlighting and correct semantic labeling.

In `@docs/SELF_HOSTING.md`:
- Around line 55-57: Update the SELF_HOSTING.md OAuth callback paragraph to
explicitly describe the end-to-end flow: state that the user initiates OAuth in
the desktop app, the app opens the worker's URL in the browser, the worker
redirects the browser to the OAuth provider (Google/Microsoft), the provider
then redirects back to the worker with the authorization code, and finally the
worker exchanges the code for a token and redirects the browser to the desktop
app's localhost callback (http://127.0.0.1:42813) with the token; keep the
explanation brief and sequential so readers can follow each handoff.

In `@README.md`:
- Around line 99-100: The README currently cites Meetily and links to their
install docs in the system requirements paragraph ("Local-first meeting apps
need real hardware headroom... Meetily publishes similar guidance..."), which
creates an unusual competitor comparison; remove the Meetily citation and link
and rephrase the paragraph to a generic statement about hardware needs and
AutoDoc's own requirements (e.g., replace the two sentences with: "Local-first
meeting apps need real hardware headroom for on-device transcription and
summarization. AutoDoc's requirements below reflect our bundled models and full
feature set."). Ensure the original text fragment containing "Local-first
meeting apps need real hardware headroom..." is updated accordingly and no
external competitor links remain.

In `@scripts/generate-readme-media.js`:
- Around line 708-712: The Python snippet currently interpolates frameDir and
output directly; change makeGifWithPillow to write a JSON config (e.g.
gif-config.json at configPath) containing frameDir, output, and frameCount, then
invoke Python with a script that opens that JSON (use config = json.load(...))
and uses config["frameDir"], config["output"], and config["frameCount"] when
building frames and saving the GIF; ensure you stop interpolating
frameDir/output into the Python source and instead reference configPath (the
written JSON) so paths are passed safely.
- Around line 703-718: The makeGifWithPillow function spawns python3 to import
PIL but doesn't pre-check for Pillow, causing unclear failures; add a preflight
check by invoking python3 -c "import PIL" (via spawnSync) before running the GIF
snippet and if it fails throw a clear Error guiding the user to install Pillow
(e.g., "Pillow not found; pip install pillow" or equivalent), and also add a
short note about the Python+Pillow requirement to README.md or CONTRIBUTING.md
(or docs/) so contributors know the dependency; reference the function name
makeGifWithPillow and the existing spawnSync usage when making the change.
- Line 726: The page is created with deviceScaleFactor: 1 which conflicts with
the project's 2× capture guidance; update the generator to create the Playwright
page with deviceScaleFactor: 2 (change the browser.newPage call where
SCREENSHOT_VIEWPORT is used), then ensure any viewport sizes used for captures
are set as CSS pixels (i.e., pass widths/heights that are half the intended
raster pixel size via page.setViewportSize or by adjusting SCREENSHOT_VIEWPORT)
so the captures are rendered at 2× and can be downscaled to ~1280px for export;
alternatively, if you prefer not to change capture code, update
docs/assets/CAPTURE_CHECKLIST.md to reflect the current deviceScaleFactor: 1
behavior—pick one approach and make the corresponding change to either the
browser.newPage(...) deviceScaleFactor or the checklist.

---

Outside diff comments:
In @.github/ISSUE_TEMPLATE/bug.md:
- Line 41: Add a POSIX-compliant trailing newline to the end of the ISSUE
TEMPLATE file (bug.md) by ensuring there is a blank line/linefeed character at
the end of the file so the file ends with a newline character.

In @.github/ISSUE_TEMPLATE/config.yml:
- Line 9: Add a trailing newline to the end of the config.yml file so the file
ends with a POSIX-compliant newline character; simply append a single blank
line/newline at the end of .github/ISSUE_TEMPLATE/config.yml (ensure the file
ends with '\n').

In @.github/ISSUE_TEMPLATE/feature.md:
- Line 25: Add a POSIX-compliant trailing newline by appending a single blank
line at the end of the file (ensure the file ends with a newline character at
EOF); update the .github/ISSUE_TEMPLATE/feature.md file so its final character
is a newline (i.e., add a trailing newline at EOF).

In @.github/PULL_REQUEST_TEMPLATE.md:
- Line 29: The file .github/PULL_REQUEST_TEMPLATE.md is missing a trailing
newline; update the file by adding a single blank line (newline character) at
the end of the file so it conforms to POSIX text file conventions and ensures
tools that expect an EOF newline behave correctly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1ceda0cd-8423-43bd-8bc8-483004a3063a

📥 Commits

Reviewing files that changed from the base of the PR and between ad9cd17 and d77bc29.

⛔ Files ignored due to path filters (6)
  • docs/assets/demo.gif is excluded by !**/*.gif
  • docs/assets/logo.png is excluded by !**/*.png
  • docs/assets/screenshots/ask-ai.png is excluded by !**/*.png
  • docs/assets/screenshots/detection.png is excluded by !**/*.png
  • docs/assets/screenshots/notes.png is excluded by !**/*.png
  • docs/assets/screenshots/transcript.png is excluded by !**/*.png
📒 Files selected for processing (33)
  • .env.example
  • .github/ISSUE_TEMPLATE/bug.md
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/ISSUE_TEMPLATE/feature.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • CHANGELOG.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • PRIVACY.md
  • README.md
  • SECURITY.md
  • docs/SELF_HOSTING.md
  • docs/assets/CAPTURE_CHECKLIST.md
  • docs/design/README.md
  • docs/design/plans/2026-03-24-calendar-integration.md
  • docs/design/plans/2026-03-24-core-shell-ui.md
  • docs/design/plans/2026-03-24-recording-engine.md
  • docs/design/plans/2026-03-24-transcription-pipeline.md
  • docs/design/plans/2026-03-25-encryption-at-rest.md
  • docs/design/plans/2026-03-25-speaker-diarization.md
  • docs/design/plans/2026-03-26-onboarding.md
  • docs/design/plans/2026-03-27-multi-calendar.md
  • docs/design/plans/2026-03-28-segment-video-jump.md
  • docs/design/specs/2026-03-24-autodoc-design.md
  • docs/design/specs/2026-03-24-transcription-pipeline-design.md
  • docs/design/specs/2026-03-25-encryption-at-rest-design.md
  • docs/design/specs/2026-03-25-speaker-diarization-design.md
  • docs/design/specs/2026-03-26-onboarding-design.md
  • docs/design/specs/2026-03-27-multi-calendar-design.md
  • docs/design/specs/2026-03-28-segment-video-jump-design.md
  • electron-builder.yml
  • package.json
  • scripts/generate-readme-media.js

Comment thread CONTRIBUTING.md
Comment thread docs/assets/CAPTURE_CHECKLIST.md
Comment thread docs/SELF_HOSTING.md Outdated
Comment thread README.md Outdated
Comment thread scripts/generate-readme-media.js
Comment thread scripts/generate-readme-media.js
Comment thread scripts/generate-readme-media.js
Keep the full self-hosting variable block from P2, which already includes
AUTODOC_AUTH_WORKER_URL added on main.

Co-authored-by: Cursor <cursoragent@cursor.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@package.json`:
- Line 78: The dependency "`@cloudflare/workers-types`": "^4.20260610.1" uses a
caret allowing floating upgrades to that day-based release; change it to a
pinned exact version (remove the ^ so it reads "`@cloudflare/workers-types`":
"4.20260610.1") or explicitly update the package.json to a stable pinned version
after reviewing the release notes, so builds don’t unexpectedly pick up same-day
patch changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e55e5c4e-c886-46e2-a2d8-3c91a9967cc3

📥 Commits

Reviewing files that changed from the base of the PR and between d77bc29 and b552999.

📒 Files selected for processing (1)
  • package.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@package.json`:
- Line 78: The dependency "`@cloudflare/workers-types`": "^4.20260610.1" uses a
caret allowing floating upgrades to that day-based release; change it to a
pinned exact version (remove the ^ so it reads "`@cloudflare/workers-types`":
"4.20260610.1") or explicitly update the package.json to a stable pinned version
after reviewing the release notes, so builds don’t unexpectedly pick up same-day
patch changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e55e5c4e-c886-46e2-a2d8-3c91a9967cc3

📥 Commits

Reviewing files that changed from the base of the PR and between d77bc29 and b552999.

📒 Files selected for processing (1)
  • package.json
🛑 Comments failed to post (1)
package.json (1)

78-78: 🧹 Nitpick | 🔵 Trivial

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Verify `@cloudflare/workers-types` version exists on npm

# Check available versions
npm view `@cloudflare/workers-types` versions --json | jq -r '.[]' | grep "^4.20260610"

# Check if the specific version exists
npm view `@cloudflare/workers-types`@4.20260610.1 version 2>/dev/null || echo "Version 4.20260610.1 not found"

Repository: DuetDisplay/AutoDoc-Local

Length of output: 95


@cloudflare/workers-types ^4.20260610.1 is available on npm.

The 4.20260610.1 release resolves on npm (so the same-day version format isn’t a “nonexistent version” risk). The remaining concern is stability/early-bug risk from depending on a newly published day; consider pinning to the exact version (or reviewing release notes) if you want to minimize churn.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@package.json` at line 78, The dependency "`@cloudflare/workers-types`":
"^4.20260610.1" uses a caret allowing floating upgrades to that day-based
release; change it to a pinned exact version (remove the ^ so it reads
"`@cloudflare/workers-types`": "4.20260610.1") or explicitly update the
package.json to a stable pinned version after reviewing the release notes, so
builds don’t unexpectedly pick up same-day patch changes.

duetCJackson and others added 2 commits June 10, 2026 17:51
Expand the self-hosting OAuth walkthrough into an explicit end-to-end
sequence verified against the worker routes, and remove the Meetily
citation/links from the README system-requirements section in favor of
generic local-first framing.

Co-authored-by: Cursor <cursoragent@cursor.com>
Fail fast with an install hint when python3/Pillow is missing before
building the hero GIF, and rewrite the capture checklist rationale notes
to drop direct competitor references while keeping the positioning intent.

Co-authored-by: Cursor <cursoragent@cursor.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
scripts/generate-readme-media.js (2)

731-737: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Wrap server/browser setup in the same try/finally that performs cleanup.

If startRendererServer() or chromium.launch() throws before Line 747, the cleanup block never runs. That can leave the Vite server open and hang the script despite setting process.exitCode later.

Suggested fix
 async function main() {
   fs.mkdirSync(SCREENSHOT_DIR, { recursive: true })
   fs.mkdirSync(TMP_DIR, { recursive: true })
-
-  const { server, url } = await startRendererServer()
-  const browser = await chromium.launch()
-  const page = await browser.newPage({ viewport: SCREENSHOT_VIEWPORT, deviceScaleFactor: 1 })
-  page.on('console', (message) => {
+  let server
+  let url
+  let browser
+  try {
+    ({ server, url } = await startRendererServer())
+    browser = await chromium.launch()
+    const page = await browser.newPage({ viewport: SCREENSHOT_VIEWPORT, deviceScaleFactor: 1 })
+    page.on('console', (message) => {
       if (message.type() === 'warning' || message.type() === 'error') {
         console.warn(`[browser ${message.type()}] ${message.text()}`)
       }
-  })
-  page.on('pageerror', (error) => {
-    console.error('[browser pageerror]', error)
-  })
-
-  try {
+    })
+    page.on('pageerror', (error) => {
+      console.error('[browser pageerror]', error)
+    })
+
     await captureContent(page, detectionHtml(), path.join(SCREENSHOT_DIR, 'detection.png'))
     ...
   } finally {
-    await browser.close().catch(() => {})
-    await server.close().catch(() => {})
+    await browser?.close().catch(() => {})
+    await server?.close().catch(() => {})
     fs.rmSync(TMP_DIR, { recursive: true, force: true })
   }
 }

Also applies to: 830-834

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/generate-readme-media.js` around lines 731 - 737, The setup of the
renderer server and browser in main() (calls to startRendererServer() and
chromium.launch()) must be moved inside a try block with a corresponding finally
that always performs cleanup (closing the browser and shutting down the
server/URL) so resources aren't leaked if startRendererServer() or
chromium.launch() throws; update main() to acquire { server, url } and browser
within the try, and ensure the finally calls browser?.close() and
server?.close() (or the appropriate shutdown functions referenced by server/url)
and preserves or sets process.exitCode as before.

778-813: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Hero GIF sequence conflicts with the documented capture contract.

Line 779 says detection is intentionally excluded, but docs/assets/CAPTURE_CHECKLIST.md Line 63 requires the hero flow to feel Mac-native with overlay + menu bar. The generator currently starts from recording/transcript flow, so it won’t produce the documented story.

Suggested fix
-      // Hero GIF leads with the recording state and the payoff (transcript →
-      // notes → Ask AI). Detection has its own screenshot in the grid, so it is
-      // intentionally not part of this loop to keep the hero visually distinct.
+      // Hero GIF should begin with detection overlay, then progress through
+      // recording, transcript, notes, and Ask AI to match capture docs.
       if (seconds < 4) {
+        await captureContent(page, detectionHtml(), output, GIF_VIEWPORT)
+      } else if (seconds < 10) {
         await captureUrl(
           page,
           `${url}capture.html?recording=1#/recordings`,
           output,
           GIF_VIEWPORT,
           'Weekly product sync'
         )
-      } else if (seconds < 12) {
+      } else if (seconds < 18) {
         await captureUrl(
           page,
           `${url}capture.html#/recordings/${MEETING_ID}?tab=transcript`,
           output,
           GIF_VIEWPORT,
           'Jordan'
         )
-      } else if (seconds < 20) {
+      } else if (seconds < 24) {
         await captureUrl(
           page,
           `${url}capture.html#/recordings/${MEETING_ID}?tab=notes`,
           output,
           GIF_VIEWPORT,
           'Release candidate date'
         )
       } else {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/generate-readme-media.js` around lines 778 - 813, The hero GIF
sequence in generate-readme-media.js currently starts with the
recording/transcript flow and omits detection and the Mac-native overlay/menu
bar required by docs/assets/CAPTURE_CHECKLIST.md; update the seconds-based
branches so the initial branch (seconds < 4) captures the detection frame (use
the detection route instead of `${url}capture.html?recording=1#/recordings`) and
ensure the captureUrl call includes the same GIF_VIEWPORT/flags that produce the
Mac-native overlay + menu bar (preserve output, url, MEETING_ID where
applicable), then shift the recording/transcript/notes/ask-ai captures into the
subsequent time windows so the hero GIF begins with detection and visually
matches the documented capture contract.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@scripts/generate-readme-media.js`:
- Around line 731-737: The setup of the renderer server and browser in main()
(calls to startRendererServer() and chromium.launch()) must be moved inside a
try block with a corresponding finally that always performs cleanup (closing the
browser and shutting down the server/URL) so resources aren't leaked if
startRendererServer() or chromium.launch() throws; update main() to acquire {
server, url } and browser within the try, and ensure the finally calls
browser?.close() and server?.close() (or the appropriate shutdown functions
referenced by server/url) and preserves or sets process.exitCode as before.
- Around line 778-813: The hero GIF sequence in generate-readme-media.js
currently starts with the recording/transcript flow and omits detection and the
Mac-native overlay/menu bar required by docs/assets/CAPTURE_CHECKLIST.md; update
the seconds-based branches so the initial branch (seconds < 4) captures the
detection frame (use the detection route instead of
`${url}capture.html?recording=1#/recordings`) and ensure the captureUrl call
includes the same GIF_VIEWPORT/flags that produce the Mac-native overlay + menu
bar (preserve output, url, MEETING_ID where applicable), then shift the
recording/transcript/notes/ask-ai captures into the subsequent time windows so
the hero GIF begins with detection and visually matches the documented capture
contract.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 34a01c00-e1bf-410d-93ba-0262f087c3f2

📥 Commits

Reviewing files that changed from the base of the PR and between 2feb8aa and b779721.

📒 Files selected for processing (2)
  • docs/assets/CAPTURE_CHECKLIST.md
  • scripts/generate-readme-media.js

@duetCJackson duetCJackson merged commit 8a9966f into main Jun 11, 2026
9 checks passed
@duetCJackson duetCJackson deleted the p2-trust-surface branch June 26, 2026 20:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant