@event4u/agent-config 9.1.0 → 9.2.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 +22 -251
- package/README.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +2 -0
- package/dist/agent-src/commands/review/changes.md +22 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +41 -6
- package/dist/agent-src/contexts/execution/verify-budget.md +15 -0
- package/dist/agent-src/rules/cross-source-consistency.md +92 -0
- package/dist/agent-src/rules/delegation-policy.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -0
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/po-discovery/SKILL.md +2 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +7 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +14 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +26 -5
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +18 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +3 -2
- package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +79 -0
- package/dist/agent-src/skills/subagent-orchestration/schemas/adversarial-findings.json +56 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +42 -19
- 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 +10 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +8 -6
- package/dist/install/install.mjs +9 -0
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/router.json +1 -1
- package/dist/server/schemas/settings.js +5 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +8 -1
- package/docs/architecture.md +2 -2
- package/docs/archive/CHANGELOG-pre-9.2.0.md +276 -0
- package/docs/benchmark.md +24 -0
- package/docs/decisions/ADR-122-adversarial-verification-council.md +136 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/design/adversarial-council-eval.md +106 -0
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/docs/proof.md +2 -2
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +42 -0
- package/src/scripts/_lib/adversarial_council_gate.test.ts +112 -0
- package/src/scripts/_lib/adversarial_council_gate.ts +98 -0
- package/src/scripts/_lib/adversarial_reconcile.test.ts +197 -0
- package/src/scripts/_lib/adversarial_reconcile.ts +187 -0
- package/src/scripts/_lib/verify_budget.ts +4 -1
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- package/src/server/schemas/settings.ts +9 -0
|
@@ -138,6 +138,13 @@ Check the loaded ticket for clarity signals before orchestrating:
|
|
|
138
138
|
- Is the scope one feature, or multiple tangled together?
|
|
139
139
|
- Any sentence that references an existing module name, feature flag, or domain concept?
|
|
140
140
|
|
|
141
|
+
**Cross-source discrepancy scan** (per [`cross-source-consistency`](../../rules/cross-source-consistency.md), gated by `consistency.cross_source`): the ticket is rarely a single source. Compare every source against the others and surface any conflict as an *Open question* — never resolve it silently:
|
|
142
|
+
- **text ↔ attachment** — does the ticket text agree with every attached mockup / screenshot / diagram? (Canonical miss: text says "birthdays **today**", the mockup shows a birthday from two days ago.) If an attachment cannot be read, say so — do not assume it agrees.
|
|
143
|
+
- **silent-but-needed** — is the spec silent on a clearly-needed behavior (weekend/holiday shift, empty state, error path, timezone, permissions)? Surface it and ask before it becomes an implementation assumption — an inferred behavior is a scope expansion, not a given.
|
|
144
|
+
- **intra-ticket** — do the AC, description, and comments contradict each other?
|
|
145
|
+
|
|
146
|
+
Fold every discrepancy into the refined output's *Open questions* section (one batched list), never a second prompt. Full taxonomy + scan procedure: [`cross-source-consistency-mechanics`](../../../docs/guidelines/agent-infra/cross-source-consistency-mechanics.md).
|
|
147
|
+
|
|
141
148
|
Then run the deterministic detection helper — do **not** re-derive trigger
|
|
142
149
|
logic in prose:
|
|
143
150
|
|
|
@@ -82,6 +82,20 @@ Vague goals ("improve roadmaps") force every reader to re-derive
|
|
|
82
82
|
intent. If the goal needs three sentences, the roadmap is two
|
|
83
83
|
roadmaps.
|
|
84
84
|
|
|
85
|
+
### 3b. Scan sources for discrepancies before drafting phases
|
|
86
|
+
|
|
87
|
+
When the roadmap originates from a ticket/spec that carries a second
|
|
88
|
+
source — an attached mockup/screenshot, a code reality, or an internal
|
|
89
|
+
contradiction — run the **cross-source discrepancy scan** (per
|
|
90
|
+
[`cross-source-consistency`](../../rules/cross-source-consistency.md),
|
|
91
|
+
gated by `consistency.cross_source`) before writing phases. A phase plan
|
|
92
|
+
built over a text↔image contradiction or a silent-but-needed behavior
|
|
93
|
+
(weekend/holiday shift, empty/error state) bakes the wrong assumption into
|
|
94
|
+
every downstream step. Surface each discrepancy as one batched open
|
|
95
|
+
question first; an inferred behavior is a scope expansion to confirm, not
|
|
96
|
+
to plan silently. Taxonomy + procedure:
|
|
97
|
+
[`cross-source-consistency-mechanics`](../../../docs/guidelines/agent-infra/cross-source-consistency-mechanics.md).
|
|
98
|
+
|
|
85
99
|
### 4. Phase blocks carry checkboxes
|
|
86
100
|
|
|
87
101
|
Every non-intro phase contains at least one `- [ ]`. Decision tables
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: subagent-orchestration
|
|
4
|
-
description: "Use when orchestrating implementer/judge subagents — form gate +
|
|
4
|
+
description: "Use when orchestrating implementer/judge subagents — form gate + nine modes (do-and-judge ±two-stage, steps/parallel/worktrees, competitively, debate, live-app-judge, adversarial-council)."
|
|
5
5
|
domain: process
|
|
6
6
|
workspaces:
|
|
7
7
|
- agent-config-maintainer
|
|
@@ -108,6 +108,7 @@ no learned routing, no self-modifying selector (rejected, stays rejected).
|
|
|
108
108
|
| Multi-step cross-wing chain needing filesystem isolation | worktrees | `do-in-worktrees` |
|
|
109
109
|
| Ordered steps with declared dependencies | steps | `do-in-steps` |
|
|
110
110
|
| Single change with non-trivial risk / contested spec / decision | judge | `do-and-judge`, `do-and-judge-two-stage`, `judge-with-debate`, `do-with-live-app-judge` |
|
|
111
|
+
| High-risk change needing defect-FINDING coverage (opt-in, advisory) | verify-council | `adversarial-verification-council` (default-off; `subagents.adversarial_council`) |
|
|
111
112
|
| Single slice below the delegability floor, unstructured, or frontier-priced | none | no dispatch — run in-session |
|
|
112
113
|
|
|
113
114
|
Rules:
|
|
@@ -121,7 +122,7 @@ Rules:
|
|
|
121
122
|
or `none`) so the gate's value is measurable inside the ADR-117
|
|
122
123
|
prove-or-drop window.
|
|
123
124
|
|
|
124
|
-
## The
|
|
125
|
+
## The nine modes
|
|
125
126
|
|
|
126
127
|
Each mode has a decision row: when to use, when not, and the expected
|
|
127
128
|
model pairing. Defaults come from
|
|
@@ -211,6 +212,9 @@ migration, public API) where a single judge is too easy to fool.
|
|
|
211
212
|
|---|---|---|
|
|
212
213
|
| Security, data integrity, public API change | Routine internal refactor | judges = same tier (2x); meta-judge = one tier up |
|
|
213
214
|
|
|
215
|
+
Mode 6 = **go/no-go** (strict-er verdict wins); for defect-FINDING coverage (the
|
|
216
|
+
*union* of what diverse models catch) use Mode 9.
|
|
217
|
+
|
|
214
218
|
### 7. do-in-worktrees
|
|
215
219
|
|
|
216
220
|
Cross-wing or cross-skill chain executed across isolated git worktrees —
|
|
@@ -231,6 +235,22 @@ Experimental until `verdict_changed_outcome` telemetry proves it. Rubric,
|
|
|
231
235
|
adoption gate, and the async-verifier future candidate →
|
|
232
236
|
[`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 8.
|
|
233
237
|
|
|
238
|
+
### 9. adversarial-verification-council (gated — opt-in, advisory)
|
|
239
|
+
|
|
240
|
+
A panel of N (default 2) **distinct-model** skeptics red-teams a real,
|
|
241
|
+
already-verified change through the `judge-*` lenses — each prompted to *break*
|
|
242
|
+
it. Returns reconcile deterministically
|
|
243
|
+
([`_lib/adversarial_reconcile.ts`](../../scripts/_lib/adversarial_reconcile.ts))
|
|
244
|
+
into one findings-by-severity envelope with provenance + cross-model confidence
|
|
245
|
+
([`schemas/adversarial-findings.json`](schemas/adversarial-findings.json)). Unlike
|
|
246
|
+
Mode 6 it emits a **findings-union**, not a go/no-go verdict. **Advisory only —
|
|
247
|
+
never auto-gates (Hard Floor).** Default-off (`subagents.adversarial_council`);
|
|
248
|
+
opt-in high-risk changes only; registered claim + high-risk tier need
|
|
249
|
+
cross-*vendor* skeptics. Invariants, skeptic prompt, reconciliation, prove-or-drop
|
|
250
|
+
gate → [`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 9
|
|
251
|
+
+ [`prompts/adversarial-verification-council.md`](prompts/adversarial-verification-council.md)
|
|
252
|
+
(ADR-122).
|
|
253
|
+
|
|
234
254
|
## Status taxonomy — every subagent return uses one envelope
|
|
235
255
|
|
|
236
256
|
Every implementer or judge return must conform to
|
|
@@ -265,7 +285,7 @@ Each mode's literal dispatch template lives under
|
|
|
265
285
|
matching prompt at dispatch time and substitutes `{{placeholders}}`.
|
|
266
286
|
Edits to a prompt do not bloat this skill against the 400-line sunset
|
|
267
287
|
trigger; `tests/test_subagent_prompt_loading.py` confirms each of the
|
|
268
|
-
|
|
288
|
+
nine modes resolves to a loadable prompt that cites all four taxonomy
|
|
269
289
|
statuses.
|
|
270
290
|
|
|
271
291
|
## Procedure
|
|
@@ -294,7 +314,7 @@ same context, **stop** and report. Do not improvise.
|
|
|
294
314
|
|
|
295
315
|
### 3. Pick the mode
|
|
296
316
|
|
|
297
|
-
Run the form gate first, then match task shape to one of the
|
|
317
|
+
Run the form gate first, then match task shape to one of the nine modes. When two modes could fit,
|
|
298
318
|
prefer the cheaper one (`do-and-judge` < `do-and-judge-two-stage` <
|
|
299
319
|
`do-in-steps` < `do-in-parallel` < `do-competitively` <
|
|
300
320
|
`judge-with-debate` < `do-in-worktrees`).
|
|
@@ -320,6 +340,7 @@ Describe each dispatch step explicitly in chat so the user can follow it.
|
|
|
320
340
|
* `do-competitively` → [`prompts/do-competitively.md`](prompts/do-competitively.md)
|
|
321
341
|
* `judge-with-debate` → [`prompts/judge-with-debate.md`](prompts/judge-with-debate.md)
|
|
322
342
|
* `do-in-worktrees` → [`prompts/do-in-worktrees.md`](prompts/do-in-worktrees.md)
|
|
343
|
+
* `adversarial-verification-council` → [`prompts/adversarial-verification-council.md`](prompts/adversarial-verification-council.md)
|
|
323
344
|
* Standalone judge → judge prompt in [`prompts/do-and-judge.md`](prompts/do-and-judge.md)
|
|
324
345
|
|
|
325
346
|
### 5. Report
|
|
@@ -360,7 +381,7 @@ Skip emit when `subagents.enabled: false` or `spawn_count == 0` (in-session run)
|
|
|
360
381
|
|
|
361
382
|
## Output format
|
|
362
383
|
|
|
363
|
-
1. **Mode chosen** — one of the
|
|
384
|
+
1. **Mode chosen** — one of the nine, with the one-line reason
|
|
364
385
|
2. **Model pairing** — implementer model / judge model (resolved)
|
|
365
386
|
3. **Verdict** — applied / revised / handed back
|
|
366
387
|
4. **Evidence** — diff summary, test output, or judge transcript
|
|
@@ -37,6 +37,24 @@
|
|
|
37
37
|
"criterion": "Negative control: the clean return is verified and adopted WITHOUT rework or escalation — telemetry records first_pass_success=true and escalated=false. No spurious findings are invented to justify a re-dispatch."
|
|
38
38
|
}
|
|
39
39
|
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "sao-adversarial-council-advisory-no-gate",
|
|
43
|
+
"prompt": "`subagents.adversarial_council: on`. You are orchestrating an adversarial-verification-council (Mode 9) over a high-risk, already-verified change to an auth endpoint. Two distinct-model skeptics return findings: skeptic A raises a critical missing tenant-scope check at `src/http/orders.ts:42` (category security) and a low naming nit; skeptic B independently raises the same tenant-scope issue and refutes the naming nit. Reconcile and report the council result.",
|
|
44
|
+
"assertions": [
|
|
45
|
+
{
|
|
46
|
+
"kind": "contains",
|
|
47
|
+
"value": "advisory"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"kind": "rubric",
|
|
51
|
+
"criterion": "The reconciled output is a findings-by-severity envelope (findings-union), NOT a single go/no-go verdict: the tenant-scope finding is corroborated (raised_by both skeptics → high confidence), and the naming nit raised by only A and refuted by B is demoted to false_positives_suppressed (not silently dropped)."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"kind": "rubric",
|
|
55
|
+
"criterion": "The council is treated as ADVISORY and NEVER auto-gates the change (Hard Floor): the orchestrator surfaces the findings for a human decision and does not itself accept/reject/merge or block the change based on the panel verdict."
|
|
56
|
+
}
|
|
57
|
+
]
|
|
40
58
|
}
|
|
41
59
|
]
|
|
42
60
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Subagent dispatch prompts
|
|
2
2
|
|
|
3
|
-
One file per mode in [`SKILL.md`](../SKILL.md) § *The
|
|
3
|
+
One file per mode in [`SKILL.md`](../SKILL.md) § *The nine modes*. Each
|
|
4
4
|
prompt is the **literal template** the orchestrator hands to the
|
|
5
5
|
subagent on dispatch — externalized so prompt edits do not bloat the
|
|
6
6
|
skill above the 400-line sunset trigger.
|
|
@@ -14,6 +14,7 @@ skill above the 400-line sunset trigger.
|
|
|
14
14
|
| do-competitively | [`do-competitively.md`](do-competitively.md) |
|
|
15
15
|
| judge-with-debate | [`judge-with-debate.md`](judge-with-debate.md) |
|
|
16
16
|
| do-in-worktrees | [`do-in-worktrees.md`](do-in-worktrees.md) |
|
|
17
|
+
| adversarial-verification-council | [`adversarial-verification-council.md`](adversarial-verification-council.md) |
|
|
17
18
|
|
|
18
19
|
## Contract
|
|
19
20
|
|
|
@@ -47,5 +48,5 @@ dispatch. Verify a cohort is actually reading, not re-writing, by checking
|
|
|
47
48
|
## Loading
|
|
48
49
|
|
|
49
50
|
`tests/test_subagent_prompt_loading.py` asserts that every mode named
|
|
50
|
-
in `SKILL.md` § *The
|
|
51
|
+
in `SKILL.md` § *The nine modes* has a loadable prompt file under this
|
|
51
52
|
directory and that each prompt mentions all four status enum values.
|
package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Prompt — adversarial-verification-council
|
|
2
|
+
|
|
3
|
+
Mode reference: [`../SKILL.md`](../SKILL.md) § *9. adversarial-verification-council*.
|
|
4
|
+
Contract: ADR-122. Advisory only — the panel finds defects, it never gates the
|
|
5
|
+
change.
|
|
6
|
+
|
|
7
|
+
## Skeptic prompt (run N times in parallel, one per DISTINCT model)
|
|
8
|
+
|
|
9
|
+
Each skeptic runs on a different model (cross-model Iron Law; cross-*vendor* for
|
|
10
|
+
the high-risk tier). Assign each skeptic one or more `judge-*` lenses as its
|
|
11
|
+
*checklist* — the lens says WHAT to examine; this prompt sets the adversarial
|
|
12
|
+
HOW (find breakage, not confirm correctness).
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
You are SKEPTIC {{skeptic_id}} red-teaming a real, already-verified change.
|
|
16
|
+
Other skeptics on different models review the same change independently. Your
|
|
17
|
+
job is to BREAK it — find defects a first-pass review would miss.
|
|
18
|
+
|
|
19
|
+
POSTURE: adversarial. Assume the change is subtly wrong until you have looked.
|
|
20
|
+
Do NOT reach for "looks fine". Disagreement across skeptics IS the value.
|
|
21
|
+
If a judge lens you apply has a self-refutation/severity-calibration step, use
|
|
22
|
+
it ONLY to calibrate your OWN findings' severity — it never suppresses a defect
|
|
23
|
+
another skeptic might catch (cross-model quorum, not self-censorship).
|
|
24
|
+
|
|
25
|
+
LENS(ES): {{judge_lenses}} # e.g. judge-bug-hunter, judge-security-auditor
|
|
26
|
+
TASK: {{task_description}}
|
|
27
|
+
DIFF: {{diff}}
|
|
28
|
+
TEST OUTPUT: {{test_output}}
|
|
29
|
+
VERIFY CONTEXT: {{prior_verification}} # what the first-pass judge already passed
|
|
30
|
+
|
|
31
|
+
Look hardest at what survives a competent first pass: cross-file interaction
|
|
32
|
+
effects, subtle logic inversions that read as plausible, security masked by
|
|
33
|
+
correct-looking patterns, edge cases in complex state, missing invisible
|
|
34
|
+
controls (authz/tenant/validation), hollow or stubbed implementations.
|
|
35
|
+
|
|
36
|
+
RETURN — two blocks:
|
|
37
|
+
|
|
38
|
+
1) A status envelope (schemas/subagent-status.json): status=DONE with
|
|
39
|
+
evidence[] summarizing what you examined; DONE_WITH_CONCERNS / BLOCKED /
|
|
40
|
+
NEEDS_CONTEXT per the taxonomy.
|
|
41
|
+
|
|
42
|
+
2) A fenced ```json block: an array of findings, each:
|
|
43
|
+
{"severity":"critical|high|medium|low",
|
|
44
|
+
"category":"correctness|security|test-coverage|quality|injection|completeness|...",
|
|
45
|
+
"location":"file:line",
|
|
46
|
+
"description":"what breaks and why"}
|
|
47
|
+
Empty array [] if you genuinely found nothing — do NOT invent findings to
|
|
48
|
+
look busy (false positives are measured against you).
|
|
49
|
+
|
|
50
|
+
OPTIONAL "refutes": if you examined a specific location+category and are
|
|
51
|
+
confident it is NOT a defect, add:
|
|
52
|
+
{"refutes":["<file:line>::<category-lowercased>", ...]}
|
|
53
|
+
Only refute what you actually examined.
|
|
54
|
+
|
|
55
|
+
NAME ONE FAILURE MODE you actively looked for, even if you did not find it.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Reconciliation (deterministic — NOT an LLM step)
|
|
59
|
+
|
|
60
|
+
The orchestrator feeds every skeptic's findings array (+ any `refutes`) to
|
|
61
|
+
[`_lib/adversarial_reconcile.ts`](../../scripts/_lib/adversarial_reconcile.ts)
|
|
62
|
+
`reconcileFindings([...])`. That pure function:
|
|
63
|
+
|
|
64
|
+
- dedups by `location::category`, strict-er severity wins;
|
|
65
|
+
- records `raised_by[]` (provenance) and `refuted_by[]`;
|
|
66
|
+
- sets `confidence` (high = corroborated by a panel quorum);
|
|
67
|
+
- demotes a lone finding refuted by a strict majority of the rest into
|
|
68
|
+
`false_positives_suppressed[]` (never dropped).
|
|
69
|
+
|
|
70
|
+
Output is one `adversarial-findings.json` envelope, findings-by-severity. It is
|
|
71
|
+
**presented to the human as advisory** — the mode never accepts/rejects or gates
|
|
72
|
+
the change.
|
|
73
|
+
|
|
74
|
+
## Gated-only rule
|
|
75
|
+
|
|
76
|
+
`adversarial-verification-council` is N-skeptics = N+ subagent calls (cross-vendor
|
|
77
|
+
adds external spend). Runs only when `subagents.adversarial_council != off` AND
|
|
78
|
+
the change is explicitly high-risk (security, tenant, migration, public API).
|
|
79
|
+
Routine changes use `do-and-judge`; go/no-go decisions use `judge-with-debate`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://event4u.dev/agent-config/schemas/adversarial-findings.json",
|
|
4
|
+
"title": "Adversarial Findings Envelope",
|
|
5
|
+
"description": "Reconciled output of the adversarial-verification-council mode (subagent-orchestration Mode 9). A model-diverse skeptic panel red-teams a real, already-verified change; each skeptic returns findings; reconciliation (src/scripts/_lib/adversarial_reconcile.ts) dedups them into this envelope with per-finding provenance and a cross-model confidence signal. ADVISORY ONLY — never gates a change (Hard Floor). Hand-validated by adversarial_reconcile.test.ts (no jsonschema runtime dep).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["panel", "findings", "false_positives_suppressed"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"panel": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["models", "skeptic_count"],
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"properties": {
|
|
15
|
+
"models": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"minItems": 1,
|
|
18
|
+
"items": {"type": "string", "minLength": 1},
|
|
19
|
+
"description": "Distinct model ids of the skeptics. For the registered claim + high-risk tier these are cross-vendor (provider-level diversity)."
|
|
20
|
+
},
|
|
21
|
+
"skeptic_count": {
|
|
22
|
+
"type": "integer",
|
|
23
|
+
"minimum": 1,
|
|
24
|
+
"description": "Number of skeptics on the panel (== models.length)."
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"findings": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"description": "Surviving findings, most-severe first. Advisory — a human decides what is actionable.",
|
|
31
|
+
"items": {"$ref": "#/definitions/finding"}
|
|
32
|
+
},
|
|
33
|
+
"false_positives_suppressed": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"description": "Findings raised by one skeptic and refuted by a majority of the rest. Demoted here (not dropped) for auditability.",
|
|
36
|
+
"items": {"$ref": "#/definitions/finding"}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"definitions": {
|
|
40
|
+
"finding": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"required": ["id", "severity", "category", "location", "description", "raised_by", "refuted_by", "confidence"],
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"properties": {
|
|
45
|
+
"id": {"type": "string", "minLength": 1, "description": "Stable id, deterministic from the reconciled key order (avc-NNN)."},
|
|
46
|
+
"severity": {"type": "string", "enum": ["critical", "high", "medium", "low"], "description": "Most-severe severity among the skeptics that raised it (strict-er wins)."},
|
|
47
|
+
"category": {"type": "string", "minLength": 1, "description": "Defect class: correctness | security | test-coverage | quality | injection | completeness | ..."},
|
|
48
|
+
"location": {"type": "string", "minLength": 1, "description": "file:line (or the closest anchor the skeptic could give)."},
|
|
49
|
+
"description": {"type": "string", "minLength": 1, "description": "What the defect is and why it breaks."},
|
|
50
|
+
"raised_by": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}, "description": "Model ids that independently raised this finding — the provenance + corroboration signal."},
|
|
51
|
+
"refuted_by": {"type": "array", "items": {"type": "string", "minLength": 1}, "description": "Model ids that examined this finding and judged it NOT a defect."},
|
|
52
|
+
"confidence": {"type": "string", "enum": ["high", "medium", "low"], "description": "high = corroborated by a panel quorum; medium = corroborated below quorum (or lone raiser on a solo panel); low = single raiser on a multi-skeptic panel."}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -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.2.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -1102,7 +1102,7 @@
|
|
|
1102
1102
|
},
|
|
1103
1103
|
{
|
|
1104
1104
|
"category": "command",
|
|
1105
|
-
"checksum": "sha256:
|
|
1105
|
+
"checksum": "sha256:acefd13ee30decae123744bf123fc1ea850a46c3c4950d4e4d0d153cfa2e5193",
|
|
1106
1106
|
"install": {
|
|
1107
1107
|
"default": true,
|
|
1108
1108
|
"removable": false
|
|
@@ -1464,7 +1464,7 @@
|
|
|
1464
1464
|
},
|
|
1465
1465
|
{
|
|
1466
1466
|
"category": "command",
|
|
1467
|
-
"checksum": "sha256:
|
|
1467
|
+
"checksum": "sha256:c327db498d5de278aa46badcfc14995820f8f2a49e462d4e3e827265541611d2",
|
|
1468
1468
|
"install": {
|
|
1469
1469
|
"default": true,
|
|
1470
1470
|
"removable": false
|
|
@@ -5544,6 +5544,29 @@
|
|
|
5544
5544
|
"engineering"
|
|
5545
5545
|
]
|
|
5546
5546
|
},
|
|
5547
|
+
{
|
|
5548
|
+
"category": "rule",
|
|
5549
|
+
"checksum": "sha256:c41abaaf955699738ccee56b1370b5149bc84ab1fa5f1b6baa24e2b873b9393d",
|
|
5550
|
+
"install": {
|
|
5551
|
+
"default": true,
|
|
5552
|
+
"removable": false
|
|
5553
|
+
},
|
|
5554
|
+
"lifecycle": "active",
|
|
5555
|
+
"packs": [
|
|
5556
|
+
"engineering-base",
|
|
5557
|
+
"product-basic"
|
|
5558
|
+
],
|
|
5559
|
+
"path": "src/rules/cross-source-consistency.md",
|
|
5560
|
+
"trust": {
|
|
5561
|
+
"confidence": "high",
|
|
5562
|
+
"human_review_required": false,
|
|
5563
|
+
"level": "core"
|
|
5564
|
+
},
|
|
5565
|
+
"workspaces": [
|
|
5566
|
+
"engineering",
|
|
5567
|
+
"product"
|
|
5568
|
+
]
|
|
5569
|
+
},
|
|
5547
5570
|
{
|
|
5548
5571
|
"category": "rule",
|
|
5549
5572
|
"checksum": "sha256:f09f13f41eab26421f29cc731f8b1b737f9f37079c913416ba686bc9d45a8bc2",
|
|
@@ -5568,7 +5591,7 @@
|
|
|
5568
5591
|
},
|
|
5569
5592
|
{
|
|
5570
5593
|
"category": "rule",
|
|
5571
|
-
"checksum": "sha256:
|
|
5594
|
+
"checksum": "sha256:a7fb7c005699c157c6c263011700ad3173c206c94f2aa6af1022ce8f73bd5b40",
|
|
5572
5595
|
"install": {
|
|
5573
5596
|
"default": true,
|
|
5574
5597
|
"removable": false
|
|
@@ -9266,7 +9289,7 @@
|
|
|
9266
9289
|
},
|
|
9267
9290
|
{
|
|
9268
9291
|
"category": "skill",
|
|
9269
|
-
"checksum": "sha256:
|
|
9292
|
+
"checksum": "sha256:44b899d5e20f9df7ff6c314ddbdbde2acc3f113c70972711973406851880ca5f",
|
|
9270
9293
|
"install": {
|
|
9271
9294
|
"default": true,
|
|
9272
9295
|
"removable": true
|
|
@@ -9354,7 +9377,7 @@
|
|
|
9354
9377
|
},
|
|
9355
9378
|
{
|
|
9356
9379
|
"category": "skill",
|
|
9357
|
-
"checksum": "sha256:
|
|
9380
|
+
"checksum": "sha256:6852419c1125a3c85507533245a096064e35a41d57ed49b2c6394e370df99d47",
|
|
9358
9381
|
"install": {
|
|
9359
9382
|
"default": true,
|
|
9360
9383
|
"removable": true
|
|
@@ -11428,7 +11451,7 @@
|
|
|
11428
11451
|
},
|
|
11429
11452
|
{
|
|
11430
11453
|
"category": "skill",
|
|
11431
|
-
"checksum": "sha256:
|
|
11454
|
+
"checksum": "sha256:873175a941baa7f10386d89f78ef87c10a00d2ca811bbcbd273bd8b2dc73bb07",
|
|
11432
11455
|
"install": {
|
|
11433
11456
|
"default": true,
|
|
11434
11457
|
"removable": true
|
|
@@ -12066,7 +12089,7 @@
|
|
|
12066
12089
|
},
|
|
12067
12090
|
{
|
|
12068
12091
|
"category": "skill",
|
|
12069
|
-
"checksum": "sha256:
|
|
12092
|
+
"checksum": "sha256:00bedf510fe4b6adabbe4e4a7c16cd9a2259801b300d95879f0f22093741037c",
|
|
12070
12093
|
"install": {
|
|
12071
12094
|
"default": true,
|
|
12072
12095
|
"removable": true
|
|
@@ -12264,7 +12287,7 @@
|
|
|
12264
12287
|
},
|
|
12265
12288
|
{
|
|
12266
12289
|
"category": "skill",
|
|
12267
|
-
"checksum": "sha256:
|
|
12290
|
+
"checksum": "sha256:3803e4889057d8d1f0619ca4f9652b88729124a2aa2bdb83b31f2064c02ed104",
|
|
12268
12291
|
"install": {
|
|
12269
12292
|
"default": true,
|
|
12270
12293
|
"removable": false
|
|
@@ -12814,7 +12837,7 @@
|
|
|
12814
12837
|
},
|
|
12815
12838
|
{
|
|
12816
12839
|
"category": "skill",
|
|
12817
|
-
"checksum": "sha256:
|
|
12840
|
+
"checksum": "sha256:355f51b3ef319bb84a826f417b33c465e8991cd0dbf6c2cc645c7db9af9ebc6c",
|
|
12818
12841
|
"install": {
|
|
12819
12842
|
"default": true,
|
|
12820
12843
|
"removable": false
|
|
@@ -13535,7 +13558,7 @@
|
|
|
13535
13558
|
"workspaces": []
|
|
13536
13559
|
}
|
|
13537
13560
|
],
|
|
13538
|
-
"checksum": "sha256:
|
|
13561
|
+
"checksum": "sha256:c2e1ad4673f3bf59c601bfdf51040b155bbcc511f0af3622004ca1917bad10e9",
|
|
13539
13562
|
"deprecations": [
|
|
13540
13563
|
{
|
|
13541
13564
|
"key": "tier",
|
|
@@ -13678,10 +13701,10 @@
|
|
|
13678
13701
|
"reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
|
|
13679
13702
|
}
|
|
13680
13703
|
],
|
|
13681
|
-
"generated_at": "2026-07-
|
|
13704
|
+
"generated_at": "2026-07-14T13:40:54Z",
|
|
13682
13705
|
"packs": [
|
|
13683
13706
|
{
|
|
13684
|
-
"artefact_count":
|
|
13707
|
+
"artefact_count": 107,
|
|
13685
13708
|
"description": "Framework-neutral engineering hygiene — git, tests, reviews.",
|
|
13686
13709
|
"domain": "engineering",
|
|
13687
13710
|
"human_review_required": 0,
|
|
@@ -13691,7 +13714,7 @@
|
|
|
13691
13714
|
"trust_level_default": "core",
|
|
13692
13715
|
"trust_summary": {
|
|
13693
13716
|
"advisory": 0,
|
|
13694
|
-
"core":
|
|
13717
|
+
"core": 105,
|
|
13695
13718
|
"experimental": 1,
|
|
13696
13719
|
"professional": 1,
|
|
13697
13720
|
"restricted": 0
|
|
@@ -14034,7 +14057,7 @@
|
|
|
14034
14057
|
]
|
|
14035
14058
|
},
|
|
14036
14059
|
{
|
|
14037
|
-
"artefact_count":
|
|
14060
|
+
"artefact_count": 12,
|
|
14038
14061
|
"description": "Core PO/PM artefacts (ticket refinement, AC, estimation).",
|
|
14039
14062
|
"domain": "product",
|
|
14040
14063
|
"human_review_required": 0,
|
|
@@ -14053,7 +14076,7 @@
|
|
|
14053
14076
|
"trust_level_default": "professional",
|
|
14054
14077
|
"trust_summary": {
|
|
14055
14078
|
"advisory": 0,
|
|
14056
|
-
"core":
|
|
14079
|
+
"core": 1,
|
|
14057
14080
|
"experimental": 0,
|
|
14058
14081
|
"professional": 11,
|
|
14059
14082
|
"restricted": 0
|
|
@@ -14451,26 +14474,26 @@
|
|
|
14451
14474
|
"stats": {
|
|
14452
14475
|
"by_category": {
|
|
14453
14476
|
"command": 184,
|
|
14454
|
-
"rule":
|
|
14477
|
+
"rule": 105,
|
|
14455
14478
|
"skill": 275,
|
|
14456
14479
|
"subagent": 1,
|
|
14457
14480
|
"template": 1
|
|
14458
14481
|
},
|
|
14459
14482
|
"by_lifecycle": {
|
|
14460
|
-
"active":
|
|
14483
|
+
"active": 550,
|
|
14461
14484
|
"archived": 0,
|
|
14462
14485
|
"deprecated": 0,
|
|
14463
14486
|
"experimental": 16
|
|
14464
14487
|
},
|
|
14465
14488
|
"by_trust_level": {
|
|
14466
14489
|
"advisory": 8,
|
|
14467
|
-
"core":
|
|
14490
|
+
"core": 439,
|
|
14468
14491
|
"experimental": 21,
|
|
14469
14492
|
"professional": 98,
|
|
14470
14493
|
"restricted": 0
|
|
14471
14494
|
},
|
|
14472
14495
|
"documented_unassigned_count": 26,
|
|
14473
|
-
"total_artefacts":
|
|
14496
|
+
"total_artefacts": 566,
|
|
14474
14497
|
"unassigned_count": 0
|
|
14475
14498
|
},
|
|
14476
14499
|
"unassigned": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
662d30c8e6a940ea63e9a9d3fdd667a0acded956349c9f89dd21d0b8daf9727c discovery-manifest.json
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Discovery Manifest — Summary
|
|
2
2
|
|
|
3
|
-
- Generated: `2026-07-
|
|
3
|
+
- Generated: `2026-07-14T13:40:54Z`
|
|
4
4
|
- Scanner: `c24312e116f8`
|
|
5
|
-
- Artefacts: **
|
|
5
|
+
- Artefacts: **566**
|
|
6
6
|
- Unassigned: **0**
|
|
7
7
|
|
|
8
8
|
## `engineering` — Engineering
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
| Pack | Artefacts |
|
|
13
13
|
|---|---|
|
|
14
|
-
| `engineering-base` — Engineering Base |
|
|
14
|
+
| `engineering-base` — Engineering Base | 107 |
|
|
15
15
|
| `git` — Git | 4 |
|
|
16
16
|
| `php` — PHP | 6 |
|
|
17
17
|
| `laravel` — Laravel | 25 |
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
| Pack | Artefacts |
|
|
33
33
|
|---|---|
|
|
34
|
-
| `product-basic` — Product Basic |
|
|
34
|
+
| `product-basic` — Product Basic | 12 |
|
|
35
35
|
| `product-discovery` — Product Discovery | 4 |
|
|
36
36
|
|
|
37
37
|
## `finance` — Finance
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-07-
|
|
2
|
+
"checksum": "sha256:c2e1ad4673f3bf59c601bfdf51040b155bbcc511f0af3622004ca1917bad10e9",
|
|
3
|
+
"generated_at": "2026-07-14T13:40:54Z",
|
|
4
4
|
"packs": [
|
|
5
5
|
{
|
|
6
6
|
"always_on": false,
|
|
7
|
-
"artefact_count":
|
|
7
|
+
"artefact_count": 107,
|
|
8
8
|
"artefacts": [
|
|
9
9
|
"src/domains/engineering-base/mission/upgrade/command.md",
|
|
10
10
|
"src/rules/active-remediation.md",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"src/rules/code-comment-discipline.md",
|
|
13
13
|
"src/rules/commit-conventions.md",
|
|
14
14
|
"src/rules/commit-policy.md",
|
|
15
|
+
"src/rules/cross-source-consistency.md",
|
|
15
16
|
"src/rules/delegation-policy.md",
|
|
16
17
|
"src/rules/docker-commands.md",
|
|
17
18
|
"src/rules/downstream-changes.md",
|
|
@@ -114,14 +115,14 @@
|
|
|
114
115
|
"src/skills/worktree-lifecycle/SKILL.md"
|
|
115
116
|
],
|
|
116
117
|
"by_lifecycle": {
|
|
117
|
-
"active":
|
|
118
|
+
"active": 106,
|
|
118
119
|
"archived": 0,
|
|
119
120
|
"deprecated": 0,
|
|
120
121
|
"experimental": 1
|
|
121
122
|
},
|
|
122
123
|
"by_trust_level": {
|
|
123
124
|
"advisory": 0,
|
|
124
|
-
"core":
|
|
125
|
+
"core": 105,
|
|
125
126
|
"experimental": 1,
|
|
126
127
|
"professional": 1,
|
|
127
128
|
"restricted": 0
|
|
@@ -669,8 +670,9 @@
|
|
|
669
670
|
},
|
|
670
671
|
{
|
|
671
672
|
"always_on": false,
|
|
672
|
-
"artefact_count":
|
|
673
|
+
"artefact_count": 12,
|
|
673
674
|
"artefacts": [
|
|
675
|
+
"src/rules/cross-source-consistency.md",
|
|
674
676
|
"src/skills/churn-prevention/SKILL.md",
|
|
675
677
|
"src/skills/estimate-ticket/SKILL.md",
|
|
676
678
|
"src/skills/feature-planning/SKILL.md",
|
|
@@ -684,14 +686,14 @@
|
|
|
684
686
|
"src/skills/technical-specification/SKILL.md"
|
|
685
687
|
],
|
|
686
688
|
"by_lifecycle": {
|
|
687
|
-
"active":
|
|
689
|
+
"active": 12,
|
|
688
690
|
"archived": 0,
|
|
689
691
|
"deprecated": 0,
|
|
690
692
|
"experimental": 0
|
|
691
693
|
},
|
|
692
694
|
"by_trust_level": {
|
|
693
695
|
"advisory": 0,
|
|
694
|
-
"core":
|
|
696
|
+
"core": 1,
|
|
695
697
|
"experimental": 0,
|
|
696
698
|
"professional": 11,
|
|
697
699
|
"restricted": 0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Discovery — Trust Report
|
|
2
2
|
|
|
3
|
-
- Generated: `2026-07-
|
|
3
|
+
- Generated: `2026-07-14T13:40:54Z`
|
|
4
4
|
- Workspaces tracked: **10**
|
|
5
5
|
- Human-review-required artefacts: **3**
|
|
6
6
|
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
|---|---|---|---|---|---|
|
|
11
11
|
| `agent-config-maintainer` | 304 | 0 | 3 | 0 | 0 |
|
|
12
12
|
| `construction` | 23 | 0 | 0 | 0 | 0 |
|
|
13
|
-
| `engineering` |
|
|
13
|
+
| `engineering` | 168 | 58 | 2 | 0 | 0 |
|
|
14
14
|
| `finance` | 26 | 4 | 0 | 1 | 0 |
|
|
15
15
|
| `founder` | 30 | 0 | 1 | 1 | 0 |
|
|
16
16
|
| `gtm` | 28 | 13 | 1 | 0 | 0 |
|
|
17
17
|
| `legal-review-prep` | 23 | 0 | 0 | 6 | 0 |
|
|
18
18
|
| `ops` | 23 | 8 | 1 | 0 | 0 |
|
|
19
|
-
| `product` |
|
|
19
|
+
| `product` | 24 | 15 | 1 | 0 | 0 |
|
|
20
20
|
| `small-business` | 29 | 0 | 19 | 0 | 0 |
|
|
21
21
|
|
|
22
22
|
## Human-review-required artefacts
|