@event4u/agent-config 9.26.0 → 9.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +12 -11
- package/CHANGELOG.md +134 -207
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/conformance.md +43 -0
- package/dist/agent-src/commands/roadmap/next.md +65 -3
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -3
- package/dist/agent-src/rules/active-remediation.md +2 -0
- package/dist/agent-src/rules/analysis-skill-routing.md +2 -0
- package/dist/agent-src/rules/architecture.md +2 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +2 -0
- package/dist/agent-src/rules/artifact-engagement-recording.md +6 -1
- package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
- package/dist/agent-src/rules/autonomous-execution.md +3 -1
- package/dist/agent-src/rules/brand-consistency.md +2 -0
- package/dist/agent-src/rules/brand-source-of-truth.md +35 -6
- package/dist/agent-src/rules/broken-access-control.md +2 -0
- package/dist/agent-src/rules/cli-output-handling.md +2 -0
- package/dist/agent-src/rules/code-comment-discipline.md +2 -0
- package/dist/agent-src/rules/code-provenance.md +2 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +2 -0
- package/dist/agent-src/rules/commit-conventions.md +2 -0
- package/dist/agent-src/rules/communication-through-line.md +2 -0
- package/dist/agent-src/rules/content-quoting-floor.md +2 -0
- package/dist/agent-src/rules/context-hygiene.md +13 -1
- package/dist/agent-src/rules/copilot-routing.md +2 -0
- package/dist/agent-src/rules/council-availability.md +93 -0
- package/dist/agent-src/rules/cross-source-consistency.md +5 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +2 -0
- package/dist/agent-src/rules/delegation-policy.md +31 -5
- package/dist/agent-src/rules/design-fidelity.md +5 -0
- package/dist/agent-src/rules/design-review-after-ui-write.md +4 -0
- package/dist/agent-src/rules/devcontainer-routing.md +2 -0
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
- package/dist/agent-src/rules/docker-commands.md +2 -0
- package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
- package/dist/agent-src/rules/domain-safety-pii.md +2 -0
- package/dist/agent-src/rules/domain-safety-retention.md +2 -0
- package/dist/agent-src/rules/downstream-changes.md +2 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/evaluator-independence.md +14 -3
- package/dist/agent-src/rules/external-code-graph-interop.md +4 -1
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -0
- package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -0
- package/dist/agent-src/rules/finance-safety-floor.md +3 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
- package/dist/agent-src/rules/git-history-discipline.md +3 -1
- package/dist/agent-src/rules/guidelines.md +2 -0
- package/dist/agent-src/rules/history-discipline.md +5 -1
- package/dist/agent-src/rules/icon-consistency.md +2 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +2 -0
- package/dist/agent-src/rules/improve-before-implement.md +2 -0
- package/dist/agent-src/rules/invite-challenge.md +2 -0
- package/dist/agent-src/rules/laravel-routing.md +2 -0
- package/dist/agent-src/rules/laravel-translations.md +2 -0
- package/dist/agent-src/rules/legal-safety-floor.md +3 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +2 -0
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +2 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +2 -0
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -0
- package/dist/agent-src/rules/media-governance-routing.md +2 -0
- package/dist/agent-src/rules/media-sync-ground-truth.md +2 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
- package/dist/agent-src/rules/missing-tool-handling.md +2 -0
- package/dist/agent-src/rules/model-recommendation.md +2 -0
- package/dist/agent-src/rules/no-attribution-footers.md +2 -0
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +2 -0
- package/dist/agent-src/rules/no-pr-progress-comments.md +5 -1
- package/dist/agent-src/rules/no-roadmap-references.md +2 -0
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
- package/dist/agent-src/rules/onboarding-gate.md +5 -1
- package/dist/agent-src/rules/output-discipline.md +2 -0
- package/dist/agent-src/rules/package-ci-checks.md +2 -0
- package/dist/agent-src/rules/persona-governance.md +2 -0
- package/dist/agent-src/rules/php-coding.md +2 -0
- package/dist/agent-src/rules/prefer-enums-over-literals.md +2 -0
- package/dist/agent-src/rules/preservation-guard.md +2 -0
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +2 -0
- package/dist/agent-src/rules/question-not-instruction.md +2 -0
- package/dist/agent-src/rules/reviewer-awareness.md +2 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
- package/dist/agent-src/rules/role-mode-adherence.md +3 -1
- package/dist/agent-src/rules/rule-type-governance.md +2 -0
- package/dist/agent-src/rules/runtime-safety.md +2 -0
- package/dist/agent-src/rules/scale-discipline.md +5 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/self-repair-loop.md +103 -0
- package/dist/agent-src/rules/senior-engineering-discipline.md +2 -0
- package/dist/agent-src/rules/session-canary.md +62 -19
- package/dist/agent-src/rules/settings-ask-protocol.md +4 -0
- package/dist/agent-src/rules/size-enforcement.md +2 -0
- package/dist/agent-src/rules/skill-improvement-trigger.md +2 -0
- package/dist/agent-src/rules/skill-quality.md +2 -0
- package/dist/agent-src/rules/slash-command-routing-policy.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +2 -0
- package/dist/agent-src/rules/source-discovery-gate.md +2 -0
- package/dist/agent-src/rules/source-of-truth.md +2 -0
- package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +3 -1
- package/dist/agent-src/rules/symfony-routing.md +2 -0
- package/dist/agent-src/rules/think-before-action.md +2 -0
- package/dist/agent-src/rules/token-budget-discipline.md +5 -1
- package/dist/agent-src/rules/token-efficiency.md +2 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
- package/dist/agent-src/rules/tool-safety.md +7 -1
- package/dist/agent-src/rules/ui-audit-gate.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -0
- package/dist/agent-src/rules/upstream-proposal.md +2 -0
- package/dist/agent-src/rules/user-interaction.md +2 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +2 -0
- package/dist/agent-src/skills/adversarial-review/SKILL.md +1 -1
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/dist/agent-src/skills/performance-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-improvement/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/sequential-thinking/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/templates/AGENTS.md +6 -10
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli/registry.js +9 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-22GCIJ2O.js +270 -0
- package/dist/cli-delegate/{chunk-BSLUHV2F.js → chunk-2BE5I2MN.js} +156 -141
- package/dist/cli-delegate/{chunk-AIIUU73N.js → chunk-7OMQCH4V.js} +1 -1
- package/dist/cli-delegate/{chunk-HJ6DAJHR.js → chunk-GB2FSUEE.js} +57 -7
- package/dist/cli-delegate/{chunk-WR6GTRHJ.js → chunk-JXARCGVN.js} +3 -3
- package/dist/cli-delegate/{chunk-SJQMJI7M.js → chunk-PQSAQKHW.js} +467 -305
- package/dist/cli-delegate/chunk-REKCMYOU.js +2991 -0
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +134 -0
- package/dist/cli-delegate/cmd_conformance.js +7 -7
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +4 -4
- package/dist/cli-delegate/cmd_explain.js +80 -330
- package/dist/cli-delegate/cmd_export.js +5 -5
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +2 -2
- package/dist/cli-delegate/cmd_mcp_available.js +433 -0
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +153 -0
- package/dist/cli-delegate/cmd_preflight.js +1 -1
- package/dist/cli-delegate/cmd_prune.js +5 -5
- package/dist/cli-delegate/cmd_route_audit.js +8 -8
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_settings_get.js +272 -0
- package/dist/cli-delegate/cmd_settings_migrate.js +5 -5
- package/dist/cli-delegate/cmd_settings_set.js +7 -2967
- package/dist/cli-delegate/cmd_sync.js +5 -5
- package/dist/cli-delegate/cmd_uninstall.js +5 -5
- package/dist/cli-delegate/cmd_update.js +4 -4
- package/dist/cli-delegate/cmd_upgrade.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +5 -5
- package/dist/cli-delegate/cmd_versions.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +184 -124
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +9080 -5701
- package/dist/install/install.mjs +698 -508
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +698 -437
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +80 -15
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/scripts/condense.js +33 -2
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/io/yamlIO.js +85 -0
- package/dist/server/io/yamlIO.js.map +1 -1
- package/dist/server/routes/settings.js +1 -12
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/wizard.js +52 -2
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/shared/settingsCarveOut.js +118 -0
- package/dist/shared/settingsCarveOut.js.map +1 -0
- package/dist/shared/settingsSurface.js +7 -1
- package/dist/shared/settingsSurface.js.map +1 -1
- package/dist/ui/assets/index-DmR0mbk4.js.map +1 -1
- package/docs/contracts/settings-classes.md +29 -8
- package/docs/guidelines/agent-infra/memory-access.md +14 -3
- package/package.json +1 -1
- package/src/agent-src/templates/AGENTS.md +6 -10
- package/src/config/budgets.yml +29 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +26 -0
- package/src/scripts/_cli/cmd_brand_status.ts +174 -0
- package/src/scripts/_cli/cmd_doctor.ts +6 -21
- package/src/scripts/_cli/cmd_mcp_available.ts +266 -0
- package/src/scripts/_cli/cmd_packs_active.ts +225 -0
- package/src/scripts/_cli/cmd_settings_get.ts +324 -0
- package/src/scripts/_dispatch.bash +75 -0
- package/src/scripts/_lib/agent_settings.ts +82 -16
- package/src/scripts/_lib/carrier_divergence.ts +135 -0
- package/src/scripts/_lib/git_common_dir.ts +128 -0
- package/src/scripts/_lib/host_capability.ts +84 -1
- package/src/scripts/_lib/obligation_frequency.ts +391 -0
- package/src/scripts/_lib/prompt_shape.ts +88 -0
- package/src/scripts/_lib/review_skipped_record.ts +102 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +254 -0
- package/src/scripts/_lib/self_repair.ts +342 -0
- package/src/scripts/_lib/self_repair_store.ts +100 -0
- package/src/scripts/_lib/session_register.ts +361 -0
- package/src/scripts/_lib/transcript_entry.ts +80 -0
- package/src/scripts/check_branch_freshness.ts +255 -0
- package/src/scripts/check_council_config_location.ts +125 -1
- package/src/scripts/check_enforcement_coverage.ts +192 -7
- package/src/scripts/check_rule_projection_integrity.ts +364 -0
- package/src/scripts/check_standing_rule_delivery.ts +314 -0
- package/src/scripts/condense.ts +36 -2
- package/src/scripts/config/profiles.ts +13 -3
- package/src/scripts/conformance_scan.ts +307 -24
- package/src/scripts/council_availability_hook.ts +188 -0
- package/src/scripts/council_cli.ts +126 -7
- package/src/scripts/generate_settings_reference.ts +232 -0
- package/src/scripts/hook_manifest.yaml +155 -33
- package/src/scripts/hooks/block_no_verify.ts +95 -3
- package/src/scripts/hooks/block_unauthorized_git.ts +217 -2
- package/src/scripts/hooks/concern_registry.ts +12 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +450 -0
- package/src/scripts/hooks/end_review_nudge_hook.ts +726 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +342 -0
- package/src/scripts/install.ts +151 -0
- package/src/scripts/language_mirror_hook.ts +49 -6
- package/src/scripts/measure_scope_dedup.ts +19 -13
- package/src/scripts/onboarding_gate_hook.ts +40 -1
- package/src/scripts/orchestration_backfill.ts +354 -0
- package/src/scripts/orchestration_record.ts +4 -1
- package/src/scripts/preamble_byte_census.ts +9 -20
- package/src/scripts/release.ts +142 -36
- package/src/scripts/report_carrier_divergence.ts +364 -0
- package/src/scripts/report_skill_activation.ts +257 -0
- package/src/scripts/report_skill_obligation_violations.ts +579 -0
- package/src/scripts/routing_doctor.ts +77 -6
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/self_repair_cli.ts +240 -0
- package/src/scripts/self_repair_hook.ts +241 -0
- package/src/scripts/session_canary_hook.ts +35 -3
- package/src/scripts/session_register_hook.ts +288 -0
- package/src/scripts/sessions_cli.ts +140 -0
- package/src/scripts/validate_frontmatter.ts +68 -0
- package/src/server/io/yamlIO.ts +87 -0
- package/src/shared/settingsCarveOut.ts +143 -0
- package/src/shared/settingsSurface.ts +7 -1
|
@@ -42,17 +42,47 @@ git fetch origin --prune
|
|
|
42
42
|
git ls-tree --name-only origin/main agents/roadmaps/ # still active?
|
|
43
43
|
git ls-tree --name-only origin/main agents/roadmaps/archive/ # already closed?
|
|
44
44
|
gh pr list --state open --json number,title,headRefName # in flight?
|
|
45
|
+
agent-config sessions:list --json # claimed right now?
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
Excluded from the candidate set: `template.md`, `archive/`,
|
|
48
49
|
`skipped/`, `later/`, anything with `status: draft` whose promotion
|
|
49
|
-
trigger has not fired, and
|
|
50
|
-
|
|
50
|
+
trigger has not fired, and:
|
|
51
|
+
|
|
52
|
+
| Exclusion | Source | What it means | Recovery |
|
|
53
|
+
|---|---|---|---|
|
|
54
|
+
| **taken by an open PR** | `gh pr list` — a roadmap slug matching an open PR's branch | The work is done or nearly done and is waiting on review | Review or merge that PR; the roadmap archives inside it |
|
|
55
|
+
| **claimed by a live session** | `sessions:list` — a live record whose `roadmap_slug` matches | Another session is working on it *right now*, before any PR exists | Nothing to do — it releases on that session's end, or by TTL |
|
|
56
|
+
|
|
57
|
+
Keep the two distinguishable in the reported screen. They are different
|
|
58
|
+
states with different recovery, and collapsing them into "unavailable"
|
|
59
|
+
loses the only information that tells the user whether to wait for a
|
|
60
|
+
review or simply pick something else.
|
|
51
61
|
|
|
52
62
|
A roadmap completes by an archive move **inside its merging PR**, so a
|
|
53
63
|
local checkout can show a closed roadmap as open. That is why this step
|
|
54
64
|
precedes the screen instead of following it.
|
|
55
65
|
|
|
66
|
+
The session read closes a window the PR check cannot. Measured over the 14
|
|
67
|
+
most recent merged feature PRs, the gap between a branch's first commit and
|
|
68
|
+
its PR is a median of **18.5 minutes** and a maximum of **67** — and that is a
|
|
69
|
+
*lower bound*, since the clock starts at roadmap selection, strictly earlier
|
|
70
|
+
than the first commit. For that whole interval the PR check reports the
|
|
71
|
+
roadmap as free. Measurement:
|
|
72
|
+
`agents/evidence/analysis/parallel-session-register-phase1.md`.
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
THE REGISTER *WRITE* IS HOOK-CARRIED AND DETERMINISTIC.
|
|
76
|
+
THIS *READ* IS NOT. THE TWO MUST NOT LOOK ALIKE.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This screen runs because the model read this instruction — there is no gate
|
|
80
|
+
that fires it, and none that notices when it is skipped. It is a
|
|
81
|
+
model-carried obligation in exactly the shape the `enforced_by: none` rules
|
|
82
|
+
declare, and it is stated here rather than left as prose that reads like a
|
|
83
|
+
guarantee. What IS deterministic: the heartbeat that writes the register, the
|
|
84
|
+
TTL expiry, and `sessions:list` itself once invoked.
|
|
85
|
+
|
|
56
86
|
### 2. Screen the survivors — five disqualifiers
|
|
57
87
|
|
|
58
88
|
For each candidate read its frontmatter, its open-step count, and every
|
|
@@ -108,6 +138,31 @@ GOODHART MOVE THIS PACKAGE'S OWN DISCIPLINE FORBIDS.
|
|
|
108
138
|
[`/roadmap:create`](create.md) or a blocker the user can clear. Do
|
|
109
139
|
not manufacture a pick.
|
|
110
140
|
|
|
141
|
+
### 3b. Claim the pick, so the next session's screen sees it
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
agent-config sessions:claim <roadmap-slug>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Immediately after the pick, before any branch or commit. This writes the slug
|
|
148
|
+
into `agents/runtime/state/roadmap-claim.json`; the next heartbeat lifts it into
|
|
149
|
+
this session's register record, so another session's step 1 excludes it **within
|
|
150
|
+
one turn** and long before a PR exists.
|
|
151
|
+
|
|
152
|
+
Routing the claim through a state file rather than having this command write the
|
|
153
|
+
register directly is deliberate: the roadmap is picked mid-session by the model,
|
|
154
|
+
a hook is a script and cannot know what was picked, and this way the model never
|
|
155
|
+
needs to know the register's path or format. The cost is that the claim lands at
|
|
156
|
+
most one turn late.
|
|
157
|
+
|
|
158
|
+
Same honesty boundary as the screen above: **this write is model-carried.** The
|
|
159
|
+
verb is deterministic once invoked, and nothing forces the invocation. A skipped
|
|
160
|
+
claim degrades to today's behaviour — the PR check still catches the roadmap once
|
|
161
|
+
a PR exists — so the failure mode is a re-opened window, not a wrong result.
|
|
162
|
+
|
|
163
|
+
`agent-config sessions:claim --release` drops the claim if the run is abandoned
|
|
164
|
+
before the session ends; otherwise `session_end` clears the whole record.
|
|
165
|
+
|
|
111
166
|
### 4. Workspace — branch by default, worktree on request
|
|
112
167
|
|
|
113
168
|
Default: a feature branch in the current checkout, named
|
|
@@ -176,7 +231,13 @@ AT THE MOMENT OF THE CLAIM IS AN UNVERIFIED CLAIM.
|
|
|
176
231
|
- **One roadmap per invocation.** Never chain a second pick after the
|
|
177
232
|
first closes — the user re-invokes.
|
|
178
233
|
- **The screen is reported, not just used.** State which candidates were
|
|
179
|
-
disqualified and on what, so the pick is auditable
|
|
234
|
+
disqualified and on what, so the pick is auditable — and keep
|
|
235
|
+
"taken by open PR" and "claimed by a live session" distinguishable.
|
|
236
|
+
- **A live foreign claim is not a merge conflict to resolve.** It excludes the
|
|
237
|
+
roadmap from *this* pick and nothing more. Never override it, and never treat
|
|
238
|
+
the register as a lock: it is advisory, two sessions can claim in the same
|
|
239
|
+
millisecond, and an idle session disappears from it although its user returns
|
|
240
|
+
([`parallel-sessions`](../../../../docs/guides/parallel-sessions.md)).
|
|
180
241
|
- **A judgement-call blocker goes to the council, not to the user.**
|
|
181
242
|
A human-ACTION blocker goes to neither — it disqualifies.
|
|
182
243
|
- **No merge, ever.** The PR is opened for review; merging is
|
|
@@ -192,3 +253,4 @@ AT THE MOMENT OF THE CLAIM IS AN UNVERIFIED CLAIM.
|
|
|
192
253
|
- [`/worktree:create`](../../worktree/create.md) — the `--worktree` path
|
|
193
254
|
- [`/create-pr`](../../git/pr/create.md) — delivery + the CI wait contract
|
|
194
255
|
- [`roadmap-process-loop`](../../contexts/execution/roadmap-process-loop.md) — canonical mechanics
|
|
256
|
+
- [`parallel-sessions`](../../../../docs/guides/parallel-sessions.md) — what the session register does, its TTLs, and the two limits it does not hide
|
|
@@ -150,9 +150,16 @@ conformant audit-log-v1 line from the counts you already have:
|
|
|
150
150
|
[--first-pass-success true|false] [--escalated true|false]
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
A capture **hook** is the
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
A capture **hook** is now the primary path where the host has a
|
|
154
|
+
`post_tool_use` slot: the 2026-08-07 transcript backfill measured that
|
|
155
|
+
SYNCHRONOUS dispatch results DO carry `resolvedModel` / `totalTokens` /
|
|
156
|
+
`usage` — the 2026-06-30 "payload carries no usage" premise held only for
|
|
157
|
+
async dispatches, which stay metrics-absent. The `orchestration-record`
|
|
158
|
+
concern (`src/scripts/hooks/orchestration_record_hook.ts`, registered in
|
|
159
|
+
`hook_manifest.yaml`) emits the line deterministically on every Agent/Task
|
|
160
|
+
completion; measured model-carried capture before it existed was 1 of 370
|
|
161
|
+
dispatches (0.27 %). The CLI above stays for hosts without the slot and for
|
|
162
|
+
orchestrator-side records the hook cannot see. Reader:
|
|
156
163
|
`src/scripts/orchestration_savings_report.ts`.
|
|
157
164
|
|
|
158
165
|
**`token_delta` sourcing priority:**
|
|
@@ -13,6 +13,8 @@ load_context:
|
|
|
13
13
|
- "../contexts/contracts/artifact-engagement-flow.md"
|
|
14
14
|
workspaces: [agent-config-maintainer, engineering]
|
|
15
15
|
packs: [meta]
|
|
16
|
+
# obligation: line 22
|
|
17
|
+
obligation_frequency: "per-task"
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
<!-- cloud_safe: noop -->
|
|
@@ -21,7 +23,10 @@ packs: [meta]
|
|
|
21
23
|
|
|
22
24
|
**Iron Law.** After a `/implement-ticket` or `/work` phase-step, emit one
|
|
23
25
|
`telemetry:record` call with consulted + applied ids when telemetry is
|
|
24
|
-
enabled. Default-off; opt-in via `.agent-settings.yml
|
|
26
|
+
enabled. Default-off; opt-in via `.agent-settings.yml` — which is the **project
|
|
27
|
+
layer of a cascade that starts user-global**, so never read a value or its
|
|
28
|
+
absence from that file alone; `agent-config settings:get <key>` reports the
|
|
29
|
+
value and the file it actually came from. Zero overhead when
|
|
25
30
|
disabled. Recording contract + privacy floor:
|
|
26
31
|
[`contexts/contracts/artifact-engagement-flow.md`](../contexts/contracts/artifact-engagement-flow.md).
|
|
27
32
|
|
|
@@ -13,6 +13,8 @@ triggers:
|
|
|
13
13
|
self_contained: true
|
|
14
14
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
15
15
|
packs: [meta]
|
|
16
|
+
# obligation: line 4
|
|
17
|
+
obligation_frequency: "per-turn"
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
# Autonomous Execution
|
|
@@ -65,7 +67,7 @@ ALLOWLIST > 20 ENTRIES IN ONE SESSION = THE LINTER IS WRONG.
|
|
|
65
67
|
STOP. PROPOSE LINTER REDESIGN OR REMOVAL. DO NOT EXPAND THE ALLOWLIST FURTHER.
|
|
66
68
|
```
|
|
67
69
|
|
|
68
|
-
Crossing 20 entries counts as the 3rd validation-target failure — fix the tool shape, not the list. Enforced at tool-call time by the `block-config-weakening` PreToolUse guard (`src/scripts/hooks/block_config_weakening.ts`): it counts allowlist entries added per session, warns from 5, and blocks past 20. Baselines and budget thresholds warn only — a rising count there may be a legitimate ratchet reset, which the edit alone cannot distinguish. Verify with the narrowest tool that proves the target green (a single `curl` / Playwright spec for HTTP/UI, the test runner with a `--filter`, an `xdebug` step-through) — never a meta-pipeline as per-iteration probe. Failed-attempt detail, suppression-sweep equivalents, probe-efficiency detail, and adaptive effort & stop (RDP): [`autonomy-mechanics § Validation-loop budget`](../contexts/execution/autonomy-mechanics.md).
|
|
70
|
+
Crossing 20 entries counts as the 3rd validation-target failure — fix the tool shape, not the list. Enforced at tool-call time by the `block-config-weakening` PreToolUse guard (`src/scripts/hooks/block_config_weakening.ts`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork: it counts allowlist entries added per session, warns from 5, and blocks past 20. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so there the cap is model-carried and "enforced at tool-call time" is not a claim this rule can make. Run `agent-config hooks:status` to see which slots are bound on the host you are actually on — the sibling rules `git-history-discipline` and `evaluator-independence` qualify the identical slot, and an unqualified claim here would read as a guarantee the manifest does not give. Baselines and budget thresholds warn only — a rising count there may be a legitimate ratchet reset, which the edit alone cannot distinguish. Verify with the narrowest tool that proves the target green (a single `curl` / Playwright spec for HTTP/UI, the test runner with a `--filter`, an `xdebug` step-through) — never a meta-pipeline as per-iteration probe. Failed-attempt detail, suppression-sweep equivalents, probe-efficiency detail, and adaptive effort & stop (RDP): [`autonomy-mechanics § Validation-loop budget`](../contexts/execution/autonomy-mechanics.md).
|
|
69
71
|
|
|
70
72
|
Body migrated to `contexts/execution/autonomy-mechanics.md` (per P4 of `road-to-kernel-and-router.md`) — opt-in detection summary, task-scope shapes table, N=3 mechanics, allowlist-antipattern detail, probe efficiency, adaptive effort (RDP).
|
|
71
73
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
@@ -20,6 +20,8 @@ applies_to_user_types:
|
|
|
20
20
|
self_contained: true
|
|
21
21
|
workspaces: [engineering]
|
|
22
22
|
packs: [brand]
|
|
23
|
+
# obligation: line 51
|
|
24
|
+
obligation_frequency: "per-edit"
|
|
23
25
|
---
|
|
24
26
|
|
|
25
27
|
# Brand Source of Truth
|
|
@@ -27,7 +29,7 @@ packs: [brand]
|
|
|
27
29
|
A precedence rule plus its validation gate (merged from the former
|
|
28
30
|
`brand-consistency` rule, 2026-08-04 — the pair shared triggers and one
|
|
29
31
|
subject). When a consumer already has a brand — registered tokens
|
|
30
|
-
(
|
|
32
|
+
(`tokens.json`), a voice profile, a brand guide — that brand is authoritative
|
|
31
33
|
for the run. The curated `brand` corpus (archetypes, colour psychology, type
|
|
32
34
|
principles) is a **gap-filler**, never an override.
|
|
33
35
|
|
|
@@ -53,10 +55,32 @@ OR A VOICE RULE. A VALUE THAT TRACES TO NEITHER IS OFF-BRAND.
|
|
|
53
55
|
NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
54
56
|
```
|
|
55
57
|
|
|
58
|
+
## Where the brand actually lives — and how to check
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
NEVER INFER BRAND PRESENCE FROM A FILENAME. RUN `agent-config brand:status`.
|
|
62
|
+
THE FILE IS `tokens.json`, NEVER `.tokens.json` — A DOT-PREFIXED FILE IS READ BY NOTHING.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The resolver searches exactly four paths under the project root, in this order,
|
|
66
|
+
first hit wins (`BRAND_TOKEN_PATHS`, the UI scaffold directive):
|
|
67
|
+
|
|
68
|
+
1. `tokens.json`
|
|
69
|
+
2. `assets/tokens.json`
|
|
70
|
+
3. `resources/tokens.json`
|
|
71
|
+
4. `agents/settings/brand/tokens.json` <!-- ref-ignore -->
|
|
72
|
+
|
|
73
|
+
`agent-config brand:status` reports which one holds a file, or that none does —
|
|
74
|
+
and separately flags a dot-prefixed `.tokens.json`, which is the file a reader
|
|
75
|
+
of this rule's earlier wording would plausibly have created and which nothing
|
|
76
|
+
reads. Absent is a real answer: it means the greenfield branch below, not a
|
|
77
|
+
misconfiguration.
|
|
78
|
+
|
|
56
79
|
## Precedence order
|
|
57
80
|
|
|
58
|
-
1. **Consumer brand profile** — registered
|
|
59
|
-
guide, or a confirmed `brand-strategy`
|
|
81
|
+
1. **Consumer brand profile** — a registered `tokens.json` at one of the four
|
|
82
|
+
paths above, a voice profile, a brand guide, or a confirmed `brand-strategy`
|
|
83
|
+
/ `brand-identity` constraint set.
|
|
60
84
|
2. **This run's confirmed decisions** — selections the human signed off this session.
|
|
61
85
|
3. **The brand corpus** — archetype / colour / type / messaging defaults, used
|
|
62
86
|
only where 1 and 2 are silent, and always surfaced as corpus-sourced.
|
|
@@ -64,7 +88,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
|
64
88
|
## What the gate covers
|
|
65
89
|
|
|
66
90
|
- **Colour / type / spacing** in generated UI or assets that is not one of the
|
|
67
|
-
active brand tokens (from `state.ui_design` or the consumer's
|
|
91
|
+
active brand tokens (from `state.ui_design` or the consumer's `tokens.json`).
|
|
68
92
|
A raw hex / font / px value with no token behind it is off-brand.
|
|
69
93
|
- **Copy and microcopy** whose register contradicts the active voice profile
|
|
70
94
|
(e.g. playful copy under an authoritative `Ruler` voice).
|
|
@@ -77,7 +101,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
|
77
101
|
- **Precedence half:** any brand decision while a consumer brand profile is
|
|
78
102
|
present — to keep the corpus from quietly replacing a value the brand already
|
|
79
103
|
defines.
|
|
80
|
-
- **Gate half:** a brand layer is active for the run (a
|
|
104
|
+
- **Gate half:** a brand layer is active for the run (a `tokens.json` /
|
|
81
105
|
`state.ui_design` brand profile or a confirmed `brand-strategy` /
|
|
82
106
|
`brand-identity` constraint set) AND a UI / copy / asset is being emitted or
|
|
83
107
|
reviewed.
|
|
@@ -112,6 +136,11 @@ for the full Brand-mode vs Product-mode discriminator.
|
|
|
112
136
|
- [`brand-consistency`](brand-consistency.md) — pointer stub; its body lives here since the 2026-08-04 merge.
|
|
113
137
|
- [`brand`](../skills/brand/SKILL.md) — the gap-fill corpus this rule subordinates to consumer brand.
|
|
114
138
|
- [`brand-identity`](../skills/brand-identity/SKILL.md) — defines the tokens the gate validates against.
|
|
115
|
-
- [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG
|
|
139
|
+
- [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG token
|
|
140
|
+
source of truth. **Known contradiction, recorded not resolved:** that skill's
|
|
141
|
+
prose says to author `.tokens.json` while the only resolver in the tree reads
|
|
142
|
+
`tokens.json`, so a consumer following it literally produces a file nothing
|
|
143
|
+
loads. The authoring name is a consumer-visible decision and is not changed
|
|
144
|
+
here; `brand:status` surfaces the mismatch at the moment it matters.
|
|
116
145
|
- [`design-intelligence`](../skills/design-intelligence/SKILL.md) — the "audit findings outrank corpus" precedent the gate mirrors.
|
|
117
146
|
- [`docs/guidelines/design-modes.md`](../docs/guidelines/design-modes.md) — brand vs product register discriminator and routing.
|
|
@@ -23,6 +23,8 @@ collision_ok:
|
|
|
23
23
|
"controller": "controllers return user data — the ownership/tenant check floor"
|
|
24
24
|
"endpoint": "every data-returning endpoint needs the three negative tests"
|
|
25
25
|
"tenant": "cross-tenant isolation is this rule's core subject"
|
|
26
|
+
# obligation: line 55
|
|
27
|
+
obligation_frequency: "per-edit"
|
|
26
28
|
---
|
|
27
29
|
|
|
28
30
|
# Broken Access Control
|
|
@@ -35,6 +35,8 @@ collision_ok:
|
|
|
35
35
|
"composer": "composer output is verbose — rtk wrap applies"
|
|
36
36
|
"docker": "docker output is verbose — rtk wrap applies"
|
|
37
37
|
"rector": "rector output is verbose — rtk wrap applies"
|
|
38
|
+
# obligation: line 42
|
|
39
|
+
obligation_frequency: "per-edit"
|
|
38
40
|
---
|
|
39
41
|
|
|
40
42
|
# Cli Output Handling
|
|
@@ -20,6 +20,8 @@ packs: [engineering-base]
|
|
|
20
20
|
collision_ok:
|
|
21
21
|
"refactor": "refactors churn comments — the keep/drop discipline applies"
|
|
22
22
|
"implement": "fresh implementation is where over-commenting lands"
|
|
23
|
+
# obligation: line 5
|
|
24
|
+
obligation_frequency: "per-edit"
|
|
23
25
|
---
|
|
24
26
|
|
|
25
27
|
# Code Comment Discipline
|
|
@@ -11,6 +11,8 @@ load_context:
|
|
|
11
11
|
- "../contexts/contracts/command-suggestion-flow.md"
|
|
12
12
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
13
13
|
packs: [meta]
|
|
14
|
+
# obligation: line 18
|
|
15
|
+
obligation_frequency: "per-turn"
|
|
14
16
|
---
|
|
15
17
|
|
|
16
18
|
# Command Suggestion Policy
|
|
@@ -9,6 +9,8 @@ triggers:
|
|
|
9
9
|
self_contained: true
|
|
10
10
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
11
11
|
packs: [meta]
|
|
12
|
+
# obligation: line 19
|
|
13
|
+
obligation_frequency: "per-event"
|
|
12
14
|
---
|
|
13
15
|
|
|
14
16
|
# Content Quoting Floor
|
|
@@ -12,15 +12,27 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
|
|
|
12
12
|
packs: [meta]
|
|
13
13
|
enforced_by:
|
|
14
14
|
- "hook:context-hygiene"
|
|
15
|
+
# obligation: line 67
|
|
16
|
+
obligation_frequency: "per-turn"
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
# Context Hygiene
|
|
18
20
|
|
|
19
21
|
> **Enforced by:** [`scripts/context_hygiene_hook.ts`](../../scripts/context_hygiene_hook.ts)
|
|
20
|
-
> on Augment + Claude Code (`PostToolUse`).
|
|
22
|
+
> on Augment + Claude Code (`PostToolUse`). Run `agent-config hooks:status` to
|
|
23
|
+
> see whether that slot is actually bound on the host you are on — this line is
|
|
24
|
+
> a statement about the manifest, not about your install. The hook maintains
|
|
21
25
|
> `agents/state/context-hygiene.json` (tool-call count, loop signal,
|
|
22
26
|
> freshness milestones at 20/40/60); the prose below is the spec the
|
|
23
27
|
> hook implements and the agent-side fallback.
|
|
28
|
+
>
|
|
29
|
+
> **What the slot cannot reach.** The carrier fires per *tool call*; the
|
|
30
|
+
> read-loop law below is per *turn*. A turn that makes no tool call fires it
|
|
31
|
+
> zero times — and a reply with no tool call is exactly the shape the read-loop
|
|
32
|
+
> counter is trying to notice. So the counters are hook-carried and the
|
|
33
|
+
> every-turn obligation is model-carried, on every host. Named here because the
|
|
34
|
+
> frequency join in `check_enforcement_coverage.ts` reports it, and a rule whose
|
|
35
|
+
> header says "enforced by" without that sentence reads as a guarantee it is not.
|
|
24
36
|
|
|
25
37
|
## Conversation Freshness
|
|
26
38
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2a"
|
|
4
|
+
description: "Council availability is decided by the CLI resolver, never by the project tree — .agent-settings.yml is not the council config"
|
|
5
|
+
triggers:
|
|
6
|
+
- keyword: "council"
|
|
7
|
+
- keyword: "ai council"
|
|
8
|
+
- keyword: "ai-council"
|
|
9
|
+
- keyword: "council:status"
|
|
10
|
+
- keyword: "second opinion"
|
|
11
|
+
- phrase: "cross-check with another model"
|
|
12
|
+
self_contained: true
|
|
13
|
+
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
14
|
+
packs: [meta]
|
|
15
|
+
enforced_by:
|
|
16
|
+
- "none"
|
|
17
|
+
# obligation: line 27
|
|
18
|
+
obligation_frequency: "per-task"
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Council Availability Is CLI-Decided
|
|
22
|
+
|
|
23
|
+
The council config is user-global (ADR-104): configured once per developer, live
|
|
24
|
+
in every project, worktree and CWD — including consumer repos carrying none of
|
|
25
|
+
this package's internals. Nothing in the project tree switches it on or off.
|
|
26
|
+
|
|
27
|
+
## The Iron Law
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
COUNCIL AVAILABILITY IS DECIDED BY THE CLI RESOLVER — NEVER BY THE PROJECT TREE.
|
|
31
|
+
RUN THE FREE `council:status` PROBE BEFORE CLAIMING THE COUNCIL IS UNAVAILABLE.
|
|
32
|
+
NEVER INFER "NOT CONFIGURED" FROM A MISSING `.agent-settings.yml`, A MISSING
|
|
33
|
+
`scripts/ai_council`, OR A MISSING PROJECT-LOCAL COUNCIL FILE — NONE OF THEM
|
|
34
|
+
CARRY COUNCIL ENABLEMENT.
|
|
35
|
+
NEVER COPY THE USER-GLOBAL CONFIG INTO THE PROJECT TREE TO "MAKE IT WORK".
|
|
36
|
+
NEVER PRESENT A SUBAGENT FAN-OUT AS A COUNCIL.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## The probe
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
agent-config council:status # no API call, no spend, any directory
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Prints `CONFIGURED` / `NOT CONFIGURED`, the resolved path, the layer that
|
|
46
|
+
resolved it, and the member count. In this package's own checkout:
|
|
47
|
+
`./scripts-run src/scripts/council_cli status`.
|
|
48
|
+
|
|
49
|
+
## What says nothing about availability
|
|
50
|
+
|
|
51
|
+
A missing `.agent-settings.yml` (it never carried enablement — the block was
|
|
52
|
+
removed in ADR-093), a missing `scripts/ai_council/` (package-internal, absent
|
|
53
|
+
from every consumer), a missing project-local council file (the resolver ignores
|
|
54
|
+
`project_root` entirely), and invisible API keys (they live under
|
|
55
|
+
`~/.event4u/agent-config/`). The one real location is
|
|
56
|
+
`~/.event4u/agent-config/settings/.ai-council.yml`; the only escape is
|
|
57
|
+
`$AI_COUNCIL_CONFIG`, an explicit absolute path — still not a project search.
|
|
58
|
+
|
|
59
|
+
## Why this rule exists
|
|
60
|
+
|
|
61
|
+
The council switch is **not** in `.agent-settings.yml`, though roughly twenty
|
|
62
|
+
rules train the reflex of reading that file to learn whether a feature is on.
|
|
63
|
+
The exception lived only in [`ai-council`](../skills/ai-council/SKILL.md),
|
|
64
|
+
a skill body that reaches context only on activation, so five consumer sessions
|
|
65
|
+
inspected the tree, announced "council not configured", and substituted a
|
|
66
|
+
subagent fan-out while two members were configured the whole time. One copied
|
|
67
|
+
the user-global config into the repo to "make it work".
|
|
68
|
+
|
|
69
|
+
## If the probe really says unavailable
|
|
70
|
+
|
|
71
|
+
State the resolver's own message and stop. A subagent fan-out is a legitimate
|
|
72
|
+
substitute **only when named as such** — never as "the council". Same honesty
|
|
73
|
+
boundary as [`evaluator-independence`](evaluator-independence.md).
|
|
74
|
+
|
|
75
|
+
## When NOT to fire
|
|
76
|
+
|
|
77
|
+
Availability is already settled this session, or the question is about council
|
|
78
|
+
*content* (findings, synthesis) rather than availability.
|
|
79
|
+
|
|
80
|
+
## Enforcement
|
|
81
|
+
|
|
82
|
+
`enforced_by: none` — no gate reads a chat claim. Deterministic instead:
|
|
83
|
+
`check_council_config_location` fails the build when a council surface ties the
|
|
84
|
+
config to `.agent-settings.yml`, which never carried it, or to a project-tree
|
|
85
|
+
path, and its §4 fails when no always-loaded rule carries this fact at all.
|
|
86
|
+
|
|
87
|
+
## See also
|
|
88
|
+
|
|
89
|
+
- [`ai-council`](../skills/ai-council/SKILL.md) — the full invocation procedure.
|
|
90
|
+
- [`direct-answers`](direct-answers.md) Iron Law 2 — a live-state fact is never
|
|
91
|
+
asserted from inspection when an authoritative resolver exists.
|
|
92
|
+
- [`self-repair-loop`](self-repair-loop.md) — catches the claim when it is made
|
|
93
|
+
anyway.
|
|
@@ -26,6 +26,8 @@ packs: [engineering-base, product-basic]
|
|
|
26
26
|
collision_ok:
|
|
27
27
|
"mockup": "a mockup is a second source — discrepancy check against the ticket text"
|
|
28
28
|
"screenshot": "a screenshot is a second source — discrepancy check"
|
|
29
|
+
# obligation: line 71
|
|
30
|
+
obligation_frequency: "per-task"
|
|
29
31
|
---
|
|
30
32
|
|
|
31
33
|
# Cross-Source Consistency
|
|
@@ -59,6 +61,9 @@ OBVIOUS-TO-THE-AGENT ≠ IN-SCOPE.
|
|
|
59
61
|
a ticket/spec that carries a second source (an attachment, a code reality, or an
|
|
60
62
|
internal contradiction), gated by `consistency.cross_source` in
|
|
61
63
|
`.agent-settings.yml` (`on` default · `auto` = high-confidence only · `off` = inert).
|
|
64
|
+
That file is the project layer of a cascade that starts user-global — never read
|
|
65
|
+
the setting or its absence from it alone; `agent-config settings:get
|
|
66
|
+
consistency.cross_source` reports the value and the file it came from.
|
|
62
67
|
|
|
63
68
|
**Does NOT fire** on a single clear source with no second source to compare
|
|
64
69
|
against (that is plain vagueness — it belongs to `ask-when-uncertain`), on
|
|
@@ -16,6 +16,8 @@ workspaces: [agent-config-maintainer, engineering]
|
|
|
16
16
|
packs: [meta]
|
|
17
17
|
collision_ok:
|
|
18
18
|
"honest null": "this rule asks whether a recorded null may be REVISITED; evaluator-independence asks how one was PRODUCED — different decision points on the same artefact"
|
|
19
|
+
# obligation: line 31
|
|
20
|
+
obligation_frequency: "per-task"
|
|
19
21
|
---
|
|
20
22
|
|
|
21
23
|
# Decision Revisit Gate
|
|
@@ -20,6 +20,8 @@ routes_to:
|
|
|
20
20
|
- "skill:subagent-orchestration"
|
|
21
21
|
workspaces: [engineering]
|
|
22
22
|
packs: [engineering-base]
|
|
23
|
+
# obligation: line 35
|
|
24
|
+
obligation_frequency: "per-task"
|
|
23
25
|
---
|
|
24
26
|
|
|
25
27
|
# Delegation Policy
|
|
@@ -75,11 +77,35 @@ primitive → run in-session (clean no-op).
|
|
|
75
77
|
ordered slice never dispatches before its declared parent's return is
|
|
76
78
|
verified. Both per
|
|
77
79
|
[`subagent-steering`](../contexts/execution/subagent-steering.md).
|
|
78
|
-
6. **Record** telemetry after each dispatch —
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
6. **Record** telemetry after each dispatch — on hook-capable hosts the
|
|
81
|
+
`orchestration-record` concern (`post_tool_use`) emits the line
|
|
82
|
+
deterministically for every Agent/Task completion; on hosts without the
|
|
83
|
+
slot, run `orchestration_record` yourself (one validated line: spawn_count,
|
|
84
|
+
token_delta + provenance, tier, task_class) per
|
|
85
|
+
[`orchestration-telemetry`](../contexts/execution/orchestration-telemetry.md)
|
|
86
|
+
§ Emit. Measured before the hook existed: 1 of 370 dispatches captured —
|
|
87
|
+
the model-carried path alone leaves the value question unmeasured.
|
|
88
|
+
|
|
89
|
+
## Carriers — how this rule reaches a session (and what stays model-carried)
|
|
90
|
+
|
|
91
|
+
No host runs the tier-2 rule router, so this file's triggers alone never load
|
|
92
|
+
it. The obligation travels on three carriers instead: the always-loaded
|
|
93
|
+
AGENTS.md line (delegate-by-default + end-review), the `delegation-nudge`
|
|
94
|
+
concern on `user_prompt_submit` (runs `classifyTask` on cheap prompt signals
|
|
95
|
+
and injects a one-line verdict ONLY when the classifier says
|
|
96
|
+
`do-in-parallel`/`do-in-steps` — silence otherwise; delivery on
|
|
97
|
+
`user_prompt_submit` is end-to-end verified), and the `end-review-nudge`
|
|
98
|
+
concern on `stop` (ONE `review_skipped` telemetry line per mutating
|
|
99
|
+
no-review session — verified; its advisory line reaches the dispatcher
|
|
100
|
+
output, but host-side forwarding of stop-slot context to the model is
|
|
101
|
+
unverified, so the model-facing end-review carrier is the AGENTS.md line
|
|
102
|
+
plus this telemetry). The
|
|
103
|
+
capability gate itself resolves from the committed host registry in
|
|
104
|
+
`src/scripts/_lib/host_capability.ts` (settings override wins). What stays
|
|
105
|
+
model-carried, honestly: the decomposition itself, the per-return
|
|
106
|
+
verification, and every dispatch on hosts without hook slots. The nudges are
|
|
107
|
+
advisory by design — whether they change behaviour is measured by the
|
|
108
|
+
telemetry, not assumed.
|
|
83
109
|
|
|
84
110
|
## Scope — does NOT
|
|
85
111
|
|
|
@@ -36,6 +36,8 @@ workspaces: [engineering]
|
|
|
36
36
|
packs: [engineering-base, frontend-design]
|
|
37
37
|
collision_ok:
|
|
38
38
|
"mockup": "a provided mockup is the spec — 1:1 fidelity floor"
|
|
39
|
+
# obligation: line 58
|
|
40
|
+
obligation_frequency: "per-edit"
|
|
39
41
|
---
|
|
40
42
|
|
|
41
43
|
# Design Fidelity
|
|
@@ -70,6 +72,9 @@ decisions already made — treat it like brand tokens, not like inspiration.
|
|
|
70
72
|
## Strictness — set by `design.fidelity_mode`
|
|
71
73
|
|
|
72
74
|
Read `design.fidelity_mode` from `.agent-settings.yml`. Missing → `strict`.
|
|
75
|
+
That file is the project layer of a cascade that starts user-global, so "missing"
|
|
76
|
+
means missing from **every** layer — `agent-config settings:get
|
|
77
|
+
design.fidelity_mode` reports the value and the file it came from.
|
|
73
78
|
|
|
74
79
|
| Mode | Behaviour |
|
|
75
80
|
|---|---|
|
|
@@ -13,11 +13,15 @@ routes_to:
|
|
|
13
13
|
- "skill:accessibility-auditor"
|
|
14
14
|
workspaces: [agent-config-maintainer, engineering]
|
|
15
15
|
packs: [frontend-design]
|
|
16
|
+
enforced_by:
|
|
17
|
+
- "none"
|
|
16
18
|
collision_ok:
|
|
17
19
|
"component": "a written component is reviewed before it is called done — the write-side half"
|
|
18
20
|
"design token": "same surface, opposite side: ui-audit-gate inventories tokens before the write, this reviews what the write emitted"
|
|
19
21
|
"resources/views/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
20
22
|
"resources/js/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
23
|
+
# obligation: line 39
|
|
24
|
+
obligation_frequency: "per-edit"
|
|
21
25
|
---
|
|
22
26
|
|
|
23
27
|
# Design Review After UI Write
|