@event4u/agent-config 9.1.0 → 9.3.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.
Files changed (76) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +38 -234
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/fix/route.md +49 -0
  5. package/dist/agent-src/commands/fix.md +4 -2
  6. package/dist/agent-src/commands/implement-ticket.md +2 -0
  7. package/dist/agent-src/commands/review/changes.md +22 -0
  8. package/dist/agent-src/commands/tdd/green.md +32 -0
  9. package/dist/agent-src/commands/tdd/red.md +33 -0
  10. package/dist/agent-src/commands/tdd/refactor.md +31 -0
  11. package/dist/agent-src/commands/tdd.md +50 -0
  12. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  13. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +41 -6
  14. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +81 -2
  15. package/dist/agent-src/contexts/execution/verify-budget.md +15 -0
  16. package/dist/agent-src/rules/architecture.md +7 -0
  17. package/dist/agent-src/rules/cross-source-consistency.md +92 -0
  18. package/dist/agent-src/rules/delegation-policy.md +1 -1
  19. package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -0
  20. package/dist/agent-src/skills/fe-design/SKILL.md +1 -0
  21. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  22. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
  23. package/dist/agent-src/skills/persona-improvement/SKILL.md +81 -0
  24. package/dist/agent-src/skills/po-discovery/SKILL.md +2 -0
  25. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +10 -0
  26. package/dist/agent-src/skills/refine-ticket/SKILL.md +7 -0
  27. package/dist/agent-src/skills/roadmap-writing/SKILL.md +14 -0
  28. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +38 -28
  29. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +18 -0
  30. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +3 -2
  31. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +79 -0
  32. package/dist/agent-src/skills/subagent-orchestration/schemas/adversarial-findings.json +56 -0
  33. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  34. package/dist/discovery/deprecation-report.md +1 -1
  35. package/dist/discovery/discovery-manifest.json +205 -29
  36. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  37. package/dist/discovery/discovery-manifest.summary.md +5 -5
  38. package/dist/discovery/orphan-report.md +1 -1
  39. package/dist/discovery/packs.json +19 -11
  40. package/dist/discovery/trust-report.md +4 -4
  41. package/dist/discovery/workspaces.json +16 -8
  42. package/dist/install/install.mjs +9 -0
  43. package/dist/mcp/registry-manifest.json +3 -3
  44. package/dist/router.json +1 -1
  45. package/dist/server/schemas/settings.js +5 -0
  46. package/dist/server/schemas/settings.js.map +1 -1
  47. package/docs/CLAIMS.md +10 -3
  48. package/docs/architecture.md +4 -4
  49. package/docs/archive/CHANGELOG-pre-9.2.0.md +276 -0
  50. package/docs/benchmark.md +24 -0
  51. package/docs/command-flows.md +9 -3
  52. package/docs/contracts/command-clusters.md +2 -1
  53. package/docs/decisions/ADR-122-adversarial-verification-council.md +136 -0
  54. package/docs/decisions/INDEX.md +1 -0
  55. package/docs/design/adversarial-council-eval.md +106 -0
  56. package/docs/development.md +10 -1
  57. package/docs/featured-skills.md +2 -2
  58. package/docs/getting-started-by-role.md +1 -1
  59. package/docs/getting-started.md +1 -1
  60. package/docs/governance-advantage.md +1 -1
  61. package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
  62. package/docs/guidelines/component-oriented-and-oop-development.md +181 -0
  63. package/docs/proof.md +7 -7
  64. package/package.json +3 -2
  65. package/src/config/agent-settings.template.yml +42 -0
  66. package/src/scripts/_lib/adversarial_council_gate.test.ts +112 -0
  67. package/src/scripts/_lib/adversarial_council_gate.ts +98 -0
  68. package/src/scripts/_lib/adversarial_reconcile.test.ts +197 -0
  69. package/src/scripts/_lib/adversarial_reconcile.ts +187 -0
  70. package/src/scripts/_lib/verify_budget.ts +4 -1
  71. package/src/scripts/ai_council/prompts.ts +7 -0
  72. package/src/scripts/hook_manifest.yaml +17 -6
  73. package/src/scripts/install-hooks.sh +32 -17
  74. package/src/scripts/pr_url_reminder_hook.ts +177 -0
  75. package/src/scripts/schemas/agent-settings.schema.json +11 -0
  76. package/src/server/schemas/settings.ts +9 -0
