268ee705f4
The `spec-skeptic` `scope-fork` juror reads only the seeding issue plus the spec. On the legitimate `specify` direct-entry path — a fork settled in a long in-context design discussion — that resolution lives only in ephemeral chat the juror cannot replay. When the issue body lags the discussion (still lists the fork open), the juror correctly blocks, and a design BLOCK escalates without self-correction. The result: auto-sign was structurally almost unreachable for the in-context entry path. Close the blind spot by giving the juror an auditable source instead of weakening the gate. When `specify` enters in-context and a tracker issue still lists a now-resolved fork as open, the orchestrator posts a reconciliation comment recording each fork's resolution WITH provenance (a record of the user's decision, never a fresh orchestrator one) before writing the spec. The comment is persistent and audit-able — unlike a carrier digest — so it, not the orchestrator's confidence, is what the juror checks. Separation of powers keeps it honest: the orchestrator writes the comment, the adversarial juror enforces the provenance requirement. A bare `decision: X` with no provenance does not resolve the fork — the re-dispatched juror blocks on it. The escalation rule and the three-field carrier are untouched; only the juror's information changes. Mechanics: - specify Step 1.5: reconciliation-comment sub-step, provenance format, issue-less fallback (auto-sign -> human sign-off, no weak spec-note). - spec-skeptic: replace the "quoted in the dispatch" drift; juror reads the issue WITH comments via `issue_tracker.show_cmd`; provenance check. - new profile slot `issue_tracker.show_cmd` (must render comments); documented in schema + template. - issue skill: `tea issues <idx>` is body-only; `--comments` required (verified against tea 0.14.1 and Aura #55 — 180 vs 144 lines). - consistency: design.md out-of-scope, README, pipeline.md, boss skill.
86 lines
4.5 KiB
YAML
86 lines
4.5 KiB
YAML
# Project profile for the skills plugin.
|
|
#
|
|
# Drop a copy of this file at <project-root>/.claude/dev-cycle-profile.yml
|
|
# and edit. See ~/dev/skills/docs/profile-schema.md for the full schema
|
|
# and per-key documentation.
|
|
|
|
paths:
|
|
spec_dir: docs/specs
|
|
plan_dir: docs/plans
|
|
# glossary: docs/glossary.md # optional — if set, read as
|
|
# standing reading by every role
|
|
# design_ledger: docs/design/INDEX.md # optional
|
|
# design_contracts: design/contracts # optional
|
|
# design_models: design/models # optional
|
|
code_roots: [src]
|
|
# bench_dir: bench # optional
|
|
# public_interface: [README.md, docs] # what fieldtester may read; everything else is forbidden
|
|
# fieldtest_examples: examples/fieldtest # where fieldtester writes fixtures
|
|
|
|
naming:
|
|
counter_dirs: [docs/specs, docs/plans, design/contracts, design/models]
|
|
policy: stable_per_directory_4digit # stable_per_directory_4digit | date_prefix | flat
|
|
slug_separator: "-"
|
|
|
|
commands:
|
|
build: "" # REQUIRED — e.g. "cargo build" or "npm run build"
|
|
test: "" # REQUIRED — e.g. "cargo test" or "npm test"
|
|
# lint: "" # optional
|
|
# doc_build: "" # e.g. "cargo doc --no-deps 2>&1" — used by docwriter
|
|
regression: [] # list of shell commands run by audit; non-zero exit = regress
|
|
architect_sweeps: [] # optional project-specific architect sweeps; non-zero exit = drift suspicion
|
|
|
|
# spec_validation: # optional — fence label -> validator for spec code blocks
|
|
# parsers: # key = fence info-string; labels with no entry are skipped + documented
|
|
# ail:
|
|
# ext: ".ail" # extension for the temp file the harness writes the block into
|
|
# cmd: "ail parse {file}" # {file} = temp-file path; exit 0 = clean parse, non-zero = BLOCK
|
|
# ail-json:
|
|
# ext: ".ail.json"
|
|
# cmd: "ail check {file}"
|
|
|
|
vocabulary:
|
|
cycle: cycle # one round in the pipeline graph (NOT the top-level container)
|
|
subcycle: iteration # a sub-unit of a cycle
|
|
milestone: milestone # tracker container spanning many cycles; closes only when complete AND functional
|
|
ledger_entry: contract # what one design-ledger entry is called
|
|
|
|
standing_reading:
|
|
always:
|
|
- CLAUDE.md
|
|
- "git log -10 --format=full"
|
|
by_role:
|
|
# architect: [design/contracts]
|
|
# debugger: ["git log -5 --format=full"]
|
|
|
|
git:
|
|
main_sacrosanct: true
|
|
only_orchestrator_commits: true
|
|
protected_branches: [main]
|
|
issue_tracker:
|
|
kind: none # gitea | github | linear | none
|
|
close_marker: "closes #N"
|
|
# url: "" # human-browsable issue list URL
|
|
# list_cmd: "" # e.g. "tea issues ls --repo X/Y --state open"
|
|
# show_cmd: "" # renders one issue WITH comments; index appended last.
|
|
# e.g. "tea issues --comments" -> "tea issues --comments 55"
|
|
|
|
notifications:
|
|
# command: "" # e.g. "~/.claude/notify.sh"; boss falls back to chat if empty
|
|
|
|
pipeline:
|
|
brainstorm: {} # optional discovery front-end; no hard gate of its own
|
|
specify: { gates: [planner] } # core node: spec-production gate before planner
|
|
planner: { gates: [implement] }
|
|
implement: {}
|
|
audit: { mandatory_at: cycle_close }
|
|
debug: { trigger: bug, red_first: true }
|
|
# tdd: { trigger: test_specifiable_feature, red_first: true, alt_to: brainstorm } # opt-in: executable-spec-first entry, alternative to brainstorm
|
|
# boss: { user_invoked: true } # autonomous orchestrator mode, /boss
|
|
# spec_auto_sign: false # opt-in: let /boss sign a spec in the user's place when all
|
|
# # objective gates are green AND a unanimous spec-skeptic panel
|
|
# # passes; default off (human signature mandatory). See profile-schema.md.
|
|
# fieldtest: { boss_only: true, when: surface_touch } # per-cycle usability test
|
|
# milestone_fieldtest: { boss_only: true, when: surface_touch, gates_close: milestone } # closing gate: end-to-end proof of the milestone's promise
|
|
# docwriter: { boss_only: true, when: api_stable_across_n_cycles }
|