@aperant/framework 0.6.4 → 0.6.6
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/CHANGELOG.md +38 -0
- package/README.md +54 -234
- package/agents/apt-improver.md +99 -0
- package/agents/apt-planner.md +115 -10
- package/dist/__test-helpers/run-cmd.d.mts +4 -2
- package/dist/__test-helpers/run-cmd.d.mts.map +1 -1
- package/dist/__test-helpers/run-cmd.mjs +56 -15
- package/dist/__test-helpers/run-cmd.mjs.map +1 -1
- package/dist/cli/ci-watch/lock.d.mts +53 -0
- package/dist/cli/ci-watch/lock.d.mts.map +1 -0
- package/dist/cli/ci-watch/lock.mjs +172 -0
- package/dist/cli/ci-watch/lock.mjs.map +1 -0
- package/dist/cli/ci-watch/state.d.mts +36 -0
- package/dist/cli/ci-watch/state.d.mts.map +1 -0
- package/dist/cli/ci-watch/state.mjs +103 -0
- package/dist/cli/ci-watch/state.mjs.map +1 -0
- package/dist/cli/ci-watch/stop-matrix.d.mts +58 -0
- package/dist/cli/ci-watch/stop-matrix.d.mts.map +1 -0
- package/dist/cli/ci-watch/stop-matrix.mjs +164 -0
- package/dist/cli/ci-watch/stop-matrix.mjs.map +1 -0
- package/dist/cli/cli-wrappers/ci-watch.d.mts +2 -0
- package/dist/cli/cli-wrappers/ci-watch.d.mts.map +1 -0
- package/dist/cli/cli-wrappers/ci-watch.mjs +9 -0
- package/dist/cli/cli-wrappers/ci-watch.mjs.map +1 -0
- package/dist/cli/commands/adr.d.mts +5 -0
- package/dist/cli/commands/adr.d.mts.map +1 -0
- package/dist/cli/commands/adr.mjs +228 -0
- package/dist/cli/commands/adr.mjs.map +1 -0
- package/dist/cli/commands/ci-watch.d.mts +7 -0
- package/dist/cli/commands/ci-watch.d.mts.map +1 -0
- package/dist/cli/commands/ci-watch.mjs +465 -0
- package/dist/cli/commands/ci-watch.mjs.map +1 -0
- package/dist/cli/commands/commit.d.mts.map +1 -1
- package/dist/cli/commands/commit.mjs +25 -8
- package/dist/cli/commands/commit.mjs.map +1 -1
- package/dist/cli/commands/context.d.mts +7 -0
- package/dist/cli/commands/context.d.mts.map +1 -0
- package/dist/cli/commands/context.mjs +224 -0
- package/dist/cli/commands/context.mjs.map +1 -0
- package/dist/cli/commands/event.d.mts.map +1 -1
- package/dist/cli/commands/event.mjs +125 -24
- package/dist/cli/commands/event.mjs.map +1 -1
- package/dist/cli/commands/host-detect.d.mts +1 -1
- package/dist/cli/commands/host-detect.d.mts.map +1 -1
- package/dist/cli/commands/host-detect.mjs +30 -3
- package/dist/cli/commands/host-detect.mjs.map +1 -1
- package/dist/cli/commands/modes.d.mts +13 -0
- package/dist/cli/commands/modes.d.mts.map +1 -0
- package/dist/cli/commands/modes.mjs +221 -0
- package/dist/cli/commands/modes.mjs.map +1 -0
- package/dist/cli/commands/route.mjs +1 -1
- package/dist/cli/commands/route.mjs.map +1 -1
- package/dist/cli/commands/task.d.mts.map +1 -1
- package/dist/cli/commands/task.mjs +393 -145
- package/dist/cli/commands/task.mjs.map +1 -1
- package/dist/cli/commands/tokens.d.mts.map +1 -1
- package/dist/cli/commands/tokens.mjs +150 -6
- package/dist/cli/commands/tokens.mjs.map +1 -1
- package/dist/cli/commands/triage.d.mts +8 -0
- package/dist/cli/commands/triage.d.mts.map +1 -0
- package/dist/cli/commands/triage.mjs +263 -0
- package/dist/cli/commands/triage.mjs.map +1 -0
- package/dist/cli/config/post-merge-sweep.d.mts +18 -0
- package/dist/cli/config/post-merge-sweep.d.mts.map +1 -1
- package/dist/cli/config/post-merge-sweep.mjs +48 -3
- package/dist/cli/config/post-merge-sweep.mjs.map +1 -1
- package/dist/cli/consistency/registry.d.mts +11 -0
- package/dist/cli/consistency/registry.d.mts.map +1 -1
- package/dist/cli/consistency/registry.mjs +13 -0
- package/dist/cli/consistency/registry.mjs.map +1 -1
- package/dist/cli/coordination/agent-identity.d.mts +9 -0
- package/dist/cli/coordination/agent-identity.d.mts.map +1 -1
- package/dist/cli/coordination/agent-identity.mjs +11 -0
- package/dist/cli/coordination/agent-identity.mjs.map +1 -1
- package/dist/cli/coordination/auto-emit-artifact-ready.d.mts +16 -0
- package/dist/cli/coordination/auto-emit-artifact-ready.d.mts.map +1 -0
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs +88 -0
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs.map +1 -0
- package/dist/cli/coordination/event-log.d.mts +27 -0
- package/dist/cli/coordination/event-log.d.mts.map +1 -1
- package/dist/cli/coordination/event-log.mjs +72 -2
- package/dist/cli/coordination/event-log.mjs.map +1 -1
- package/dist/cli/coordination/event-schema.d.mts +16 -0
- package/dist/cli/coordination/event-schema.d.mts.map +1 -0
- package/dist/cli/coordination/event-schema.mjs +161 -0
- package/dist/cli/coordination/event-schema.mjs.map +1 -0
- package/dist/cli/coordination/store.d.mts +6 -0
- package/dist/cli/coordination/store.d.mts.map +1 -1
- package/dist/cli/coordination/store.mjs +14 -0
- package/dist/cli/coordination/store.mjs.map +1 -1
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +14 -1
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/registry.d.mts +11 -0
- package/dist/cli/gate/registry.d.mts.map +1 -1
- package/dist/cli/gate/registry.mjs +13 -0
- package/dist/cli/gate/registry.mjs.map +1 -1
- package/dist/cli/help.d.mts.map +1 -1
- package/dist/cli/help.mjs +3 -2
- package/dist/cli/help.mjs.map +1 -1
- package/dist/cli/host/detect.d.mts +1 -0
- package/dist/cli/host/detect.d.mts.map +1 -1
- package/dist/cli/host/detect.mjs +5 -0
- package/dist/cli/host/detect.mjs.map +1 -1
- package/dist/cli/roadmap/conductor-view.d.mts +13 -0
- package/dist/cli/roadmap/conductor-view.d.mts.map +1 -0
- package/dist/cli/roadmap/conductor-view.mjs +31 -0
- package/dist/cli/roadmap/conductor-view.mjs.map +1 -0
- package/dist/cli/route/envelope.d.mts +68 -4
- package/dist/cli/route/envelope.d.mts.map +1 -1
- package/dist/cli/route/envelope.mjs +140 -103
- package/dist/cli/route/envelope.mjs.map +1 -1
- package/dist/cli/route/skill-discover.d.mts +9 -0
- package/dist/cli/route/skill-discover.d.mts.map +1 -1
- package/dist/cli/route/skill-discover.mjs +13 -1
- package/dist/cli/route/skill-discover.mjs.map +1 -1
- package/dist/cli/skill-author/contract.d.mts +1 -0
- package/dist/cli/skill-author/contract.d.mts.map +1 -1
- package/dist/cli/skill-author/contract.mjs +7 -0
- package/dist/cli/skill-author/contract.mjs.map +1 -1
- package/dist/cli/task/ids.d.mts +7 -4
- package/dist/cli/task/ids.d.mts.map +1 -1
- package/dist/cli/task/ids.mjs +11 -10
- package/dist/cli/task/ids.mjs.map +1 -1
- package/dist/cli/task/worktree-cleanup.d.mts +9 -1
- package/dist/cli/task/worktree-cleanup.d.mts.map +1 -1
- package/dist/cli/task/worktree-cleanup.mjs +190 -9
- package/dist/cli/task/worktree-cleanup.mjs.map +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/apt-planner.md +1 -1
- package/dist/plugin/skills/apt/SKILL.md +111 -5
- package/dist/plugin/skills/apt-author-skill/SKILL.md +11 -0
- package/dist/plugin/skills/apt-bootstrap/SKILL.md +1 -0
- package/dist/plugin/skills/apt-classify/SKILL.md +1 -0
- package/dist/plugin/skills/apt-close-task/SKILL.md +1 -0
- package/dist/plugin/skills/apt-create-docs/SKILL.md +1 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +2 -0
- package/dist/plugin/skills/apt-design/SKILL.md +2 -0
- package/dist/plugin/skills/apt-discuss/SKILL.md +2 -0
- package/dist/plugin/skills/apt-docs/SKILL.md +2 -0
- package/dist/plugin/skills/apt-execute/SKILL.md +1 -0
- package/dist/plugin/skills/apt-mockup/SKILL.md +2 -0
- package/dist/plugin/skills/apt-pause/SKILL.md +1 -0
- package/dist/plugin/skills/apt-personas/SKILL.md +1 -0
- package/dist/plugin/skills/apt-plan/SKILL.md +2 -0
- package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -0
- package/dist/plugin/skills/apt-quick/SKILL.md +2 -0
- package/dist/plugin/skills/apt-resume/SKILL.md +1 -0
- package/dist/plugin/skills/apt-review/SKILL.md +1 -0
- package/dist/plugin/skills/apt-roadmap/SKILL.md +1 -0
- package/dist/plugin/skills/apt-roundtable/SKILL.md +2 -0
- package/dist/plugin/skills/apt-run/SKILL.md +1 -0
- package/dist/plugin/skills/apt-scan/SKILL.md +1 -0
- package/dist/plugin/skills/apt-setup/SKILL.md +1 -0
- package/dist/plugin/skills/apt-ship/SKILL.md +6 -5
- package/dist/plugin/skills/apt-stress-test/SKILL.md +1 -0
- package/dist/plugin/skills/apt-terminal/SKILL.md +1 -0
- package/dist/plugin/skills/apt-update/SKILL.md +5 -0
- package/dist/plugin/skills/apt-verify/SKILL.md +1 -0
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +1 -0
- package/dist/types/config.d.ts +85 -0
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +9 -1
- package/prompts/coder.md +2 -0
- package/prompts/conductor-status-check.md +23 -0
- package/prompts/conductor-sub-agent.md +57 -0
- package/prompts/conductor-system.md +172 -0
- package/prompts/planner.md +12 -0
- package/prompts/spec_writer.md +9 -0
- package/skills/apt/SKILL.md +1 -0
- package/skills/apt-close-task/SKILL.md +32 -1
- package/skills/apt-debug/SKILL.md +39 -6
- package/skills/apt-debug/appendices/diagnose-discipline.md +119 -0
- package/skills/apt-diagram/SKILL.md +342 -0
- package/skills/apt-diagram/appendices/design-discipline.md +97 -0
- package/skills/apt-discuss/SKILL.md +25 -0
- package/skills/apt-discuss/appendices/grill-discipline.md +104 -0
- package/skills/apt-discuss/appendices/zoom-out-helper.md +79 -0
- package/skills/apt-execute/SKILL.md +48 -5
- package/skills/apt-execute/appendices/tdd-mode.md +107 -0
- package/skills/apt-improve/DEEPENING.md +84 -0
- package/skills/apt-improve/INTERFACE-DESIGN.md +97 -0
- package/skills/apt-improve/LANGUAGE.md +104 -0
- package/skills/apt-improve/SKILL.md +141 -0
- package/skills/apt-plan/SKILL.md +159 -4
- package/skills/apt-plan/adapters/conductor.md +98 -0
- package/skills/apt-planner.md +42 -1
- package/skills/apt-pr-review/SKILL.md +46 -16
- package/skills/apt-prototype/LOGIC.md +109 -0
- package/skills/apt-prototype/SKILL.md +143 -0
- package/skills/apt-prototype/UI.md +90 -0
- package/skills/apt-quick/SKILL.md +30 -0
- package/skills/apt-review/SKILL.md +2 -0
- package/skills/apt-run/SKILL.md +32 -4
- package/skills/apt-setup/SKILL.md +130 -2
- package/skills/apt-ship/SKILL.md +63 -1
- package/skills/apt-spar/SKILL.md +290 -0
- package/skills/apt-triage/AGENT-BRIEF.md +84 -0
- package/skills/apt-triage/OUT-OF-SCOPE.md +75 -0
- package/skills/apt-triage/SKILL.md +169 -0
- package/skills/apt-verify/SKILL.md +3 -0
- package/skills/apt-verify-proof/SKILL.md +3 -0
- package/skills/apt-watch-ci/SKILL.md +163 -0
- package/skills/apt-zoom-out/SKILL.md +130 -0
- package/src/cli/ci-watch/lock.mjs +178 -0
- package/src/cli/ci-watch/state.mjs +103 -0
- package/src/cli/ci-watch/stop-matrix.mjs +181 -0
- package/src/cli/cli-wrappers/ci-watch.mjs +9 -0
- package/src/cli/commands/adr.mjs +243 -0
- package/src/cli/commands/ci-watch.mjs +503 -0
- package/src/cli/commands/commit.mjs +27 -8
- package/src/cli/commands/context.mjs +244 -0
- package/src/cli/commands/event.mjs +131 -24
- package/src/cli/commands/host-detect.mjs +33 -7
- package/src/cli/commands/modes.mjs +216 -0
- package/src/cli/commands/route.mjs +1 -1
- package/src/cli/commands/task.mjs +430 -170
- package/src/cli/commands/tokens.mjs +157 -6
- package/src/cli/commands/triage.mjs +286 -0
- package/src/cli/config/post-merge-sweep.mjs +49 -3
- package/src/cli/consistency/registry.mjs +14 -0
- package/src/cli/coordination/agent-identity.mjs +12 -0
- package/src/cli/coordination/auto-emit-artifact-ready.mjs +96 -0
- package/src/cli/coordination/event-log.mjs +73 -2
- package/src/cli/coordination/event-schema.d.ts +13 -0
- package/src/cli/coordination/event-schema.mjs +174 -0
- package/src/cli/coordination/store.mjs +14 -0
- package/src/cli/dispatch.mjs +15 -1
- package/src/cli/gate/registry.mjs +14 -0
- package/src/cli/help.mjs +3 -2
- package/src/cli/host/detect.mjs +5 -0
- package/src/cli/roadmap/conductor-view.d.ts +10 -0
- package/src/cli/roadmap/conductor-view.mjs +31 -0
- package/src/cli/route/envelope.mjs +140 -106
- package/src/cli/route/skill-discover.mjs +14 -1
- package/src/cli/skill-author/contract.mjs +7 -0
- package/src/cli/task/ids.mjs +15 -13
- package/src/cli/task/worktree-cleanup.mjs +191 -9
- package/templates/adr-format.md +56 -0
- package/templates/config.json +4 -0
- package/templates/context-format.md +34 -0
|
@@ -9,6 +9,7 @@ user_invocable: true
|
|
|
9
9
|
internal: false
|
|
10
10
|
spawns_agent: false
|
|
11
11
|
agent_name: null
|
|
12
|
+
task_context: require-existing
|
|
12
13
|
default_execution_mode: auto
|
|
13
14
|
execution_modes:
|
|
14
15
|
- auto
|
|
@@ -288,6 +289,8 @@ Capture the PR URL from the output into `pr_url` (for example, the last line of
|
|
|
288
289
|
node packages/framework/bin/apt-tools.mjs task update . --id {task-id} --pr-url {PR_URL}
|
|
289
290
|
```
|
|
290
291
|
|
|
292
|
+
This same call **atomically flips `lifecycle_phase` from `reviewing` to `shipped-pending-merge`** when the task is in `reviewing` and no explicit `--lifecycle-phase` flag is passed. Section 6 is now the single load-bearing step that both records the PR and transitions the lifecycle; Section 8 below documents the semantics but no longer issues a separate command.
|
|
293
|
+
|
|
291
294
|
Display the resolution so users see which branch/base was used:
|
|
292
295
|
|
|
293
296
|
```
|
|
@@ -338,7 +341,7 @@ suggest_mode=$(jq -r '.pr_review.suggest_after_ship // "always"' .aperant/config
|
|
|
338
341
|
```
|
|
339
342
|
[APT:ship] Run /apt:pr-review --pr {pr_number} now for deep multi-agent review? [Y/n]
|
|
340
343
|
```
|
|
341
|
-
On `Y` (or empty enter), invoke `/apt:pr-review --pr {pr_number}` inline
|
|
344
|
+
On `Y` (or empty enter), invoke `/apt:pr-review --pr {pr_number}` inline — the task has already been flipped to `shipped-pending-merge` atomically by the `--pr-url` recording in Section 6, so the deep-review hint does NOT need to block on Section 8. On `N` or any other response, proceed silently to Section 8.
|
|
342
345
|
|
|
343
346
|
- **`never`** — silent. Proceed directly to Section 8.
|
|
344
347
|
|
|
@@ -346,11 +349,9 @@ suggest_mode=$(jq -r '.pr_review.suggest_after_ship // "always"' .aperant/config
|
|
|
346
349
|
|
|
347
350
|
## 8. Transition lifecycle to `shipped-pending-merge` (C56 B5)
|
|
348
351
|
|
|
349
|
-
Ship is NOT the final closer. The PR has just been opened — it won't merge for minutes, hours, or days, and no agent will be present on merge.
|
|
352
|
+
Ship is NOT the final closer. The PR has just been opened — it won't merge for minutes, hours, or days, and no agent will be present on merge. The task lifecycle is now `shipped-pending-merge` — the intermediate state between `reviewing` and `completed`. `/apt:close-task` runs post-merge (either manually via `/apt:close-task --all` or by the user when they return to the repo) and performs the actual closeout: phase flip, documentation narration, worktree GC, per-PR config strip, task archive.
|
|
350
353
|
|
|
351
|
-
|
|
352
|
-
node packages/framework/bin/apt-tools.mjs task update . --id {task-id} --lifecycle-phase shipped-pending-merge
|
|
353
|
-
```
|
|
354
|
+
Section 6 already performed this transition atomically as part of `task update --pr-url`. This section documents the semantics; no separate command is required.
|
|
354
355
|
|
|
355
356
|
The task stays in `state.active_tasks[*]` with `lifecycle_phase: "shipped-pending-merge"`. Do NOT call `task close` here — that would mark it `completed` before the PR is actually merged, producing the same artifact drift C56 was built to eliminate.
|
|
356
357
|
|
|
@@ -9,6 +9,7 @@ user_invocable: true
|
|
|
9
9
|
internal: false
|
|
10
10
|
spawns_agent: false
|
|
11
11
|
agent_name: null
|
|
12
|
+
task_context: none
|
|
12
13
|
default_execution_mode: auto
|
|
13
14
|
execution_modes:
|
|
14
15
|
- auto
|
|
@@ -33,6 +34,8 @@ The user invoked `/apt:update` because the statusline showed one of:
|
|
|
33
34
|
- `? /apt:update` (dim): package not yet published — you can still re-run the install to refresh from source.
|
|
34
35
|
|
|
35
36
|
The cache file is at `~/.cache/aperant/apt-update-check.json`. It contains `runtimes`, `framework.installed_version`, `framework.latest_version`, `update_available`, `dev_install_ahead`, `not_published`, `stale_files_total`, and per-runtime `stale_files`.
|
|
37
|
+
|
|
38
|
+
**Scope boundary (0.6.1).** `apt:update` refreshes installed runtime files (skills, agents, hooks) only — it does NOT reconcile `.aperant/config.json` against the shipped template. Schema drift (new keys added between framework versions, deprecated values, etc.) is detected and handled at the next `apt-tools init` call: in non-TTY mode `init` exits 2 with a `requires_input` envelope when a Class A setting is unresolved; in TTY mode the upgrade gate prompts for the missing keys before running the runtime install. If you suspect the user's config is out of date, point them at `apt-tools init . --accept-new-defaults` (Class B fills) or `apt-tools init . --yes` (full silent fill); a no-drift run returns `{"status":"up_to_date"}` without re-installing anything.
|
|
36
39
|
</context>
|
|
37
40
|
|
|
38
41
|
<process>
|
|
@@ -67,6 +70,8 @@ Build the flags list from the runtime ids (e.g. `--claude --codex`) and run:
|
|
|
67
70
|
node .aperant/deps/node_modules/@aperant/framework/bin/apt-tools.mjs init . <flags>
|
|
68
71
|
```
|
|
69
72
|
|
|
73
|
+
**Do NOT add `--yes`, `--solo`, `--team`, or any other Class A flag.** This command is meant to refresh runtime files only — adding `--yes` triggers a config schema migration that can silently flip `share.visibility` to `solo` and re-write `.gitignore`, which is exactly the 0.6.0/0.6.1 dogfood bug. If `init` returns a `requires_input` envelope (schema drift), surface it to the user verbatim and stop; let them decide team vs solo with the explicit flag. From 0.6.4 onward `--yes` infers visibility from existing git tracking, but the skill must still not add it — keep this command scoped to runtime refresh.
|
|
74
|
+
|
|
70
75
|
Parse the init JSON. Capture for each runtime:
|
|
71
76
|
- `install_root` (shortened to the basename, e.g. `.claude`)
|
|
72
77
|
- `file_count`
|
package/dist/types/config.d.ts
CHANGED
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/** Orchestration mode — how the framework delegates work across phases */
|
|
8
8
|
export type OrchestrationMode = 'auto' | 'agent-team' | 'sub-agents' | 'sequential';
|
|
9
|
+
/** Track-specific orchestration overrides — roundtable 2026-05-14 R7 */
|
|
10
|
+
export interface PerTrackOrchestrationConfig {
|
|
11
|
+
/** QUICK track: small fix / typo / single-file edit. Default 'sequential'. */
|
|
12
|
+
quick?: OrchestrationMode;
|
|
13
|
+
/** STANDARD track: normal feature work. Default 'sequential' per R2. */
|
|
14
|
+
standard?: OrchestrationMode;
|
|
15
|
+
/** DEEP track: multi-package refactor, schema, security. Default 'auto'. */
|
|
16
|
+
deep?: OrchestrationMode;
|
|
17
|
+
}
|
|
9
18
|
/** Orchestration preferences — how multi-agent workflows are executed */
|
|
10
19
|
export interface OrchestrationConfig {
|
|
11
20
|
/** How pipeline phases are delegated (plan → execute → verify → review) */
|
|
@@ -14,6 +23,23 @@ export interface OrchestrationConfig {
|
|
|
14
23
|
review_mode: OrchestrationMode;
|
|
15
24
|
/** How roundtable debates are orchestrated (apt:roundtable 10 agents) */
|
|
16
25
|
debate_mode: OrchestrationMode;
|
|
26
|
+
/**
|
|
27
|
+
* Per-track phase_delegation overrides. When a `--track <quick|standard|deep>`
|
|
28
|
+
* flag is passed to `apt-tools reconcile` AND `per_track[track]` is set, the
|
|
29
|
+
* reconciler uses that value as the requested mode for `phase_delegation`.
|
|
30
|
+
* When unset (the default), the resolver falls back to the global
|
|
31
|
+
* `phase_delegation` field — backward-compatible.
|
|
32
|
+
*
|
|
33
|
+
* Initial defaults (roundtable 2026-05-14 R7):
|
|
34
|
+
* per_track.quick = 'sequential'
|
|
35
|
+
* per_track.standard = 'sequential' (R2 — verify uses de-anchored re-read)
|
|
36
|
+
* per_track.deep = 'auto' (R4 status quo, resolves to agent-team)
|
|
37
|
+
*
|
|
38
|
+
* Exit condition documented in REPORT.md: if STANDARD verify quality drops
|
|
39
|
+
* >0.5 points across 10+ tasks, flip `per_track.standard` to `'sub-agents'`
|
|
40
|
+
* (R3 — the named fallback).
|
|
41
|
+
*/
|
|
42
|
+
per_track?: PerTrackOrchestrationConfig;
|
|
17
43
|
}
|
|
18
44
|
/** Capabilities reported by host-detect */
|
|
19
45
|
export interface HostCapabilities {
|
|
@@ -144,8 +170,12 @@ export interface AperantConfig {
|
|
|
144
170
|
router?: RouterConfig;
|
|
145
171
|
/** PR-review authorship + round budget (R4 + R5) */
|
|
146
172
|
pr_review?: PrReviewConfig;
|
|
173
|
+
/** Post-ship CI watcher — `/apt:watch-ci` (C28 / D-07) */
|
|
174
|
+
ci_watch?: CiWatchConfig;
|
|
147
175
|
/** TDD Iron Law — opt-in red-green-refactor enforcement (C3) */
|
|
148
176
|
tdd?: TddConfig;
|
|
177
|
+
/** Diagram skill defaults (apt:diagram) — render mode + MCP consent */
|
|
178
|
+
diagram?: DiagramConfig;
|
|
149
179
|
}
|
|
150
180
|
/**
|
|
151
181
|
* TDD Iron Law configuration (C3).
|
|
@@ -158,6 +188,29 @@ export interface TddConfig {
|
|
|
158
188
|
/** When true, enforce test-first commit order per subtask */
|
|
159
189
|
iron_law: boolean;
|
|
160
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Diagram skill configuration (apt:diagram v1).
|
|
193
|
+
*
|
|
194
|
+
* `mode` is the persisted default render mode — `file` writes a local
|
|
195
|
+
* `.excalidraw` JSON, `mcp` dispatches to a live Excalidraw MCP canvas.
|
|
196
|
+
* The skill's `--mode=...` invocation flag overrides this at call time.
|
|
197
|
+
*
|
|
198
|
+
* `mcpConsent` is the per-host consent record for MCP mode. Default
|
|
199
|
+
* `null` means no host has been granted consent yet — the skill must
|
|
200
|
+
* prompt and persist on the first MCP-mode invocation. The same host
|
|
201
|
+
* does not re-prompt; a different host invalidates the existing record
|
|
202
|
+
* and re-prompts.
|
|
203
|
+
*/
|
|
204
|
+
export interface DiagramConfig {
|
|
205
|
+
/** Resolved default render mode (overridable per-call by --mode=...) */
|
|
206
|
+
mode: 'file' | 'mcp';
|
|
207
|
+
/** Per-host MCP consent record; null means not yet asked */
|
|
208
|
+
mcpConsent: {
|
|
209
|
+
host: string;
|
|
210
|
+
decision: 'granted' | 'denied';
|
|
211
|
+
grantedAt: string;
|
|
212
|
+
} | null;
|
|
213
|
+
}
|
|
161
214
|
/** Per-host LLM provider settings for router Stage 2 classification */
|
|
162
215
|
export interface RouterLLMProviderConfig {
|
|
163
216
|
/** CLI command to invoke (argv[0]). e.g. "claude", "codex", "gemini" */
|
|
@@ -218,4 +271,36 @@ export interface PrReviewConfig {
|
|
|
218
271
|
*/
|
|
219
272
|
suggest_after_ship?: 'always' | 'ask' | 'never';
|
|
220
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Post-ship CI watcher config (C28 / D-07, D-08).
|
|
276
|
+
*
|
|
277
|
+
* `/apt:watch-ci` polls a freshly-shipped PR's CI on a recurring tick,
|
|
278
|
+
* auto-fixes red checks from first red, pushes the fix, and reschedules
|
|
279
|
+
* itself — bounded by a 5-attempt / 4h wall budget and a 10-trigger stop
|
|
280
|
+
* matrix. See `.aperant/context/notes/framework-post-ship-ci-watcher.md`
|
|
281
|
+
* for the locked D-01..D-08 decisions.
|
|
282
|
+
*/
|
|
283
|
+
export interface CiWatchConfig {
|
|
284
|
+
/**
|
|
285
|
+
* Post-ship arming policy controlled by `/apt:ship` Section 7.2:
|
|
286
|
+
* 'auto' — arm the watcher automatically (the default on cron-capable
|
|
287
|
+
* hosts: Claude Code, Pi). On non-cron hosts (Codex, Gemini,
|
|
288
|
+
* OpenCode, etc.) `auto` creates the state file but does not
|
|
289
|
+
* register a host cron; the user advances via `/apt:watch-ci
|
|
290
|
+
* --tick`.
|
|
291
|
+
* 'ask' — prompt `[Y/n]` after ship. Autonomy=3 degrades 'ask' → 'auto'
|
|
292
|
+
* for one fewer prompt in unattended chains.
|
|
293
|
+
* 'never' — silent (the default on non-cron hosts).
|
|
294
|
+
* Absent → ship hook derives the default from host capability.
|
|
295
|
+
*/
|
|
296
|
+
after_ship?: 'auto' | 'ask' | 'never';
|
|
297
|
+
/**
|
|
298
|
+
* On all-green CI, auto-merge the PR via `gh pr merge --auto --squash`.
|
|
299
|
+
* Default `false` — the watcher prints a merge hint and leaves the merge
|
|
300
|
+
* decision to the user (matches the user's stated rhythm). Flip to `true`
|
|
301
|
+
* once a calendar week of clean post-launch usage shows zero false-green
|
|
302
|
+
* merges (D-08 kill criteria).
|
|
303
|
+
*/
|
|
304
|
+
auto_merge_on_green?: boolean;
|
|
305
|
+
}
|
|
221
306
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAA;AAEnF,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IACnC,2EAA2E;IAC3E,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,0EAA0E;IAC1E,WAAW,EAAE,iBAAiB,CAAA;IAC9B,yEAAyE;IACzE,WAAW,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAA;AAEnF,wEAAwE;AACxE,MAAM,WAAW,2BAA2B;IAC3C,8EAA8E;IAC9E,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,4EAA4E;IAC5E,IAAI,CAAC,EAAE,iBAAiB,CAAA;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IACnC,2EAA2E;IAC3E,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,0EAA0E;IAC1E,WAAW,EAAE,iBAAiB,CAAA;IAC9B,yEAAyE;IACzE,WAAW,EAAE,iBAAiB,CAAA;IAC9B;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,EAAE,2BAA2B,CAAA;CACvC;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,+GAA+G;IAC/G,kBAAkB,EAAE,OAAO,CAAA;CAC3B;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,IAAI,CAAA;IACZ,OAAO,EAAE,aAAa,CAAA;IACtB,IAAI,EAAE;QACL,GAAG,EAAE,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;QAC3E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,YAAY,EAAE,gBAAgB,CAAA;KAC9B,CAAA;CACD;AAED,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACvB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAA;AAEnF,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,SAAS,CAAA;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,SAAS,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;IAC7F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC9B,2EAA2E;IAC3E,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACtB,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAA;CACnB;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACzB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAA;IAChB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,2BAA2B,EAAE,MAAM,CAAA;CACnC;AAED,gDAAgD;AAChD,MAAM,WAAW,QAAQ;IACxB,kDAAkD;IAClD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,6DAA6D;IAC7D,6BAA6B,EAAE,MAAM,CAAA;IACrC,kDAAkD;IAClD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,+CAA+C;IAC/C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,mDAAmD;AACnD,MAAM,MAAM,WAAW,GACpB,SAAS,GACT,aAAa,GACb,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,CAAA;AAEZ,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,WAAW,CAAA;IACzB,QAAQ,EAAE,cAAc,CAAA;IACxB,EAAE,EAAE,QAAQ,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE;QACb,WAAW,EAAE,OAAO,CAAA;QACpB,cAAc,EAAE,MAAM,EAAE,CAAA;QACxB,gBAAgB,EAAE,OAAO,CAAA;QACzB,cAAc,EAAE,MAAM,CAAA;QACtB,MAAM,EAAE,OAAO,CAAA;KACf,CAAA;IACD,WAAW,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,MAAM,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;QACjE,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAA;QAC5B,kBAAkB,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;QAC1D,YAAY,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KACvE,CAAA;IACD,QAAQ,EAAE;QACT,WAAW,EAAE,OAAO,CAAA;QACpB,WAAW,EAAE,OAAO,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,OAAO,CAAA;KACtB,CAAA;IACD,WAAW,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,YAAY,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAA;QAC7D,sBAAsB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;KACnD,CAAA;IACD,yEAAyE;IACzE,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,oDAAoD;IACpD,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,gEAAgE;IAChE,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,aAAa,CAAA;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACzB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC7B,wEAAwE;IACxE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,4DAA4D;IAC5D,UAAU,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAA;QAC9B,SAAS,EAAE,MAAM,CAAA;KACjB,GAAG,IAAI,CAAA;CACR;AAED,uEAAuE;AACvE,MAAM,WAAW,uBAAuB;IACvC,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+DAA+D;IAC/D,SAAS,EAAE;QACV,aAAa,CAAC,EAAE,uBAAuB,CAAA;QACvC,KAAK,CAAC,EAAE,uBAAuB,CAAA;QAC/B,YAAY,CAAC,EAAE,uBAAuB,CAAA;QACtC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;KAClC,CAAA;CACD;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,CAAC,EAAE,eAAe,CAAA;CACrB;AAED,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;AAElE,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC9B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,sBAAsB,CAAA;IAC5C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC,CAAA;IAC3D;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAA;CAC/C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IACrC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aperant/framework",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "AI coding framework — composable skills for planning, executing, verifying, and reviewing code with any LLM provider. Works as Claude Code commands, Codex tasks, or programmatically.",
|
|
5
5
|
"author": "Mikalsen AI <hello@mikalsen.ai>",
|
|
6
6
|
"type": "module",
|
|
@@ -36,6 +36,14 @@
|
|
|
36
36
|
"types": "./dist/standalone/index.d.ts",
|
|
37
37
|
"import": "./dist/standalone/index.js"
|
|
38
38
|
},
|
|
39
|
+
"./coordination/event-schema": {
|
|
40
|
+
"types": "./src/cli/coordination/event-schema.d.ts",
|
|
41
|
+
"import": "./src/cli/coordination/event-schema.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./roadmap/conductor-view": {
|
|
44
|
+
"types": "./src/cli/roadmap/conductor-view.d.ts",
|
|
45
|
+
"import": "./src/cli/roadmap/conductor-view.mjs"
|
|
46
|
+
},
|
|
39
47
|
"./design/scan": {
|
|
40
48
|
"import": "./src/cli/design/scan.mjs"
|
|
41
49
|
},
|
package/prompts/coder.md
CHANGED
|
@@ -4,6 +4,8 @@ You are continuing work on an autonomous development task. This is a **FRESH con
|
|
|
4
4
|
|
|
5
5
|
**Key Principle**: Work on ONE subtask at a time. Complete it. Verify it. Move on.
|
|
6
6
|
|
|
7
|
+
**TDD mode (apt:execute):** if your kickoff prompt indicates `tdd_active === true` (set by `--tdd`, `coding.tdd_default`, or the legacy `tdd.iron_law` config), the red-green-refactor sequence is mandatory and audited by gate G9. Load the vertical-tracer-bullet discipline from `packages/framework/skills/apt-execute/appendices/tdd-mode.md` and follow its 5 rules. QUICK-routed tasks are hard-exempt regardless of flag or config (Fast Path Guarantee, ID-05).
|
|
8
|
+
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
## CRITICAL: ENVIRONMENT AWARENESS
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Conductor — Tap-on-Shoulder Status Check Template
|
|
2
|
+
|
|
3
|
+
> NOTE: Phase 1 does not inject this prompt. It is the canonical template that Phase 3's tap-on-shoulder protocol will consume. The `{request_id}` substitution is the only dynamic value.
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Status check (request_id={request_id}):
|
|
9
|
+
|
|
10
|
+
Reply tagged [status:{request_id}] with:
|
|
11
|
+
1. One-line summary of what you just did.
|
|
12
|
+
2. One-line summary of what you intend to do next.
|
|
13
|
+
3. Anything you are blocked on or need from the user.
|
|
14
|
+
|
|
15
|
+
Keep your reply under 100 tokens. Do not paste transcripts.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Guardrails (Phase 3 consumer contract)
|
|
19
|
+
|
|
20
|
+
- Inject only after a quiescence check ("no pending tool prompt", "no pending permission ask") — see `claude-code/quiescence.ts`.
|
|
21
|
+
- Apply a timeout window (default 60s); ignore ambiguous / untagged replies.
|
|
22
|
+
- The reply is **informational only** — never executed as a command without a separate cross-check (R7).
|
|
23
|
+
- Bound the captured reply to ~100-300 tokens. Never capture transcripts.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Conductor Sub-Agent — Reviewer System Prompt
|
|
2
|
+
|
|
3
|
+
You are a **conductor sub-agent reviewer**: a single-pass parallel reviewer spawned by the Conductor's sub-agent queue (via the sparring engine) to evaluate a fleet event and recommend whether the Conductor should log an intent.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- You run on a **frontier model** (Anthropic Opus 4.7 1M, OpenAI GPT-5.4/5.5 frontier, Google Gemini latest frontier). Cheap-model fallback is forbidden.
|
|
8
|
+
- You have **no project filesystem access**. You do not call Read, Glob, or Grep. You see only the event payload, the prior context the Conductor handed you, and the cross-check tool.
|
|
9
|
+
- You return a structured `findings` blob (severity / title / body / ref) — the same shape the sparring engine's lens reviewers return.
|
|
10
|
+
|
|
11
|
+
## Your one tool: `crossCheck`
|
|
12
|
+
|
|
13
|
+
You can demand ground truth via the deterministic cross-check primitive:
|
|
14
|
+
|
|
15
|
+
- `crossCheckFileClaim(file, sinceRef)` → did `git diff --name-only sinceRef -- file` produce output?
|
|
16
|
+
- `crossCheckPhaseComplete(taskDir)` → is the last commit touching `taskDir` recent?
|
|
17
|
+
- `crossCheckPRClaim(prUrl)` → does `gh pr view prUrl --json state` return a live PR?
|
|
18
|
+
|
|
19
|
+
If your evaluation depends on an agent's self-reported claim ("I finished the spec", "the PR is open", "I edited file X"), call `crossCheck` before recommending action. **You can be confidently wrong about completion claims because you only see text.** The cross-check is the floor under hallucination.
|
|
20
|
+
|
|
21
|
+
## What to evaluate
|
|
22
|
+
|
|
23
|
+
The Conductor hands you:
|
|
24
|
+
|
|
25
|
+
- The triggering event (e.g. `phase.changed{ to: 'idle' }`, `artifact.ready`, `budget.exceeded`).
|
|
26
|
+
- The enrolled terminal's tier (A / B / C) and current autonomy setting.
|
|
27
|
+
- Relevant prior intents from this terminal in the recent window.
|
|
28
|
+
|
|
29
|
+
Recommend one of:
|
|
30
|
+
|
|
31
|
+
1. **No-op** — the event is routine; no intent needed. (severity: `low`, title: `routine event`)
|
|
32
|
+
2. **Suggest** — the Conductor should log an intent suggesting a follow-up action. Include the action and reasoning. (severity: `medium`, title: `<suggested action>`)
|
|
33
|
+
3. **Escalate** — the event signals an error / blocked state / security concern. The Conductor should surface this prominently. (severity: `high`, title: `<concern>`)
|
|
34
|
+
4. **Cross-check failed** — you called `crossCheck` and the claim did not verify. (severity: `high`, title: `cross-check failed: <claim>`)
|
|
35
|
+
|
|
36
|
+
## Output shape
|
|
37
|
+
|
|
38
|
+
Return a JSON object with a `findings` array:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"findings": [
|
|
43
|
+
{
|
|
44
|
+
"severity": "low" | "medium" | "high",
|
|
45
|
+
"title": "short title",
|
|
46
|
+
"body": "1-3 sentence reasoning",
|
|
47
|
+
"ref": "<optional event_id or file path>"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The sparring engine parses this with the same `FindingsBlobSchema` it uses for lens reviewers. One finding per recommendation. Multiple findings are allowed when an event triggers multiple recommendations.
|
|
54
|
+
|
|
55
|
+
## Style
|
|
56
|
+
|
|
57
|
+
Be terse. Quote the cross-check evidence verbatim when it disagrees with the agent's claim. Do not author code. Do not propose diffs.
|