Skip to content

Add spec-update tooling and split it from the product into spec-tracker and cross-check projects - #8

Merged
EugeneTheDev merged 39 commits into
mainfrom
spec-update-tooling
Oct 23, 2026
Merged

EugeneTheDev merged 39 commits into
mainfrom
spec-update-tooling

Conversation

@EugeneTheDev

@EugeneTheDev EugeneTheDev commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Adds tooling for following ACP spec updates, and separates the repo's maintenance tooling from the shipped tck package.

Agent skills

  • orchestrator and granular-work skills, plus a reviewer agent, for delegating TCK work to programmer, researcher and reviewer subagents.
  • update-to-spec skill, which drives a whole spec update end to end.

Spec tracking

  • Per-version spec maps (spec-tracker/maps/v{1,2}.toml). They list the core docs (optionally narrowed to sections, by heading path or (intro)), the core schema $defs, the code paths implementing the core rules, and a ledger of deliberate non-requirements.
  • spec-impact command: reports what a spec diff touches (core docs, $defs and their $ref closure, linking docs, affected requirement ids and ledger entries). With --fix it remaps .mdx line citations from the base revision to the target, and it refuses to run unless the base is the pinned revision.
  • CI fetches the spec repo at each pinned revision, and the spec-doc tests fail instead of skipping under CI.

Repo layout

The repo now holds three uv projects:

  • Root acp-tck: the product, unchanged apart from [tool.uv.workspace] (members = ["spec-tracker"], exclude = ["cross-check"]). It depends on no member, and the wheel contains no tooling.
  • spec-tracker/: a workspace member that depends on acp-tck. It holds the maps, the citation helpers and spec-impact (run as uv run --package spec-tracker spec-impact ...). The product's registry tests keep their own schema-pointer helpers, so the dependency stays one-way.
  • cross-check/: a standalone uv project with its own lock and .venv. It runs the TCK as a command-line tool and never imports tck. Both Python agents now run on agent-client-protocol==1.0.0rc2; the v1 echo_agent gives identical results on rc1 and rc2.

scripts/ is gone: cross-check.sh became cross-check/run.sh, cross-check-summary.py became cross-check/summary.py, and spec-impact.py became the spec-impact entry point.

For local development, run uv sync --all-packages; plain uv sync removes spec-tracker from the venv. To get completion for cross-check's acp imports, open cross-check/ as its own editor root.

Testing

  • uv run pytest (root): 365 passed. The count was 477 before the move, because 112 tests moved to spec-tracker.
  • uv run --package spec-tracker pytest spec-tracker/tests: 115 passed.
  • uv run --directory cross-check pytest: 14 passed.
  • cross-check/run.sh, run locally from two working directories: both runs matched the expected baseline.

- `/orchestrator <goal>` skill: plan milestones/slices, delegate to subagents,
  integrate, and keep `.agents/state.md`; asks for worker mode, target branch,
  and reviews before starting
- `granular-work` skill, preloaded into all subagents: shared rules for one
  task, scope, escalation, and reporting
- programmer: explicit `single`/`worktrees` modes, local-only branches
- opt-in `reviewer` agent for whole milestones
- subagents run only under the orchestrator skill or on explicit request
- `/update-to-spec [v1|v2|both] [spec-ref] [full]`: orchestrated spec update
  with a diff-based change inventory, depth rules (core-doc escalation, full
  audit), whole-doc impact research, and re-vendor-first slices
- orchestrator: drop `disable-model-invocation` so other skills can invoke it
Adds spec_map.toml for v1 and v2 (core docs with optional sections and code
links, core schema $defs, and an empty ledger of deliberate non-requirements),
a tomllib loader in tck.common.spec_map, and registry tests that validate the
maps against the pinned spec docs and vendored schema.
Add resolve_section() to map a section address to its line range, use it in
the registry section checks, and narrow v1 session-setup and v2 overview and
prompt-lifecycle core sections with it.
scripts/spec-impact.py <base> <target> --version {v1,v2} [--spec-repo PATH]
prints a Markdown inventory: changed files, doc hunks mapped to heading
paths, core doc/section and core $def hits, the $ref closure, link fan-out
into changed docs, and requirement/ledger citations in changed regions.

Citation pointer parsing moves from the registry tests into
tck.common.citations, and spec checkout discovery from tests/conftest.py
into tck.common.spec_repo, so the script and tests share them.
Rewrites .mdx line citations in requirements.py and spec_map.toml from
base to target line numbers through the diff, leaves citations inside
changed regions as written and lists them as needing review. Also
handles two None paths flagged by Pyright.
Move the cross-check tooling out of scripts/ into cross-check/ with its own
pyproject, lockfile and tests. Both Python agents now run in its env (SDK
1.0.0rc2); the TCK runs as a CLI from the root project.
…e member

Move the spec map loader, citation parser, spec-repo discovery, per-version
spec maps and spec-impact out of the tck product package into spec-tracker/,
a uv workspace member (package spec_tracker, entry point spec-impact). The
product no longer references the spec checkout; its registry tests keep their
own schema-pointer helpers. CI runs spec-tracker's tests in their own step
after the spec fetch.
Update AGENTS.md, the programmer agent, and the orchestrator and
update-to-spec skills for the workspace layout: new spec-impact command,
map paths, cross-check/run.sh baseline, dev setup, and dependency commands.
testy_v2's ACP-INIT-205/206 PASS or FAIL run to run (testy exits before
flushing its initialize error reply), which kept turning the cross-check
job red. --expect-flaky LABEL=ID,... leaves those ids out of one report's
comparison while still catching any other deviation.

Also import summary directly in its tests via pytest's pythonpath instead
of the importlib loader.
@EugeneTheDev
EugeneTheDev merged commit b7f40fb into main Oct 23, 2026
5 checks passed
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