Skip to content

feat(skills): add harness lifecycle skills and digest-bound spec gate - #11

Merged
decebal merged 1 commit into
mainfrom
feat/harness-install
Nov 8, 2026
Merged

decebal merged 1 commit into
mainfrom
feat/harness-install

Conversation

@decebal

@decebal decebal commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Makes the Harness Edition proposal (2026-10-28) installable with allstack init --skills-only. Companion PR: decebal/decebal-claude-skills#90 (skillsync installer and drift checker, pr-guard hook templates, claude-beads design gate).

  • Four new skills in both hosts:
    • allstack-harness names the stage (Think, Spec, Plan, Build, Review, Ship, Reflect) and loads the next skill. Bug fixes skip Spec.
    • allstack-spec is the Spec stage: the author drafts, a fresh-context reviewer checks, the draft is revised, then a human approves.
    • allstack-reflect covers the retro and the drift of approved designs.
    • allstack-investigate covers evidence-led diagnosis.
  • allstack spec:
    • review runs a read-only host process that sees only the draft path and the repo.
    • approve binds the design's SHA-256 to the approver and to a clean review receipt.
    • check fails unless the latest approval matches the current bytes.
  • Error output: operation failures now carry the child's own message instead of "failed or exceeded its deadline" with nested JSON.
  • Docs: glossary docs/concepts/agentic-harness.md and evaluation report docs/reports/2026-11-07-harness-edition-evaluation.md (gap matrix, build plan, what was not checked), indexed.

Test plan

  • cargo test --locked: 94 passed, 2 ignored (need real Chronis), including tests/spec.rs (8)
  • cargo clippy --all-targets --locked -- -D warnings
  • cargo fmt --check
  • Scratch repo, real binaries: init --skills-only installed 11 skills into .agents/skills and .claude/skills
  • Real spec review --host claude. The reviewer found two genuine gaps, so approve refused. After the fix the review came back clean, approve and check passed, and an edit after approval made check fail with "changed since approval".
  • Real spec review --host codex: clean on the approved design, and findings on a planted design (a behaviour/acceptance contradiction and a wrong sum; both named with line numbers)
  • Reverting a design to its approved bytes makes check pass again (digest-bound, not edit-history-bound)
  • macOS CI job: cancelled with no runner on every PR since 2026-11-07 (runner/minutes, not code); ubuntu tests and source-and-dependencies pass
  • Fixture and spendcheck CI steps, cargo deny

Known limits

  • The reviewer cannot be proven context-free from inside the host. Freshness comes from spawning a new process with only the path.
  • Approval facts are read through a 1000-event window per design entity (documented in docs/reference/cli.md).
  • Proposal items left as sand or water: EGM upstream install, gstack /plan-ceo-review and /autoplan ports, sandbox-kit guard wiring, a semantic-isa kernel, and a team retro across cn stores. See the report.

🤖 Generated with Claude Code

The Harness Edition proposal needs an entry router across seven stages,
a Spec stage reviewed by a reader without the author's context, a human
approval before work is planned, and a Reflect stage. allstack already
installs skills into both hosts, so each piece ships as a bundled skill
from METHODS: allstack-harness, allstack-spec, allstack-reflect and
allstack-investigate.

allstack spec gives the Spec stage a mechanism:

- review runs a read-only host process that receives only the draft path
  and repository root, and writes a receipt under .allstack/spec/reviews.
  Receipt names carry a zero-padded nanosecond timestamp so the newest
  clean receipt wins by name order.
- approve records an event binding the design's SHA-256 digest to the
  approver and to a clean receipt for that digest. A findings or unknown
  verdict is refused; --without-review is the explicit override.
- check exits nonzero with a reason (unapproved, changed since approval,
  unreviewed) unless the latest approval matches the current digest. It
  takes the run coordinator lock. claude-beads calls it before cutting
  beads.

Approval events live in the AllSource store under a per-design entity,
separate from run history. hosts.rs shares its read-only argv and
final-text parsing with the review path; invoke behaviour is unchanged.

Operation errors now carry the child's own message. The supervisor
reported every failure as "failed or exceeded its deadline" with the
child's JSON error nested inside; a timeout and a refusal now read
differently.

Docs: docs/concepts/agentic-harness.md glossary, the evaluation report
docs/reports/2026-11-07-harness-edition-evaluation.md, and index, README,
native-skills and CLI reference updates.

Verified: cargo test --locked (94 passed, 2 ignored needing real Chronis),
cargo clippy --all-targets --locked -D warnings, cargo fmt --check. A
scratch repository ran init --skills-only (11 skills into both hosts) and
a real Claude review: findings blocked approve, a clean re-review allowed
it, check passed, and an edit after approval made check fail.
@decebal
decebal marked this pull request as ready for review November 8, 2026 12:19
@decebal
decebal merged commit 816cd98 into main Nov 8, 2026
2 of 3 checks passed
@decebal
decebal deleted the feat/harness-install branch November 8, 2026 14:16
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