@@ -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 + eight modes (do-and-judge ±two-stage, steps/parallel/worktrees, competitively, debate, live-app-judge)."
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
@@ -68,33 +68,22 @@ line; any gate failing → in-session no-op. Never lifts a safety floor.
68
68
 
69
69
  ## Worker-prompt contract
70
70
 
71
- Every dispatched worker prompt obeys four rules — they prevent the two classic
72
- handoff failures: lossy re-summarization dropping the user's requirements, and
73
- over-scripted prompts that break on first contingency.
74
-
75
- - **(a) User constraints verbatim.** Pass the user's
76
- constraints/exclusions/preferences into the worker prompt **verbatim** — never
77
- a paraphrase (a paraphrase silently drops requirements).
78
- - **(b) Describe the goal, don't script the approach.** State the outcome and
79
- let the worker choose the path; over-scripting breaks on contingencies.
80
- - **(c) Translate environment paths.** Orchestrator-local paths do not exist in
81
- the worker's sandbox — resolve/translate them at spawn.
82
- - **(d) Pre-declared check-in conditions.** The worker names, at spawn time, the
83
- conditions under which it will halt and ask ("if login required", "if
84
- multiple candidates found") — so interrupts are predictable, not surprises.
85
- - **(e) Attach relevant knowledge — read-only (road-to-opt-subagent-harvest
86
- P3).** Before dispatch, look up the slice's key identifiers via
87
- `memory_lookup` / the knowledge cards and attach the top hits to the
88
- worker prompt AS LEADS — labelled per the source-discovery discipline
89
- (negative facts + pointers durable; positive structure = hypothesis to
90
- re-confirm, never a build input). The WRITE half stays forbidden: a
91
- subagent's output is never auto-persisted into memory — promotion is
92
- always the human-gated flow (ADR-098 floor). Auto-surface, never
93
- auto-write.
71
+ Every dispatched worker prompt obeys five rules that prevent the two classic
72
+ handoff failures (lossy re-summarization dropping the user's requirements;
73
+ over-scripted prompts that break on first contingency): (a) user
74
+ constraints **verbatim**, (b) describe the goal — don't script the approach,
75
+ (c) translate environment paths into the worker's sandbox, (d) pre-declare
76
+ check-in conditions, (e) attach relevant knowledge read-only (auto-surface,
77
+ never auto-write — ADR-098 floor). The five rules verbatim:
78
+ [`subagent-spawn-contract` § Worker-prompt rules](../../contexts/execution/subagent-spawn-contract.md).
94
79
 
95
80
  When to delegate at all is [`delegation-policy`](../../rules/delegation-policy.md);
96
81
  the spawn boundary is the [`subagent-spawn-contract`](../../contexts/execution/subagent-spawn-contract.md).
97
82
 
83
+ ## Hand-off worked examples
84
+
85
+ Ordered / fan-out hand-offs embed each step's return **verbatim** in the next prompt and state what to do with it (never "continue from before" — the lossy re-summarization failure). Two worked shapes: [`subagent-spawn-contract` § Hand-off worked examples](../../contexts/execution/subagent-spawn-contract.md).
86
+
98
87
  ## Form gate — deterministic, BEFORE mode selection
99
88
 
100
89
  With auto-dispatch on by default (ADR-117), mode selection happens without
@@ -108,6 +97,7 @@ no learned routing, no self-modifying selector (rejected, stays rejected).
108
97
  | Multi-step cross-wing chain needing filesystem isolation | worktrees | `do-in-worktrees` |
109
98
  | Ordered steps with declared dependencies | steps | `do-in-steps` |
110
99
  | 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` |
100
+ | High-risk change needing defect-FINDING coverage (opt-in, advisory) | verify-council | `adversarial-verification-council` (default-off; `subagents.adversarial_council`) |
111
101
  | Single slice below the delegability floor, unstructured, or frontier-priced | none | no dispatch — run in-session |
112
102
 
113
103
  Rules:
@@ -121,7 +111,7 @@ Rules:
121
111
  or `none`) so the gate's value is measurable inside the ADR-117
122
112
  prove-or-drop window.
123
113
 
124
- ## The eight modes
114
+ ## The nine modes
125
115
 
126
116
  Each mode has a decision row: when to use, when not, and the expected
127
117
  model pairing. Defaults come from
@@ -211,6 +201,9 @@ migration, public API) where a single judge is too easy to fool.
211
201
  |---|---|---|
212
202
  | Security, data integrity, public API change | Routine internal refactor | judges = same tier (2x); meta-judge = one tier up |
213
203
 
204
+ Mode 6 = **go/no-go** (strict-er verdict wins); for defect-FINDING coverage (the
205
+ *union* of what diverse models catch) use Mode 9.
206
+
214
207
  ### 7. do-in-worktrees
215
208
 
216
209
  Cross-wing or cross-skill chain executed across isolated git worktrees —
@@ -231,6 +224,22 @@ Experimental until `verdict_changed_outcome` telemetry proves it. Rubric,
231
224
  adoption gate, and the async-verifier future candidate →
232
225
  [`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 8.
233
226
 
227
+ ### 9. adversarial-verification-council (gated — opt-in, advisory)
228
+
229
+ A panel of N (default 2) **distinct-model** skeptics red-teams a real,
230
+ already-verified change through the `judge-*` lenses — each prompted to *break*
231
+ it. Returns reconcile deterministically
232
+ ([`_lib/adversarial_reconcile.ts`](../../scripts/_lib/adversarial_reconcile.ts))
233
+ into one findings-by-severity envelope with provenance + cross-model confidence
234
+ ([`schemas/adversarial-findings.json`](schemas/adversarial-findings.json)). Unlike
235
+ Mode 6 it emits a **findings-union**, not a go/no-go verdict. **Advisory only —
236
+ never auto-gates (Hard Floor).** Default-off (`subagents.adversarial_council`);
237
+ opt-in high-risk changes only; registered claim + high-risk tier need
238
+ cross-*vendor* skeptics. Invariants, skeptic prompt, reconciliation, prove-or-drop
239
+ gate → [`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 9
240
+ + [`prompts/adversarial-verification-council.md`](prompts/adversarial-verification-council.md)
241
+ (ADR-122).
242
+
234
243
  ## Status taxonomy — every subagent return uses one envelope
235
244
 
236
245
  Every implementer or judge return must conform to
@@ -265,7 +274,7 @@ Each mode's literal dispatch template lives under
265
274
  matching prompt at dispatch time and substitutes `{{placeholders}}`.
266
275
  Edits to a prompt do not bloat this skill against the 400-line sunset
267
276
  trigger; `tests/test_subagent_prompt_loading.py` confirms each of the
268
- eight modes resolves to a loadable prompt that cites all four taxonomy
277
+ nine modes resolves to a loadable prompt that cites all four taxonomy
269
278
  statuses.
270
279
 
271
280
  ## Procedure
@@ -294,7 +303,7 @@ same context, **stop** and report. Do not improvise.
294
303
 
295
304
  ### 3. Pick the mode
296
305
 
297
- Run the form gate first, then match task shape to one of the eight modes. When two modes could fit,
306
+ Run the form gate first, then match task shape to one of the nine modes. When two modes could fit,
298
307
  prefer the cheaper one (`do-and-judge` < `do-and-judge-two-stage` <
299
308
  `do-in-steps` < `do-in-parallel` < `do-competitively` <
300
309
  `judge-with-debate` < `do-in-worktrees`).
@@ -320,6 +329,7 @@ Describe each dispatch step explicitly in chat so the user can follow it.
320
329
  * `do-competitively` → [`prompts/do-competitively.md`](prompts/do-competitively.md)
321
330
  * `judge-with-debate` → [`prompts/judge-with-debate.md`](prompts/judge-with-debate.md)
322
331
  * `do-in-worktrees` → [`prompts/do-in-worktrees.md`](prompts/do-in-worktrees.md)
332
+ * `adversarial-verification-council` → [`prompts/adversarial-verification-council.md`](prompts/adversarial-verification-council.md)
323
333
  * Standalone judge → judge prompt in [`prompts/do-and-judge.md`](prompts/do-and-judge.md)
324
334
 
325
335
  ### 5. Report
@@ -360,7 +370,7 @@ Skip emit when `subagents.enabled: false` or `spawn_count == 0` (in-session run)
360
370
 
361
371
  ## Output format
362
372
 
363
- 1. **Mode chosen** — one of the seven, with the one-line reason
373
+ 1. **Mode chosen** — one of the nine, with the one-line reason
364
374
  2. **Model pairing** — implementer model / judge model (resolved)
365
375
  3. **Verdict** — applied / revised / handed back
366
376
  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 seven modes*. Each
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 seven modes* has a loadable prompt file under this
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.
@@ -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.1.0"
42
+ agent_config_version: "9.3.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-07-14T09:00:03Z`
3
+ - Generated: `2026-07-16T03:13:57Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._