Repository navigation
Add a SynAc verification skill and feature map - #242
amanthanvi wants to merge 23 commits into
Conversation
Teach agents how to launch the local stack, doctor it, drive the content CLI and the glossary UI, and keep proof artifacts after cleanup. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Reviewer's GuideAdds a committed SynAc verification skill and feature map, backed by CLI and Playwright helpers that exercise the real local stack, content side effects, public API, and user journeys while isolating processes and retaining evidence through cleanup; repository commands, guidance, and an optional smoke workflow expose the process. Sequence diagram for SynAc verification drivesequenceDiagram
participant Agent
participant Launch as verify:launch
participant Convex
participant CLI as Content CLI
participant Web as Web app
participant Doctor as verify:doctor
participant Drive as verify:smoke or verify:drive
participant Evidence
Agent->>Launch: run launch.mjs
Launch->>Convex: start npx convex dev
Launch->>CLI: pnpm --filter @synac/content-tools sync
CLI-->>Evidence: write cli-sync.log
Launch->>Web: build and start Next.js app
Agent->>Doctor: run doctor.mjs
Doctor->>Web: GET /api/healthz
Doctor->>Web: GET /
Doctor->>Web: GET /api/v1/search?q=soc
Web-->>Doctor: READY
Agent->>Drive: run smoke.mjs
Drive->>Doctor: runDoctor
Drive->>CLI: content:check and content:compile
CLI-->>Evidence: write compiled.json and CLI logs
Drive->>Web: Playwright user journeys
Web-->>Evidence: screenshots and traces
Flow diagram for SynAc verification lifecycleflowchart TD
A[verify:launch] --> B{Doctor READY?}
B -- Yes --> C[Reuse isolated stack]
B -- No --> D{Ports 3000 or 3210 owned externally?}
D -- Yes --> E[Exit and leave process untouched]
D -- No --> F[Start Convex in tmux]
F --> G[Sync compiled corpus]
G --> H[Build and start web app]
H --> I[verify:doctor]
I --> J{READY}
J --> K[verify:smoke or verify:drive]
K --> L[Run CLI checks and side effects]
L --> M[Run Playwright feature sweep]
M --> N[Write logs screenshots and traces]
N --> O[verify:cleanup]
O --> P[Stop only recorded sessions and PIDs]
P --> Q[Retain evidence directory]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
pnpm start forwarded -H as a project directory, so the port never opened. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Resolve Playwright from the e2e package, use lowercase letter links, and read the citation record the entry actually renders. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
Sorry @amanthanvi, you've used your own review budget of 250,000 diff characters for the last 7 days. You can request another review in 2 days and 10 hours by commenting |
[Low impact] Adds test automation and documentation for a glossary feature. The cleanup finding remains partly unresolved and should be fixed before merging.
|
Record tmux sessions as soon as they start, signal a saved pid only when its start time still matches, create the state dir mode 0700, and restore Convex and Next files a launch rewrites. A failed ingest fails the drive. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Drop the pull_request trigger, keep the evidence artifact upload, and checkout without persisting credentials. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Convex can listen on the cloud port and the site port with one process. Cleanup checks that pid a single time. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Back up regenerated Convex and Next files before restoring the worktree, leave the index alone, and warn instead of reverting AGENTS.md, CLAUDE.md, and convex.json. Refuse an existing state directory whose mode is not 0700. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
A network failure with no HTTP status stays INCONCLUSIVE. Any other ingest failure still fails the drive. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
@greptileai review |
Launch records the hash, contents, and staged state of every file a verify run might regenerate. Cleanup and the next launch put a file back only when its bytes still match what that run wrote, and they write the snapshot rather than HEAD. The index is left alone. Any other change is kept and warned, after a backup of a restored file. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
@greptileai review |
Cleanup stores a run's backups under restored/<run-id>/, including symlinks. An existing evidence directory whose mode is not 0700 is refused. .cursor/rules/convex_rules.mdc is restored with the other watched files when the bytes still match the run write. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
The snapshot manifest stores the repo root, and launch and cleanup refuse to restore when it differs. A live REUSED stack is left alone. Tool-owned files keep their mode, post-launch Convex skill files are recorded and warned, and hand-maintained edits stay in place. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
A manifest written before repo roots were stored is not a different checkout. Launch skips it and takes a new snapshot. A stored root that does not match this checkout is still refused. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Launch hashes watched files immediately before and after each Convex and Next step and records only the paths that step owns. Other edits are warned and left, including hand-maintained files. A snapshot from another checkout is warned and not restored. Cleanup sends SIGKILL only while the launch start time still matches, and a missing backup id gets its own directory. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
Launch refuses a foreign, legacy, or unreadable manifest and names the snapshot directory to remove. Cleanup still stops processes recorded for this checkout, copies that manifest aside, and skips only the file restore. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
The bash trap was not installed before SIGTERM on a fast runner, so cleanup reported a graceful stop. Wait until the fixture writes a ready file, and stop polling if it never does. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
A second worktree was stopping the first checkout because both used /tmp/synac-verify and the same tmux session names. Key the directory and session names by the repo root hash, and signal only that checkout's pids. Indented stack frames no longer turn a later parser error into a network miss. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
A warning: line is no longer an ingest error unless the name ends in Error or Exception. A run.json with no repo root is backed up and its pids are left alone. Each tool claim is flushed to writes.json immediately, and the next launch restores tool-owned files from a snapshot that never finished. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
A Node console.error of a fetch TypeError ends on a bare brace, which was read as the final error and hid ENOTFOUND. Lines that are only braces or punctuation are skipped. The ingest CLI prints error.message, so a line of the form "✗ <source>: fetch failed" with no HTTP status is inconclusive. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
The brace test uses a Node v24.22.0 console.error fixture. A live fetch runs only when SYNAC_VERIFY_LIVE_FETCH=1 and accepts whatever network error the lookup returns. A bare fetch failed also covers TLS errors. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
@greptileai review |
pnpm test and pnpm gate no longer start tmux. The checkout isolation check is pnpm test:verify-tmux, and the optional verify-smoke workflow installs tmux and runs it. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
pnpm test and pnpm gate still do not start tmux. The CI workflow installs tmux after the normal tests and runs pnpm test:verify-tmux. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
|
@greptileai review |
Auto-review is skipped on this repo, while a manual CodeRabbit review still runs and is not a required gate. The two optional #242 checker notes are now in the census. Co-authored-by: Aman Thanvi <amanthanvi@users.noreply.github.com>
What
Closes #
Adds a committed verification skill so an agent can launch SynAc, doctor the stack, drive the content CLI and the public glossary like a user, and keep the proof after cleanup.
Why
Feature work needs a scripted way to show the real app and the real CLI, including files written and records read back. The feature map is the sweep order for that drive. A maintain pass can later edit only the skill directory.
How to test
pnpm gate): see Proofpnpm verify:cleanupScreenshots (UI changes)
Home with recently updated entries
Search results for soc
SoC acronym entry
Tags page at mobile width
Checklist
pnpm gatepasses locallyfeat:,fix:,docs:,chore:, ...)README.md,docs/**,content/README.md) if behavior changed.env*stays untracked and placeholders onlyAccessibility (UI changes)
h1prefers-reduced-motionis honored by any new animationpnpm --filter @synac/e2e test:e2epasses against a local stackNo new product UI. The axe suite was not re-run. The skill drive covers the user paths. Run the e2e suite when a change touches accessibility.
Content changes
pnpm content:checkrun locally and passingcontent/generated/; bundles regenerated withpnpm ingestcontentMode, attribution requirements, and the public license statement are all filled incontent:checkran insidepnpm gate. The isolated RFC ingest from the earlier stack proof wrote only under this checkout'singest-contentdirectory. The repo bundle was not modified.Proof
Head
488d57924fa0b50022d494b61a049a91e93a5352. Nodev24.22.0.SYNAC_VERIFY_LIVE_FETCHwas unset.pnpm gateexited 0 and did not start tmux. Thetestandgatescripts do not mention tmux. Skill tests inside that gate: 28 passed, 1 skipped (the live fetch).pnpm test:verify-tmuxexited 0 with tmux 3.5a onPATH. The second-checkout test passed: cleanup stopped only that checkout's session.pnpm testand runspnpm test:verify-tmux. That step is not part ofpnpm gate.The stack proof (launch, doctor, smoke, drive, cleanup) is from
2db8aa94009049ecabfc5263d510bcbbcb58e79f. This commit does not change launch or cleanup.Web mode
start(next-serverv16.4.0 on127.0.0.1:3000).SYNAC_VERIFY_STATE_DIR,VERIFY_EVIDENCE_DIR, andSYNAC_VERIFY_ROOTwere unset.git statuswas empty before launch, after launch, after cleanup, and afterpnpm gate.This checkout's state directory is
/tmp/synac-verify-c52ddf65534b(mode700, uid1000). Sessions weresynac-v-c52ddf65534b-convexandsynac-v-c52ddf65534b-web. The log is/opt/cursor/artifacts/verify/run.log.pnpm verify:launch: exit 0, printedSTARTED. Sync log containssyncing 6701 entries (version f3420e2bdddb)andtag convergence: verified.pnpm verify:doctor: exit 0,READY ready, searchq=soctotal=87.pnpm verify:smoke: exit 0. Playwright: 1 passed.pnpm verify:drive: exit 0. Isolated ingest loggedrfc4949: updated. Playwright: 17 passed.pnpm verify:cleanup: exit 0. Ports 3000, 3210, and 3211 had no listeners. Evidence was kept.INCONCLUSIVE
POST /api/v1/internal/revalidatewas not called.SYNAC_REVALIDATE_SECRETis unset.pnpm --filter @synac/content-tools sync -- --prodwas not run. It needsCONVEX_DEPLOY_KEY.pnpm --filter @synac/e2e test:e2ewas not run. This PR does not change product UI.488d579has not finished.@greptileai reviewwaits until those checks are green.Optional CI
.github/workflows/verify-smoke.ymlstill installs tmux, runspnpm test:verify-tmux, then launch, doctor, and smoke, onworkflow_dispatchonly.Dark theme persisted
To show artifacts inline, enable in settings.
Summary by Sourcery
Provide a committed, evidence-preserving verification workflow for exercising SynAc's local glossary stack and content CLI end to end.
New Features:
Enhancements:
CI:
Documentation:
Tests:
Chores: