Skip to content

Add a SynAc verification skill and feature map - #242

Open
amanthanvi wants to merge 23 commits into
mainfrom
cursor/verify-synac-skill-cd21
Open

amanthanvi wants to merge 23 commits into
mainfrom
cursor/verify-synac-skill-cd21

Conversation

@amanthanvi

@amanthanvi amanthanvi commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

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

  • Commands run (for example pnpm gate): see Proof
  • Manual steps (if any): confirm this checkout's evidence directory still exists after pnpm verify:cleanup

Screenshots (UI changes)

  • Desktop: home, search, and the opened entry below. Product UI code is unchanged.
  • Mobile: tags page at 390px below.

Home with recently updated entries
Search results for soc
SoC acronym entry
Tags page at mobile width

Checklist

  • Tests added or updated, or not needed
  • pnpm gate passes locally
  • Commit messages follow Conventional Commits (feat:, fix:, docs:, chore:, ...)
  • Docs updated (README.md, docs/**, content/README.md) if behavior changed
  • No secrets committed; .env* stays untracked and placeholders only

Accessibility (UI changes)

  • Every new control is reachable and operable by keyboard
  • Focus stays visible on every focusable element
  • Headings form one ordered outline with a single h1
  • Images and icons carry text alternatives, or are marked decorative
  • Contrast meets 4.5:1 for body text and 3:1 for large text and UI boundaries
  • prefers-reduced-motion is honored by any new animation
  • pnpm --filter @synac/e2e test:e2e passes against a local stack

No 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:check run locally and passing
  • No hand edits under content/generated/; bundles regenerated with pnpm ingest
  • For a new source: license terms, contentMode, attribution requirements, and the public license statement are all filled in
  • Every new or changed definition carries a citation

content:check ran inside pnpm gate. The isolated RFC ingest from the earlier stack proof wrote only under this checkout's ingest-content directory. The repo bundle was not modified.

Proof

Head 488d57924fa0b50022d494b61a049a91e93a5352. Node v24.22.0. SYNAC_VERIFY_LIVE_FETCH was unset.

  • pnpm gate exited 0 and did not start tmux. The test and gate scripts do not mention tmux. Skill tests inside that gate: 28 passed, 1 skipped (the live fetch).
  • pnpm test:verify-tmux exited 0 with tmux 3.5a on PATH. The second-checkout test passed: cleanup stopped only that checkout's session.
  • Required CI installs tmux after pnpm test and runs pnpm test:verify-tmux. That step is not part of pnpm gate.

The stack proof (launch, doctor, smoke, drive, cleanup) is from 2db8aa94009049ecabfc5263d510bcbbcb58e79f. This commit does not change launch or cleanup.

Web mode start (next-server v16.4.0 on 127.0.0.1:3000). SYNAC_VERIFY_STATE_DIR, VERIFY_EVIDENCE_DIR, and SYNAC_VERIFY_ROOT were unset. git status was empty before launch, after launch, after cleanup, and after pnpm gate.

This checkout's state directory is /tmp/synac-verify-c52ddf65534b (mode 700, uid 1000). Sessions were synac-v-c52ddf65534b-convex and synac-v-c52ddf65534b-web. The log is /opt/cursor/artifacts/verify/run.log.

  • pnpm verify:launch: exit 0, printed STARTED. Sync log contains syncing 6701 entries (version f3420e2bdddb) and tag convergence: verified.
  • pnpm verify:doctor: exit 0, READY ready, search q=soc total=87.
  • pnpm verify:smoke: exit 0. Playwright: 1 passed.
  • pnpm verify:drive: exit 0. Isolated ingest logged rfc4949: 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/revalidate was not called. SYNAC_REVALIDATE_SECRET is unset.
  • pnpm --filter @synac/content-tools sync -- --prod was not run. It needs CONVEX_DEPLOY_KEY.
  • pnpm --filter @synac/e2e test:e2e was not run. This PR does not change product UI.
  • GitHub CI on 488d579 has not finished. @greptileai review waits until those checks are green.

Optional CI

.github/workflows/verify-smoke.yml still installs tmux, runs pnpm test:verify-tmux, then launch, doctor, and smoke, on workflow_dispatch only.

Dark theme persisted

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

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:

  • Add a committed SynAc verification skill with launch, readiness, smoke, full-drive, cleanup, and evidence-reporting workflows.
  • Add a feature map and Playwright journeys covering the public glossary, APIs, content CLI, and ingest paths.
  • Add an optional manually triggered CI workflow for running the verification smoke checks and uploading evidence.

Enhancements:

  • Add isolated stack lifecycle management that protects unrelated processes, tracks tool-generated changes, restores owned writes safely, and preserves verification evidence after cleanup.
  • Expose workspace verification commands for driving the local SynAc stack from the repository root or package directories.

CI:

  • Add an optional workflow_dispatch smoke job that launches the local stack, runs doctor and smoke verification, cleans up, and uploads artifacts.

Documentation:

  • Document the verification workflow, feature coverage, proof requirements, and cleanup behavior in the agent guidance and committed skill documentation.

Tests:

  • Add Playwright smoke and feature-drive coverage for glossary navigation, search, entries, themes, responsive chrome, public APIs, and CLI side effects.

Chores:

  • Extend gitignore handling for verification-generated state and artifacts.

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>
@vercel

vercel Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
synac-web Ready Ready Preview Oct 15, 2026 3:55pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 4a37562c-d95e-44f2-b9d9-04f73b003459
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

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

@sourcery-ai

sourcery-ai Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Adds 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 drive

sequenceDiagram
    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
Loading

Flow diagram for SynAc verification lifecycle

flowchart 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]
Loading

File-Level Changes

Change Details Files
Add a committed agent skill that launches, diagnoses, drives, and cleans up an isolated SynAc stack while preserving verification evidence.
  • Document Node, tmux, port ownership, launch modes, doctor readiness criteria, cleanup behavior, evidence requirements, and reporting conventions.
  • Implement launch, read-only doctor, cleanup, runtime/process tracking, CLI verification, smoke execution, and Playwright evidence helpers.
  • Exercise content validation, compilation side effects, history, sync read-back, isolated ingest, public UI journeys, API behavior, responsive navigation, redirects, and theme persistence.
.agents/skills/verify-synac/SKILL.md
.agents/skills/verify-synac/playwright.config.mjs
.agents/skills/verify-synac/scripts/cleanup.mjs
.agents/skills/verify-synac/scripts/cli.mjs
.agents/skills/verify-synac/scripts/doctor.mjs
.agents/skills/verify-synac/scripts/evidence.ts
.agents/skills/verify-synac/scripts/launch.mjs
.agents/skills/verify-synac/scripts/runtime.mjs
.agents/skills/verify-synac/scripts/smoke.mjs
.agents/skills/verify-synac/scripts/smoke.spec.ts
.agents/skills/verify-synac/scripts/drive.spec.ts
Create a feature map defining the regression sweep and proof expectations across the glossary and maintainer CLI.
  • Catalog UI entry points, navigation, search, browse, entries, themes, APIs, static pages, error states, and cross-feature journeys.
  • Catalog content check, compile, history, sync, and isolated ingest flows with expected outputs, side effects, and inconclusive conditions.
.agents/skills/verify-synac/references/features/README.md
.agents/skills/verify-synac/references/features/about.md
.agents/skills/verify-synac/references/features/acronyms-browse.md
.agents/skills/verify-synac/references/features/changelog.md
.agents/skills/verify-synac/references/features/command-palette.md
.agents/skills/verify-synac/references/features/content-check.md
.agents/skills/verify-synac/references/features/content-compile.md
.agents/skills/verify-synac/references/features/content-history.md
.agents/skills/verify-synac/references/features/content-sync.md
.agents/skills/verify-synac/references/features/entry.md
.agents/skills/verify-synac/references/features/home.md
.agents/skills/verify-synac/references/features/ingest.md
.agents/skills/verify-synac/references/features/journeys.md
.agents/skills/verify-synac/references/features/legal.md
.agents/skills/verify-synac/references/features/not-found.md
.agents/skills/verify-synac/references/features/public-api.md
.agents/skills/verify-synac/references/features/recent.md
.agents/skills/verify-synac/references/features/search.md
.agents/skills/verify-synac/references/features/site-chrome.md
.agents/skills/verify-synac/references/features/sources.md
.agents/skills/verify-synac/references/features/tags.md
.agents/skills/verify-synac/references/features/terms-browse.md
.agents/skills/verify-synac/references/features/theme.md
Expose the verification workflow through repository guidance and package commands.
  • Add root-level verify launch, doctor, smoke, drive, and cleanup scripts pointing into the skill directory.
  • Document the verification procedure and proof expectations for agents and contributors.
  • Add a non-required pull-request workflow that installs dependencies, launches the stack, runs smoke verification, uploads evidence, and always cleans up.
  • Add the skill path alias and supporting ignore changes.
package.json
AGENTS.md
.github/workflows/verify-smoke.yml
.cursor/skills/verify-synac
.gitignore

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

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>
@amanthanvi
amanthanvi marked this pull request as ready for review October 15, 2026 11:47
Copilot AI balanced review requested due to automatic review settings October 15, 2026 11:47
@sourcery-ai

sourcery-ai Bot commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

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 @sourcery-ai review. Upgrade to get a review now.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@greptile-apps

greptile-apps Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Low impact] Adds test automation and documentation for a glossary feature.

The cleanup finding remains partly unresolved and should be fixed before merging.

Summary

Adds a committed verification skill for the local glossary and content CLI.

  • Agents can follow a feature map to drive SynAc’s glossary and browser journeys.
  • The verification skill starts a local glossary stack and checks that it is ready to drive.
  • The CLI drive checks SynAc content commands and records their results.
  • Cleanup stops the recorded local stack, restores matching tool writes, and keeps verification evidence.
  • Root commands and CI make the verification workflow easier to launch and run.

Reviews (5) · Last reviewed commit: "fix: run the tmux session test in requir..." · Reviewed by Greptile

Comment thread .agents/skills/verify-synac/scripts/launch.mjs Outdated
Comment thread .agents/skills/verify-synac/scripts/cleanup.mjs Outdated
Comment thread .agents/skills/verify-synac/scripts/cli.mjs Outdated
cursoragent and others added 2 commits October 15, 2026 12:17
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>
cursoragent and others added 2 commits October 15, 2026 12:25
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>
cursoragent and others added 2 commits October 15, 2026 12:33
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>
@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

@greptileai review

Comment thread .agents/skills/verify-synac/scripts/runtime.mjs Outdated
Comment thread .agents/skills/verify-synac/scripts/cli.mjs
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>
@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

@greptileai review

Comment thread .agents/skills/verify-synac/scripts/runtime.mjs Outdated
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>

Copy link
Copy Markdown
Owner Author

@greptileai review

Comment thread package.json
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>

Copy link
Copy Markdown
Owner Author

@greptileai review

cursor Bot pushed a commit that referenced this pull request Oct 16, 2026
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>

This branch was successfully deployed

1 active deployment
Preview — 488d5792 Deployed Oct 15, 2026 by vercel[bot]
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.

3 participants