@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +38 -234
- package/README.md +1 -1
- package/dist/agent-src/commands/fix/route.md +49 -0
- package/dist/agent-src/commands/fix.md +4 -2
- package/dist/agent-src/commands/implement-ticket.md +2 -0
- package/dist/agent-src/commands/review/changes.md +22 -0
- package/dist/agent-src/commands/tdd/green.md +32 -0
- package/dist/agent-src/commands/tdd/red.md +33 -0
- package/dist/agent-src/commands/tdd/refactor.md +31 -0
- package/dist/agent-src/commands/tdd.md +50 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +41 -6
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +81 -2
- package/dist/agent-src/contexts/execution/verify-budget.md +15 -0
- package/dist/agent-src/rules/architecture.md +7 -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/fe-design/SKILL.md +1 -0
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/dist/agent-src/skills/persona-improvement/SKILL.md +81 -0
- package/dist/agent-src/skills/po-discovery/SKILL.md +2 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +10 -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 +38 -28
- 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 +205 -29
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +19 -11
- package/dist/discovery/trust-report.md +4 -4
- package/dist/discovery/workspaces.json +16 -8
- package/dist/install/install.mjs +9 -0
- package/dist/mcp/registry-manifest.json +3 -3
- 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 +10 -3
- package/docs/architecture.md +4 -4
- package/docs/archive/CHANGELOG-pre-9.2.0.md +276 -0
- package/docs/benchmark.md +24 -0
- package/docs/command-flows.md +9 -3
- package/docs/contracts/command-clusters.md +2 -1
- 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/development.md +10 -1
- package/docs/featured-skills.md +2 -2
- 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/guidelines/component-oriented-and-oop-development.md +181 -0
- package/docs/proof.md +7 -7
- package/package.json +3 -2
- 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/ai_council/prompts.ts +7 -0
- package/src/scripts/hook_manifest.yaml +17 -6
- package/src/scripts/install-hooks.sh +32 -17
- package/src/scripts/pr_url_reminder_hook.ts +177 -0
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- 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 +
|
|
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
|
|
72
|
-
handoff failures
|
|
73
|
-
over-scripted prompts that break on first contingency
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.3.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|