@event4u/agent-config 9.25.0 → 9.26.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/CHANGELOG.md +87 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/conformance.md +2 -2
- package/dist/agent-src/commands/review/changes.md +6 -5
- package/dist/agent-src/commands/roadmap/next.md +194 -0
- package/dist/agent-src/commands/roadmap.md +12 -4
- package/dist/agent-src/contexts/execution/subagent-routing.md +4 -1
- package/dist/agent-src/rules/delegation-policy.md +3 -2
- package/dist/agent-src/rules/design-fidelity.md +17 -1
- package/dist/agent-src/rules/design-review-after-ui-write.md +116 -0
- package/dist/agent-src/rules/evaluator-independence.md +9 -3
- package/dist/agent-src/rules/session-canary.md +2 -0
- package/dist/agent-src/rules/settings-ask-protocol.md +176 -0
- package/dist/agent-src/rules/token-budget-discipline.md +6 -3
- package/dist/agent-src/rules/ui-audit-gate.md +3 -0
- package/dist/agent-src/rules/user-interaction.md +3 -2
- package/dist/agent-src/skills/recursive-verification/SKILL.md +13 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli-delegate/cmd_route_audit.js +4 -1
- package/dist/cli-delegate/cmd_route_explain.js +4 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +94 -23
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +11 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +9 -6
- package/dist/hooks/dispatch.js +355 -63
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/router.json +1 -1
- package/dist/server/nicknameResolver.js +116 -0
- package/dist/server/nicknameResolver.js.map +1 -0
- package/dist/server/routes/ping.js +29 -11
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/shared/interactiveContext.js +73 -0
- package/dist/shared/interactiveContext.js.map +1 -0
- package/dist/shared/nicknamePrefill.js +59 -0
- package/dist/shared/nicknamePrefill.js.map +1 -0
- package/dist/shared/settingsAsks.js +128 -0
- package/dist/shared/settingsAsks.js.map +1 -0
- package/dist/shared/settingsConsent.js +93 -0
- package/dist/shared/settingsConsent.js.map +1 -0
- package/package.json +1 -1
- package/src/config/agents-paths.yml +15 -0
- package/src/config/gate-coverage.yml +29 -1
- package/src/config/gate-violation-baselines.json +13 -7
- package/src/scripts/_cli/cmd_route_audit.ts +4 -1
- package/src/scripts/_cli/cmd_route_explain.ts +9 -1
- package/src/scripts/ai-video/stitch.sh +27 -9
- package/src/scripts/before_complete_hook.ts +23 -4
- package/src/scripts/bench_ab_v2_run.ts +272 -16
- package/src/scripts/bench_ab_v2_stats.ts +156 -3
- package/src/scripts/check_completion_review.ts +80 -3
- package/src/scripts/check_corpus_staleness.ts +692 -0
- package/src/scripts/check_gate_coverage.ts +67 -0
- package/src/scripts/check_hook_bundle_freshness.ts +183 -0
- package/src/scripts/conformance_scan.ts +47 -17
- package/src/scripts/dispatch_r2_reviewer.ts +31 -2
- package/src/scripts/git_authorization_hook.ts +75 -10
- package/src/scripts/hook_manifest.yaml +19 -0
- package/src/scripts/hooks/block_no_verify.ts +3 -1
- package/src/scripts/hooks/block_unauthorized_git.ts +133 -16
- package/src/scripts/hooks/design_slop_hook.ts +13 -1
- package/src/scripts/hooks/dispatch_hook.ts +97 -2
- package/src/scripts/hooks/evidence_independence.ts +40 -6
- package/src/scripts/language_mirror_hook.ts +200 -11
- package/src/scripts/lint_abstraction_thresholds.ts +41 -8
- package/src/scripts/lint_agents_layout.ts +2 -0
- package/src/scripts/lint_hook_manifest.ts +29 -0
- package/src/scripts/memory_learn_hook.ts +109 -6
- package/src/scripts/pr_url_reminder_hook.ts +17 -2
- package/src/scripts/release.ts +38 -1
- package/src/scripts/schemas/review-findings.schema.json +99 -0
- package/src/shared/interactiveContext.ts +98 -0
- package/src/shared/nicknamePrefill.ts +96 -0
- package/src/shared/settingsAsks.ts +176 -0
- package/src/shared/settingsConsent.ts +136 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2a"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
description: "Asking the user about a setting — one question per command execution, a fixed four-slot shape, and the key's class decides where the answer goes"
|
|
6
|
+
triggers:
|
|
7
|
+
- keyword: "settings:set"
|
|
8
|
+
- keyword: "canary_name"
|
|
9
|
+
- keyword: "rich_skills"
|
|
10
|
+
- keyword: "budget_routing"
|
|
11
|
+
- keyword: "adversarial_council"
|
|
12
|
+
- keyword: "learn_on_session_end"
|
|
13
|
+
- keyword: "open_edited_files"
|
|
14
|
+
- phrase: "ask about a setting"
|
|
15
|
+
- phrase: "settings question"
|
|
16
|
+
- phrase: "should I enable"
|
|
17
|
+
- phrase: "nickname"
|
|
18
|
+
- path_prefix: "docs/contracts/settings-classes.md"
|
|
19
|
+
self_contained: true
|
|
20
|
+
workspaces: [agent-config-maintainer, engineering]
|
|
21
|
+
packs: [meta]
|
|
22
|
+
routes_to:
|
|
23
|
+
- "contract:settings-classes"
|
|
24
|
+
enforced_by:
|
|
25
|
+
- "none"
|
|
26
|
+
collision_ok:
|
|
27
|
+
"canary_name": "the nickname ask is this protocol's canonical B-class instance — session-canary owns what the NAME then does and which layers already supply it, this rule owns how it is asked for and where the answer goes"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# Settings-Ask Protocol
|
|
31
|
+
|
|
32
|
+
A settings question is the one ask where the agent poses the question *and* owns
|
|
33
|
+
where the answer goes. Nine keys can produce one, in two mechanisms that look
|
|
34
|
+
identical from outside and differ completely underneath.
|
|
35
|
+
|
|
36
|
+
## The Iron Law
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
AT MOST ONE SETTINGS QUESTION PER COMMAND EXECUTION. NEVER TWO.
|
|
40
|
+
THE KEY'S CLASS DECIDES WHERE THE ANSWER GOES — NEVER THE CONVENIENCE OF THE MOMENT.
|
|
41
|
+
CLASS B → PERSIST VIA `settings:set --source jit-answer`. ASKED ONCE, EVER.
|
|
42
|
+
CLASS C SET TO `ask` → THIS RUN ONLY. THE AGENT NEVER PERSISTS IT.
|
|
43
|
+
FURTHER UNDECIDED KEYS TAKE THE CONSERVATIVE DEFAULT SILENTLY AND ARE NAMED
|
|
44
|
+
IN THE END-SUMMARY WITH THE COMMAND THAT CHANGES THEM.
|
|
45
|
+
A SILENT PERMISSIVE DEFAULT IS A DECISION TAKEN IN THE USER'S NAME. NEVER TAKE ONE.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## The four slots
|
|
49
|
+
|
|
50
|
+
1. **What is needed** — the key in plain words, not the dotted path alone.
|
|
51
|
+
2. **Why now** — the concrete thing in *this* run that cannot proceed without it.
|
|
52
|
+
3. **Options, default marked** — the conservative option is always present and
|
|
53
|
+
always marked as what happens if the user says nothing.
|
|
54
|
+
4. **Where the answer is stored** — one line, and it is not optional: it is the
|
|
55
|
+
only way to tell a one-run answer from a standing consent.
|
|
56
|
+
|
|
57
|
+
Slot 4 is read from the class, never from taste:
|
|
58
|
+
|
|
59
|
+
| Class | Slot 4 reads | Writer |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| **B** (3 keys) | "persisted to your global settings — you will not be asked again" | `agent-config settings:set <key> <value> --source jit-answer` |
|
|
62
|
+
| **C** set to `ask` | "not saved; making it permanent is a human edit or the GUI" | none — the agent writes nothing |
|
|
63
|
+
|
|
64
|
+
**"Not saved" is about persistence, not about how long the answer is honoured.**
|
|
65
|
+
How long it stays cached in working state is the key's own business, and several
|
|
66
|
+
keys state their own scope. Reading the C path as "re-ask every execution" would
|
|
67
|
+
turn a fence against illegal writes into a source of extra questions.
|
|
68
|
+
|
|
69
|
+
## The nine keys
|
|
70
|
+
|
|
71
|
+
**Class B — persist once**: `personal.canary_name` ·
|
|
72
|
+
`personal.open_edited_files` · `memory.learn_on_session_end`. Each ships a
|
|
73
|
+
conservative default (`""`, `false`, `false`), so absent is indistinguishable
|
|
74
|
+
from *no* and never from *yes*.
|
|
75
|
+
|
|
76
|
+
**Class C carrying an `ask` value in its own enum** — a runtime question whose
|
|
77
|
+
answer dies with the run: `subagents.budget_routing` and `worktrees.mode` (both
|
|
78
|
+
**ship** as `ask`), plus `tokens.rich_skills`, `subagents.auto`,
|
|
79
|
+
`subagents.adversarial_council`, `decision_engine.on_block` (which can be set to
|
|
80
|
+
`ask` by a human but do not ship that way).
|
|
81
|
+
|
|
82
|
+
## The budget
|
|
83
|
+
|
|
84
|
+
The first key that genuinely blocks the run gets the question. Every other
|
|
85
|
+
undecided key resolves to its conservative default **without a question** and
|
|
86
|
+
appears in the end-summary as one line: key, value taken, command that changes it.
|
|
87
|
+
|
|
88
|
+
**The split is computed, not chosen.** `planSettingsAsks` in
|
|
89
|
+
`src/shared/settingsAsks.ts` returns the single key asked, the keys taking their
|
|
90
|
+
default silently, and the keys skipped with a reason; `silentDefaultsSummary`
|
|
91
|
+
renders lines that ride **inside** the one end-summary
|
|
92
|
+
([`direct-answers`](direct-answers.md) Iron Law 3).
|
|
93
|
+
|
|
94
|
+
Two questions in one execution is the violation this rule prevents.
|
|
95
|
+
Batching them into a single numbered-options block is the same violation wearing
|
|
96
|
+
a different shape: one *block* is one question only when a single number answers
|
|
97
|
+
it ([`user-interaction`](user-interaction.md) § question pacing).
|
|
98
|
+
|
|
99
|
+
## Non-interactive executions ask nothing, ever
|
|
100
|
+
|
|
101
|
+
CI, a pipe, a hook, MCP serving, `AGENT_CONFIG_NO_UI`, a headless display: the
|
|
102
|
+
budget is **zero**, not one. `nonInteractiveReason` in
|
|
103
|
+
`src/shared/interactiveContext.ts` is the predicate; `interactive: false` makes
|
|
104
|
+
`planSettingsAsks` carry no ask by construction. Defaults taken are still named —
|
|
105
|
+
silent is not invisible. A question nobody can answer is not a question; it is a
|
|
106
|
+
hang, or a default taken in the user's name wearing a prompt's clothes.
|
|
107
|
+
|
|
108
|
+
## Who picks the moment — the half no gate can check
|
|
109
|
+
|
|
110
|
+
The class contract's B invariant has two halves. Half one (a conservative
|
|
111
|
+
default) is linted. Half two binds here: the trigger must be the **user's own
|
|
112
|
+
request arriving at a point where the setting is genuinely required**. A
|
|
113
|
+
threshold the agent watched, a moment it judged favourable, or a convenient lull
|
|
114
|
+
are not triggers. If the run would complete without the setting, there is no
|
|
115
|
+
question.
|
|
116
|
+
|
|
117
|
+
## Worked example — the nickname, the canonical B ask
|
|
118
|
+
|
|
119
|
+
`personal.canary_name` is un-inferrable and arms the session-degradation canary,
|
|
120
|
+
so it is the one settings question a fresh session legitimately asks. Prefill so
|
|
121
|
+
accepting costs one keypress:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
git config user.name # first choice — the name they already chose here
|
|
125
|
+
# then: $USER, then $USERNAME (Windows). Never $USER alone.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
On an answer: `agent-config settings:set personal.canary_name "<name>" --source jit-answer`.
|
|
129
|
+
|
|
130
|
+
**Do not ask an already-armed user.** The browser wizard writes `identity.name`
|
|
131
|
+
into `settings/.agent-user.yml`, the canary's third resolution layer, so a wizard
|
|
132
|
+
user is already covered ([`session-canary`](session-canary.md) resolves all
|
|
133
|
+
three). Check before asking.
|
|
134
|
+
|
|
135
|
+
## Before a consent-gated action — verify the record, not the value
|
|
136
|
+
|
|
137
|
+
`true` a human chose and `true` the machine inferred are the same byte and not
|
|
138
|
+
the same permission. `consentVerdict` in `src/shared/settingsConsent.ts` grants on
|
|
139
|
+
`jit-answer` / `gui` / `manual` and on a hand-edited file (which the class
|
|
140
|
+
contract guarantees carries no stamp); it withholds on the conservative default,
|
|
141
|
+
on a permissive value nothing records, and on `auto-detected` — an agent that may
|
|
142
|
+
write its own provenance must not reach its own permission by observing the
|
|
143
|
+
world. This is also the reader the provenance sidecar was missing: it was written
|
|
144
|
+
by `settings:set` and only *displayed* by the GUI.
|
|
145
|
+
|
|
146
|
+
## When NOT to fire
|
|
147
|
+
|
|
148
|
+
- Class A — resolves to its default, never asked.
|
|
149
|
+
- Class C **not** set to `ask` — no question; a change is a human edit.
|
|
150
|
+
- Already decided on any resolution layer, or the run completes without it.
|
|
151
|
+
- **The `ask` routes to a permission gate.** `worktrees.mode: ask` means
|
|
152
|
+
`scope-control`'s per-creation gate applies — a permission ask about an
|
|
153
|
+
*action*, which that rule owns; a storage line there would store nothing.
|
|
154
|
+
- **The `ask` is code, not agent-carried.** `decision_engine.on_block: ask` is a
|
|
155
|
+
TTY prompt in `work_engine/hooks/builtin/decision_gate.ts`.
|
|
156
|
+
|
|
157
|
+
## Honest enforcement — `enforced_by: none`
|
|
158
|
+
|
|
159
|
+
No gate counts the questions in a chat turn, and no B key currently gates an
|
|
160
|
+
action through a guard: the two that gate behaviour
|
|
161
|
+
(`personal.open_edited_files`, `memory.learn_on_session_end`) are read as values,
|
|
162
|
+
and the action they govern is prose. So the budget, the four slots, the
|
|
163
|
+
who-picks-the-moment half, and the obligation to consult `consentVerdict` are all
|
|
164
|
+
model-carried. On a prose-only host ask-once can degrade to ask-never. The
|
|
165
|
+
deterministic fences sit one layer down and guard a different thing:
|
|
166
|
+
`settings:set` and the GUI write route both refuse every C key and fail closed on
|
|
167
|
+
an unreadable contract, so a protocol violation cannot become an illegal *write* —
|
|
168
|
+
only a badly-shaped *ask*.
|
|
169
|
+
|
|
170
|
+
## See also
|
|
171
|
+
|
|
172
|
+
- [`docs/contracts/settings-classes.md`](../docs/contracts/settings-classes.md) — the A/B/C source of truth; slot 4 is read from it.
|
|
173
|
+
- [`ask-when-uncertain`](ask-when-uncertain.md) — one question per turn; this narrows it to one *settings* question per execution.
|
|
174
|
+
- [`no-cheap-questions`](no-cheap-questions.md) — the floor a settings question clears before it is asked at all.
|
|
175
|
+
- [`user-interaction`](user-interaction.md) — the numbered-options shape slot 3 uses.
|
|
176
|
+
- [`session-canary`](session-canary.md) — what the nickname answer activates, and the layers to check first.
|
|
@@ -31,9 +31,12 @@ TO THE FULL FRUGALITY CANON (telegraph-speak, thin-projector).
|
|
|
31
31
|
| `rich` | Must be declared + justified | **Exempt** | **Never trimmed** | 2000–3500 tokens |
|
|
32
32
|
|
|
33
33
|
Read `tokens.rich_skills` from `.agent-settings.yml` (default `on`) to determine
|
|
34
|
-
whether rich skills may load in full. If `off`, treat them as
|
|
35
|
-
`
|
|
36
|
-
|
|
34
|
+
whether rich skills may load in full. If `off`, treat them as `standard`. If
|
|
35
|
+
`ask`, the question's shape is
|
|
36
|
+
[`settings-ask-protocol`](settings-ask-protocol.md)'s, not this rule's; what only
|
|
37
|
+
this rule knows is the number to put in it — the estimated token delta, ≈ skill
|
|
38
|
+
file size in chars / 4. The answer is cached for the session and never persisted
|
|
39
|
+
(`tokens.rich_skills` is class C).
|
|
37
40
|
|
|
38
41
|
## Requirements for `token_budget_class: rich`
|
|
39
42
|
|
|
@@ -16,6 +16,9 @@ workspaces: [agent-config-maintainer, engineering]
|
|
|
16
16
|
packs: [frontend-design]
|
|
17
17
|
collision_ok:
|
|
18
18
|
"component": "no new component without audit findings — its core subject"
|
|
19
|
+
"design token": "same surface, opposite side: this inventories tokens before the write, design-review-after-ui-write reviews what the write emitted"
|
|
20
|
+
"resources/views/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
21
|
+
"resources/js/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
|
|
19
22
|
---
|
|
20
23
|
|
|
21
24
|
# UI Audit Gate
|
|
@@ -70,8 +70,9 @@ escapes the format. Three further caught shapes: a contentless filler option; an
|
|
|
70
70
|
inline `(Empfohlen)` tag **beside** the recommendation line (the dual source
|
|
71
71
|
Iron Law 1 forbids); an option set answerable only as `1,3,4`.
|
|
72
72
|
|
|
73
|
-
**No gate ships for this
|
|
74
|
-
|
|
73
|
+
**No gate ships for this.** `check_reply_consistency` can read a draft on stdin,
|
|
74
|
+
but it inspects *numbered-option blocks* — and every measured failure had no
|
|
75
|
+
block by construction, so it scans exactly the surface that did not fail. `conformance:behavior` deliberately does not score ask-shape,
|
|
75
76
|
so an unmoved rate is a finding rather than a silence.
|
|
76
77
|
|
|
77
78
|
## Mechanics — rationale, failure modes, format details, examples
|
|
@@ -48,6 +48,19 @@ until a benchmark gate authorises it per host.
|
|
|
48
48
|
> major unless external evidence appears first. This skill is NOT sold as a
|
|
49
49
|
> quality-lift mechanism.
|
|
50
50
|
|
|
51
|
+
> **Scope of that null — what it does NOT close.** It measured a loop that ADDS
|
|
52
|
+
> a critic to judge whether an attempt was good enough (deterministic
|
|
53
|
+
> scorer-as-critic, `max_depth=1`, weak host, `capH-debug`). It is not evidence
|
|
54
|
+
> about retrying on a check that has **already returned red**: there the verdict
|
|
55
|
+
> is deterministic and in hand, and no critic is introduced, so there is nothing
|
|
56
|
+
> for the null to be null about. The measurement's own decisive finding inverts
|
|
57
|
+
> in that case — recursion was redundant because the first attempt already
|
|
58
|
+
> passed the critic 72% of the time, so cost scaled with every task while benefit
|
|
59
|
+
> sat in the ~28% tail; a red-triggered retry costs nothing on the passing
|
|
60
|
+
> majority and fires only on the tail. What the null DOES bind, for any such
|
|
61
|
+
> loop, is the falsification shape: pre-register the reduction it must deliver,
|
|
62
|
+
> and revert rather than narrate if it does not.
|
|
63
|
+
|
|
51
64
|
## The Iron Law
|
|
52
65
|
|
|
53
66
|
```
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "9.
|
|
42
|
+
agent_config_version: "9.26.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -3,6 +3,9 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
|
|
|
3
3
|
import {
|
|
4
4
|
match_prompt
|
|
5
5
|
} from "./chunk-LF2KKJ4Q.js";
|
|
6
|
+
import {
|
|
7
|
+
resolvePackageRoot
|
|
8
|
+
} from "./chunk-MCJYCQPF.js";
|
|
6
9
|
import {
|
|
7
10
|
read_entries
|
|
8
11
|
} from "./chunk-AIIUU73N.js";
|
|
@@ -19,7 +22,7 @@ import * as crypto from "node:crypto";
|
|
|
19
22
|
import * as fs from "node:fs";
|
|
20
23
|
import * as path from "node:path";
|
|
21
24
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
22
|
-
var REPO_ROOT =
|
|
25
|
+
var REPO_ROOT = resolvePackageRoot(import.meta.url);
|
|
23
26
|
var ROUTER_JSON = path.join(REPO_ROOT, "dist", "router.json");
|
|
24
27
|
var RECORDER_REL = "agents/runtime/state/routing-telemetry.jsonl";
|
|
25
28
|
var RULE_TRIPS_REL = "agents/runtime/state/rule-trips.json";
|
|
@@ -4,6 +4,9 @@ import {
|
|
|
4
4
|
_asRuleList,
|
|
5
5
|
match_prompt
|
|
6
6
|
} from "./chunk-LF2KKJ4Q.js";
|
|
7
|
+
import {
|
|
8
|
+
resolvePackageRoot
|
|
9
|
+
} from "./chunk-MCJYCQPF.js";
|
|
7
10
|
import {
|
|
8
11
|
load_agent_settings
|
|
9
12
|
} from "./chunk-HJ6DAJHR.js";
|
|
@@ -92,7 +95,7 @@ function method_note() {
|
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
// src/scripts/_cli/cmd_route_explain.ts
|
|
95
|
-
var REPO_ROOT =
|
|
98
|
+
var REPO_ROOT = resolvePackageRoot(import.meta.url);
|
|
96
99
|
var ROUTER_JSON = path.join(REPO_ROOT, "dist", "router.json");
|
|
97
100
|
var RULES_DIST_DIR = path.join(REPO_ROOT, "dist", "agent-src", "rules");
|
|
98
101
|
var MEASUREMENT_HEADER = "Measurement level: trigger matching only \u2014 what the host actually invokes is NOT measured here (ADR-126).";
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
},
|
|
321
321
|
{
|
|
322
322
|
"category": "command",
|
|
323
|
-
"checksum": "sha256:
|
|
323
|
+
"checksum": "sha256:512282d4441268dbeedde66a668b250e3e0ad844d7237f39bf223862ddd6377b",
|
|
324
324
|
"install": {
|
|
325
325
|
"default": true,
|
|
326
326
|
"removable": false
|
|
@@ -1575,7 +1575,7 @@
|
|
|
1575
1575
|
},
|
|
1576
1576
|
{
|
|
1577
1577
|
"category": "command",
|
|
1578
|
-
"checksum": "sha256:
|
|
1578
|
+
"checksum": "sha256:0d8eb89dbbebfadf40be04b2e5cff6dcc06432ed75155dfcc4210c50a000afb4",
|
|
1579
1579
|
"install": {
|
|
1580
1580
|
"default": true,
|
|
1581
1581
|
"removable": false
|
|
@@ -4985,12 +4985,12 @@
|
|
|
4985
4985
|
},
|
|
4986
4986
|
{
|
|
4987
4987
|
"category": "command",
|
|
4988
|
-
"checksum": "sha256:
|
|
4988
|
+
"checksum": "sha256:95494d82bc1f1d6627424e40695e3b3e9ea37aceb5c263141112f6209d7d3f13",
|
|
4989
4989
|
"install": {
|
|
4990
4990
|
"default": true,
|
|
4991
4991
|
"removable": false
|
|
4992
4992
|
},
|
|
4993
|
-
"intent": "Roadmap dispatcher — create, process-step, process-phase, process-full, ai-council",
|
|
4993
|
+
"intent": "Roadmap dispatcher — create, process-step, process-phase, process-full, next, ai-council",
|
|
4994
4994
|
"lifecycle": "active",
|
|
4995
4995
|
"name": "roadmap",
|
|
4996
4996
|
"pack": "product-basic",
|
|
@@ -5005,7 +5005,8 @@
|
|
|
5005
5005
|
"roadmap-materialize",
|
|
5006
5006
|
"roadmap-process-step",
|
|
5007
5007
|
"roadmap-process-phase",
|
|
5008
|
-
"roadmap-process-full"
|
|
5008
|
+
"roadmap-process-full",
|
|
5009
|
+
"roadmap-next"
|
|
5009
5010
|
],
|
|
5010
5011
|
"slug": "roadmap",
|
|
5011
5012
|
"tier": 1,
|
|
@@ -5071,6 +5072,32 @@
|
|
|
5071
5072
|
"agent-config-maintainer"
|
|
5072
5073
|
]
|
|
5073
5074
|
},
|
|
5075
|
+
{
|
|
5076
|
+
"category": "command",
|
|
5077
|
+
"checksum": "sha256:d8e1d3afa9a5d852dfe1dbf0f0ba5b5773d5bf1e4204fbdcc5585b466c8229c3",
|
|
5078
|
+
"install": {
|
|
5079
|
+
"default": true,
|
|
5080
|
+
"removable": false
|
|
5081
|
+
},
|
|
5082
|
+
"lifecycle": "active",
|
|
5083
|
+
"name": "roadmap-next",
|
|
5084
|
+
"pack": "product-basic",
|
|
5085
|
+
"packs": [
|
|
5086
|
+
"meta"
|
|
5087
|
+
],
|
|
5088
|
+
"path": "src/domains/product-basic/roadmap/next/command.md",
|
|
5089
|
+
"slug": "roadmap-next",
|
|
5090
|
+
"tier": 2,
|
|
5091
|
+
"trust": {
|
|
5092
|
+
"confidence": "high",
|
|
5093
|
+
"human_review_required": false,
|
|
5094
|
+
"level": "core"
|
|
5095
|
+
},
|
|
5096
|
+
"visibility": "internal",
|
|
5097
|
+
"workspaces": [
|
|
5098
|
+
"agent-config-maintainer"
|
|
5099
|
+
]
|
|
5100
|
+
},
|
|
5074
5101
|
{
|
|
5075
5102
|
"category": "command",
|
|
5076
5103
|
"checksum": "sha256:184b370f44f34d1ee654975707086d9cdccd93a146293b7bd9bbb82bca817de1",
|
|
@@ -5935,7 +5962,7 @@
|
|
|
5935
5962
|
},
|
|
5936
5963
|
{
|
|
5937
5964
|
"category": "rule",
|
|
5938
|
-
"checksum": "sha256:
|
|
5965
|
+
"checksum": "sha256:8978c1c4028b24e96779dbf9d14da661277eb21b2af67e846c7e5d96369cccfb",
|
|
5939
5966
|
"install": {
|
|
5940
5967
|
"default": true,
|
|
5941
5968
|
"removable": false
|
|
@@ -5956,7 +5983,7 @@
|
|
|
5956
5983
|
},
|
|
5957
5984
|
{
|
|
5958
5985
|
"category": "rule",
|
|
5959
|
-
"checksum": "sha256:
|
|
5986
|
+
"checksum": "sha256:71a60121703706afdb1449384c1c90c6925cdcadd3f81ff6bb207fd28bb00699",
|
|
5960
5987
|
"install": {
|
|
5961
5988
|
"default": true,
|
|
5962
5989
|
"removable": false
|
|
@@ -5976,6 +6003,28 @@
|
|
|
5976
6003
|
"engineering"
|
|
5977
6004
|
]
|
|
5978
6005
|
},
|
|
6006
|
+
{
|
|
6007
|
+
"category": "rule",
|
|
6008
|
+
"checksum": "sha256:ed5b1a2d5a901bf48c3e02e2ae92f968af353729f38a6e1ca0d01ad486e9506d",
|
|
6009
|
+
"install": {
|
|
6010
|
+
"default": true,
|
|
6011
|
+
"removable": false
|
|
6012
|
+
},
|
|
6013
|
+
"lifecycle": "active",
|
|
6014
|
+
"packs": [
|
|
6015
|
+
"frontend-design"
|
|
6016
|
+
],
|
|
6017
|
+
"path": "src/rules/design-review-after-ui-write.md",
|
|
6018
|
+
"trust": {
|
|
6019
|
+
"confidence": "high",
|
|
6020
|
+
"human_review_required": false,
|
|
6021
|
+
"level": "core"
|
|
6022
|
+
},
|
|
6023
|
+
"workspaces": [
|
|
6024
|
+
"agent-config-maintainer",
|
|
6025
|
+
"engineering"
|
|
6026
|
+
]
|
|
6027
|
+
},
|
|
5979
6028
|
{
|
|
5980
6029
|
"category": "rule",
|
|
5981
6030
|
"checksum": "sha256:a6fa0eb512e3f630b01c74299702606419965a9322142efb21d95f6649b76d54",
|
|
@@ -6234,7 +6283,7 @@
|
|
|
6234
6283
|
},
|
|
6235
6284
|
{
|
|
6236
6285
|
"category": "rule",
|
|
6237
|
-
"checksum": "sha256:
|
|
6286
|
+
"checksum": "sha256:6aa8e7f0075fd41c21b5fdb59d08a92a0d454cf2d2efe228fbdd8d2647ae5c73",
|
|
6238
6287
|
"install": {
|
|
6239
6288
|
"default": true,
|
|
6240
6289
|
"removable": false
|
|
@@ -7442,7 +7491,7 @@
|
|
|
7442
7491
|
},
|
|
7443
7492
|
{
|
|
7444
7493
|
"category": "rule",
|
|
7445
|
-
"checksum": "sha256:
|
|
7494
|
+
"checksum": "sha256:b83bbe89d6562af515a07e9f65ef544b76b5ec2c310239a0a654b1b08a209909",
|
|
7446
7495
|
"install": {
|
|
7447
7496
|
"default": true,
|
|
7448
7497
|
"removable": false
|
|
@@ -7470,6 +7519,28 @@
|
|
|
7470
7519
|
"small-business"
|
|
7471
7520
|
]
|
|
7472
7521
|
},
|
|
7522
|
+
{
|
|
7523
|
+
"category": "rule",
|
|
7524
|
+
"checksum": "sha256:1f58cc02011901ca7ade15eabcd94d94e4c8d7b65fc25ba0c7520dd3180ebc45",
|
|
7525
|
+
"install": {
|
|
7526
|
+
"default": true,
|
|
7527
|
+
"removable": false
|
|
7528
|
+
},
|
|
7529
|
+
"lifecycle": "active",
|
|
7530
|
+
"packs": [
|
|
7531
|
+
"meta"
|
|
7532
|
+
],
|
|
7533
|
+
"path": "src/rules/settings-ask-protocol.md",
|
|
7534
|
+
"trust": {
|
|
7535
|
+
"confidence": "high",
|
|
7536
|
+
"human_review_required": false,
|
|
7537
|
+
"level": "core"
|
|
7538
|
+
},
|
|
7539
|
+
"workspaces": [
|
|
7540
|
+
"agent-config-maintainer",
|
|
7541
|
+
"engineering"
|
|
7542
|
+
]
|
|
7543
|
+
},
|
|
7473
7544
|
{
|
|
7474
7545
|
"category": "rule",
|
|
7475
7546
|
"checksum": "sha256:8057bd77e321bb85dc204f948f5507757ff752bd00341e3bb8b7a982aad80c47",
|
|
@@ -7734,7 +7805,7 @@
|
|
|
7734
7805
|
},
|
|
7735
7806
|
{
|
|
7736
7807
|
"category": "rule",
|
|
7737
|
-
"checksum": "sha256:
|
|
7808
|
+
"checksum": "sha256:d545ed4b12f6892fa91cabb42d328ddb2af8658d830e1b8834392abd4d458af3",
|
|
7738
7809
|
"install": {
|
|
7739
7810
|
"default": true,
|
|
7740
7811
|
"removable": false
|
|
@@ -7893,7 +7964,7 @@
|
|
|
7893
7964
|
},
|
|
7894
7965
|
{
|
|
7895
7966
|
"category": "rule",
|
|
7896
|
-
"checksum": "sha256:
|
|
7967
|
+
"checksum": "sha256:acbd566ffbeea421d43f861e0cc71e70bfbd2dd95caccab08d743bcf07a6ec0d",
|
|
7897
7968
|
"install": {
|
|
7898
7969
|
"default": true,
|
|
7899
7970
|
"removable": false
|
|
@@ -12754,7 +12825,7 @@
|
|
|
12754
12825
|
},
|
|
12755
12826
|
{
|
|
12756
12827
|
"category": "skill",
|
|
12757
|
-
"checksum": "sha256:
|
|
12828
|
+
"checksum": "sha256:0ba410661ff03e59633e2e95a017ff3b4bd49e497bb7becd0b721ddd44807379",
|
|
12758
12829
|
"install": {
|
|
12759
12830
|
"default": true,
|
|
12760
12831
|
"removable": false
|
|
@@ -14333,7 +14404,7 @@
|
|
|
14333
14404
|
"workspaces": []
|
|
14334
14405
|
}
|
|
14335
14406
|
],
|
|
14336
|
-
"checksum": "sha256:
|
|
14407
|
+
"checksum": "sha256:4de021fdc5de91edf3d58b90be778038dde171e7732d3479a636836fb1537579",
|
|
14337
14408
|
"deprecations": [
|
|
14338
14409
|
{
|
|
14339
14410
|
"key": "tier",
|
|
@@ -14476,7 +14547,7 @@
|
|
|
14476
14547
|
"reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
|
|
14477
14548
|
}
|
|
14478
14549
|
],
|
|
14479
|
-
"generated_at": "2026-08-
|
|
14550
|
+
"generated_at": "2026-08-07T03:13:27Z",
|
|
14480
14551
|
"packs": [
|
|
14481
14552
|
{
|
|
14482
14553
|
"artefact_count": 118,
|
|
@@ -14753,7 +14824,7 @@
|
|
|
14753
14824
|
]
|
|
14754
14825
|
},
|
|
14755
14826
|
{
|
|
14756
|
-
"artefact_count":
|
|
14827
|
+
"artefact_count": 12,
|
|
14757
14828
|
"description": "Grounded design intelligence — design-knowledge corpus + BM25 grounding engine, design tokens, stack best-practice and chart/typography knowledge.",
|
|
14758
14829
|
"domain": "engineering",
|
|
14759
14830
|
"human_review_required": 0,
|
|
@@ -14773,7 +14844,7 @@
|
|
|
14773
14844
|
"trust_level_default": "professional",
|
|
14774
14845
|
"trust_summary": {
|
|
14775
14846
|
"advisory": 0,
|
|
14776
|
-
"core":
|
|
14847
|
+
"core": 5,
|
|
14777
14848
|
"experimental": 0,
|
|
14778
14849
|
"professional": 7,
|
|
14779
14850
|
"restricted": 0
|
|
@@ -15199,7 +15270,7 @@
|
|
|
15199
15270
|
},
|
|
15200
15271
|
{
|
|
15201
15272
|
"always_on": true,
|
|
15202
|
-
"artefact_count":
|
|
15273
|
+
"artefact_count": 293,
|
|
15203
15274
|
"description": "Artefacts that maintain this package (agent-config itself).",
|
|
15204
15275
|
"domain": "meta",
|
|
15205
15276
|
"human_review_required": 0,
|
|
@@ -15215,7 +15286,7 @@
|
|
|
15215
15286
|
"trust_level_default": "core",
|
|
15216
15287
|
"trust_summary": {
|
|
15217
15288
|
"advisory": 0,
|
|
15218
|
-
"core":
|
|
15289
|
+
"core": 291,
|
|
15219
15290
|
"experimental": 2,
|
|
15220
15291
|
"professional": 0,
|
|
15221
15292
|
"restricted": 0
|
|
@@ -15306,27 +15377,27 @@
|
|
|
15306
15377
|
"scanner_version": "c24312e116f8",
|
|
15307
15378
|
"stats": {
|
|
15308
15379
|
"by_category": {
|
|
15309
|
-
"command":
|
|
15310
|
-
"rule":
|
|
15380
|
+
"command": 196,
|
|
15381
|
+
"rule": 114,
|
|
15311
15382
|
"skill": 288,
|
|
15312
15383
|
"subagent": 1,
|
|
15313
15384
|
"template": 1
|
|
15314
15385
|
},
|
|
15315
15386
|
"by_lifecycle": {
|
|
15316
|
-
"active":
|
|
15387
|
+
"active": 583,
|
|
15317
15388
|
"archived": 0,
|
|
15318
15389
|
"deprecated": 0,
|
|
15319
15390
|
"experimental": 17
|
|
15320
15391
|
},
|
|
15321
15392
|
"by_trust_level": {
|
|
15322
15393
|
"advisory": 8,
|
|
15323
|
-
"core":
|
|
15394
|
+
"core": 468,
|
|
15324
15395
|
"experimental": 22,
|
|
15325
15396
|
"professional": 102,
|
|
15326
15397
|
"restricted": 0
|
|
15327
15398
|
},
|
|
15328
15399
|
"documented_unassigned_count": 26,
|
|
15329
|
-
"total_artefacts":
|
|
15400
|
+
"total_artefacts": 600,
|
|
15330
15401
|
"unassigned_count": 0
|
|
15331
15402
|
},
|
|
15332
15403
|
"unassigned": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
183283ccb7a5723bd451373c05c3026bb1e9d8c37fbaf96b691ffcdf240f267b discovery-manifest.json
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Discovery Manifest — Summary
|
|
2
2
|
|
|
3
|
-
- Generated: `2026-08-
|
|
3
|
+
- Generated: `2026-08-07T03:13:27Z`
|
|
4
4
|
- Scanner: `c24312e116f8`
|
|
5
|
-
- Artefacts: **
|
|
5
|
+
- Artefacts: **600**
|
|
6
6
|
- Unassigned: **0**
|
|
7
7
|
|
|
8
8
|
## `engineering` — Engineering
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
| `react` — React | 3 |
|
|
22
22
|
| `nextjs` — Next.js | 2 |
|
|
23
23
|
| `python` — Python | 1 |
|
|
24
|
-
| `frontend-design` — Frontend Design |
|
|
24
|
+
| `frontend-design` — Frontend Design | 12 |
|
|
25
25
|
| `brand` — Brand | 13 |
|
|
26
26
|
| `analysis-workbench` — Analysis Workbench | 10 |
|
|
27
27
|
| `scale-discipline` — Scale Discipline | 2 |
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
|
|
106
106
|
| Pack | Artefacts |
|
|
107
107
|
|---|---|
|
|
108
|
-
| `meta` — Meta |
|
|
108
|
+
| `meta` — Meta | 293 |
|
|
109
109
|
| `memory` — Memory | 9 |
|
|
110
110
|
| `analytics` — Analytics | 4 |
|
|
111
111
|
| `product-reasoning` — Product Reasoning | 11 |
|