@event4u/agent-config 8.10.0 → 8.11.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 +148 -0
- package/README.md +5 -5
- package/dist/agent-src/commands/challenge-me/vision.md +121 -32
- package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
- package/dist/agent-src/commands/commit/in-chunks.md +1 -1
- package/dist/agent-src/commands/commit.md +2 -1
- package/dist/agent-src/commands/cost/report.md +2 -1
- package/dist/agent-src/commands/feature/dev.md +4 -4
- package/dist/agent-src/commands/humanize.md +101 -0
- package/dist/agent-src/commands/jira-ticket.md +2 -2
- package/dist/agent-src/commands/memory/load.md +15 -0
- package/dist/agent-src/commands/optimize/project.md +12 -0
- package/dist/agent-src/commands/roadmap/create.md +12 -11
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/worktree/cleanup.md +22 -17
- package/dist/agent-src/commands/worktree/create.md +3 -1
- package/dist/agent-src/commands/worktree/status.md +12 -0
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -3
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +14 -0
- package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
- package/dist/agent-src/rules/autonomous-execution.md +7 -37
- package/dist/agent-src/rules/broken-access-control.md +7 -45
- package/dist/agent-src/rules/code-comment-discipline.md +148 -0
- package/dist/agent-src/rules/context-hygiene.md +14 -0
- package/dist/agent-src/rules/delegation-policy.md +10 -8
- package/dist/agent-src/rules/design-fidelity.md +4 -0
- package/dist/agent-src/rules/git-history-discipline.md +4 -79
- package/dist/agent-src/rules/legal-safety-floor.md +11 -55
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
- package/dist/agent-src/rules/think-before-action.md +10 -0
- package/dist/agent-src/rules/verify-before-complete.md +12 -0
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +13 -12
- package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
- package/dist/agent-src/skills/api-design/SKILL.md +7 -5
- package/dist/agent-src/skills/api-testing/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
- package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
- package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
- package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
- package/dist/agent-src/skills/design-review/SKILL.md +23 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +2 -0
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +7 -9
- package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
- package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
- package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
- package/dist/agent-src/skills/laravel/SKILL.md +14 -1
- package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
- package/dist/agent-src/skills/performance/SKILL.md +1 -1
- package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
- package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
- package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +27 -20
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
- package/dist/agent-src/templates/agent-settings.md +3 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
- package/dist/agent-src/templates/roadmaps.md +14 -0
- package/dist/cli/commands/recordTriggerEval.js +4 -14
- package/dist/cli/commands/recordTriggerEval.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +147 -78
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +13 -10
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +14 -9
- package/dist/install/install.mjs +12 -7
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
- package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
- package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
- package/dist/scripts/condense.js +12 -2
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +5 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +24 -3
- package/docs/architecture.md +3 -3
- package/docs/benchmark.md +51 -0
- package/docs/catalog.md +8 -5
- package/docs/command-flows.md +2 -1
- package/docs/contracts/ai-council-config.md +92 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/evidence-based-pruning.md +1 -0
- package/docs/contracts/hook-architecture-v1.md +25 -0
- package/docs/contracts/kernel-membership.md +35 -0
- package/docs/contracts/measurement-baseline.md +1 -0
- package/docs/contracts/release-sizing.md +22 -0
- package/docs/contracts/write-engine.md +38 -1
- package/docs/customization.md +12 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
- package/docs/decisions/ADR-028-root-layout.md +1 -1
- package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
- package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
- package/docs/decisions/INDEX.md +11 -9
- package/docs/design/cross-model-parity-eval.md +82 -0
- package/docs/design/length-neutral-judge-rerun.md +92 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +2 -2
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
- package/docs/guidelines/code-clarity.md +106 -1
- package/docs/guidelines/design-antipatterns.md +20 -0
- package/docs/guidelines/php/php-coding-patterns.md +12 -2
- package/docs/proof.md +20 -14
- package/docs/wedge/production-validator/production-validator.md +27 -0
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +29 -9
- package/src/scripts/_cli/cmd_doctor.ts +34 -1
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
- package/src/scripts/_lib/knowledge_global.ts +6 -2
- package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
- package/src/scripts/_lib/lexical_index.ts +15 -2
- package/src/scripts/_lib/orchestration_record.ts +14 -0
- package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
- package/src/scripts/ai_council/chairman.ts +90 -0
- package/src/scripts/ai_council/clients.ts +18 -3
- package/src/scripts/ai_council/config.ts +157 -0
- package/src/scripts/ai_council/debate_gates.ts +89 -0
- package/src/scripts/ai_council/orchestrator.ts +65 -2
- package/src/scripts/ai_council/prompts.ts +121 -11
- package/src/scripts/ai_council/replay.ts +17 -0
- package/src/scripts/ai_council/stance_tally.ts +184 -0
- package/src/scripts/ai_tells_rules.ts +433 -0
- package/src/scripts/bench_humanizer_eval.ts +240 -0
- package/src/scripts/build_discovery_manifest.ts +6 -0
- package/src/scripts/build_proof.ts +21 -9
- package/src/scripts/check_claims.ts +40 -0
- package/src/scripts/check_rule_invariants.ts +10 -3
- package/src/scripts/condense.ts +16 -2
- package/src/scripts/consumer_matrix.ts +41 -2
- package/src/scripts/council_cli.ts +147 -0
- package/src/scripts/detect_ai_tells.ts +312 -0
- package/src/scripts/install.ts +12 -0
- package/src/scripts/knowledge_global_cli.ts +1 -1
- package/src/scripts/lint_framework_leakage.ts +88 -7
- package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
- package/src/scripts/lint_knowledge_scale.ts +30 -0
- package/src/scripts/lint_originality_shingles.ts +210 -0
- package/src/scripts/orchestration_record.ts +1 -0
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- package/src/scripts/self_review_gate.ts +41 -15
- package/src/scripts/skill_eval_coverage.ts +71 -3
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/trigger_eval_rotation.ts +344 -0
- package/src/scripts/update_counts.ts +5 -17
- package/src/scripts/worktree_cleanup_check.ts +263 -0
- package/src/server/schemas/settings.ts +8 -3
- package/src/scripts/analysis_freshness.ts +0 -362
- package/src/scripts/export_replay_corpus.ts +0 -208
|
@@ -67,7 +67,7 @@ User Input → Controller → Validation → Service → DB/File/External
|
|
|
67
67
|
| Category | What to look for |
|
|
68
68
|
|---|---|
|
|
69
69
|
| **SQL Injection** | Raw queries with concatenation, missing parameter binding |
|
|
70
|
-
| **XSS** | Unescaped output
|
|
70
|
+
| **XSS** | Unescaped template output (Blade `{!! !!}`, JSX `dangerouslySetInnerHTML`, Jinja `|safe`), JSON responses with HTML |
|
|
71
71
|
| **CSRF** | Missing middleware, API endpoints without token verification |
|
|
72
72
|
| **Auth bypass** | Missing policy checks, broken gate logic, `withoutMiddleware()` |
|
|
73
73
|
| **IDOR** | Direct object access without ownership verification |
|
|
@@ -81,14 +81,7 @@ User Input → Controller → Validation → Service → DB/File/External
|
|
|
81
81
|
|
|
82
82
|
### 4. Framework-specific checks
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
- `env()` in non-config files (leaks in debug mode)
|
|
86
|
-
- Debug mode (`APP_DEBUG=true`) in production
|
|
87
|
-
- Missing `$fillable` on models used with `request()->all()`
|
|
88
|
-
- `Route::any()` exposing unintended HTTP methods
|
|
89
|
-
- Missing rate limiting on login/register/password-reset
|
|
90
|
-
- Broadcast channels without proper authorization
|
|
91
|
-
- Missing encryption on sensitive cookie/session data
|
|
84
|
+
→ Laravel-specific checks: see [`laravel`](../laravel/SKILL.md) § Security audit checks.
|
|
92
85
|
|
|
93
86
|
### 5. Dependency audit
|
|
94
87
|
|
|
@@ -99,6 +92,10 @@ User Input → Controller → Validation → Service → DB/File/External
|
|
|
99
92
|
|
|
100
93
|
## Output format
|
|
101
94
|
|
|
95
|
+
1. Emit one entry per vulnerability using the field list below; one finding = one block, never merge.
|
|
96
|
+
2. Category must map to an OWASP Top 10 (or LLM Top 10) bucket; Severity must use Low / Medium / High / Critical with a single Exploitability tag.
|
|
97
|
+
3. Close with a *Recommended Fix Order* ranked by exploitability × blast radius and tag each line with Confidence.
|
|
98
|
+
|
|
102
99
|
For each vulnerability:
|
|
103
100
|
|
|
104
101
|
- **Vulnerability:** concise title
|
|
@@ -147,7 +147,7 @@ search_events(organizationSlug='my-org', naturalLanguageQuery='count of database
|
|
|
147
147
|
- **Skill:** `logging-monitoring` — full monitoring stack (Sentry + Grafana + Loki)
|
|
148
148
|
- **Skill:** `bug-analyzer` — uses Sentry as input for bug investigation
|
|
149
149
|
- **Command:** `/bug-investigate` — fetches Sentry details automatically
|
|
150
|
-
- **Config:** `config/sentry.php` — Sentry DSN and configuration
|
|
150
|
+
- **Config:** the SDK's config surface (`config/sentry.php` in Laravel, `sentry.client.config.ts` in Next.js) — Sentry DSN and configuration
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
## Output format
|
|
@@ -157,7 +157,7 @@ search_events(organizationSlug='my-org', naturalLanguageQuery='count of database
|
|
|
157
157
|
|
|
158
158
|
## Gotcha
|
|
159
159
|
|
|
160
|
-
- Sentry groups errors by stacktrace — different root
|
|
160
|
+
- Sentry groups errors by stacktrace — different root causes may appear as the same issue. Check multiple events.
|
|
161
161
|
- The model tends to analyze only the latest event — check the "Events" tab for patterns across time.
|
|
162
162
|
- Don't use Sentry MCP tools for simple lookups — use the Sentry web UI link instead (saves tokens).
|
|
163
163
|
|
|
@@ -107,6 +107,14 @@ Decide what to create:
|
|
|
107
107
|
|
|
108
108
|
### Step 4: Create or Update
|
|
109
109
|
|
|
110
|
+
> **Anchor exact commands to the transcript, not the journal.** A session
|
|
111
|
+
> journal is a *lossy summary*; a command, path, or flag reconstructed from it
|
|
112
|
+
> can be subtly wrong. Before writing a concrete step (a command, a file path, a
|
|
113
|
+
> config key) into a rule or skill, confirm it against the anchored source
|
|
114
|
+
> transcript — carry a `transcript:` / session anchor on the mined learning so
|
|
115
|
+
> the exact wording is recoverable, and verify against it rather than trusting
|
|
116
|
+
> the summary.
|
|
117
|
+
|
|
110
118
|
- **New rule** → create in `.agent-src.uncondensed/rules/`, follow rule conventions
|
|
111
119
|
- **New skill** → use `skill-writing` skill, create in `.agent-src.uncondensed/skills/`
|
|
112
120
|
- **Update existing** → use `skill-management` skill
|
|
@@ -92,7 +92,7 @@ distinct methods/fields *intended* to be used, OR the source exposes >50 methods
|
|
|
92
92
|
and ≥1 is used, OR a prior hallucination on it, OR local types/README are
|
|
93
93
|
insufficient)** — judged on *intended* use at discovery (still built **before**
|
|
94
94
|
coding). For a card-worthy dependency named in the task: **local-first**
|
|
95
|
-
(`node_modules` / `vendor
|
|
95
|
+
(`node_modules` / `vendor/` README + type defs; the **installed version is ground
|
|
96
96
|
truth**), then the net (registry → repo host → homepage). **Pin the remote ref to
|
|
97
97
|
the installed version — never blind `main`.** Reuse
|
|
98
98
|
[`external-reference-deep-dive`](../../rules/external-reference-deep-dive.md) +
|
|
@@ -106,19 +106,21 @@ Resolve and read the actual class fresh (Step 0). In-codebase → local, no card
|
|
|
106
106
|
|
|
107
107
|
### E. Global cards — leads only (v2, ADR-100)
|
|
108
108
|
|
|
109
|
-
When `knowledge.global_sharing.enabled` (user-global,
|
|
109
|
+
When `knowledge.global_sharing.enabled` (user-global, default on), a matching
|
|
110
110
|
card may exist in the per-user file-first store
|
|
111
|
-
(`~/.event4u/agent-config/knowledge/`), promoted from another project.
|
|
112
|
-
never a build input**:
|
|
113
|
-
|
|
114
|
-
- Load **negative facts + pointers** as leads (`trust: durable`).
|
|
115
|
-
- Load **positive structure** under **"Assumed
|
|
116
|
-
unverified)"** — record
|
|
117
|
-
global …` and **re-confirm
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
111
|
+
(`~/.event4u/agent-config/knowledge/`), promoted from another project. It is a
|
|
112
|
+
**lead, never a build input**:
|
|
113
|
+
|
|
114
|
+
- Load its **negative facts + pointers** as usable leads (`trust: durable`).
|
|
115
|
+
- Load any **positive structure** into the Evidence Report under **"Assumed
|
|
116
|
+
(from card · GLOBAL, unverified)"** — record it with
|
|
117
|
+
`evidence_report.ts add --bucket assumed --origin global …` and **re-confirm it
|
|
118
|
+
against the live source this session** before use (version skew / schema drift
|
|
119
|
+
across projects). Never "Verified" on the global card alone.
|
|
120
|
+
- A `public`/`vendor` card seen in ≥ `auto_promote_threshold` distinct repos
|
|
121
|
+
triggers a one-tap promotion **suggestion** (never silent). `proprietary` cards
|
|
122
|
+
are manual-only and never auto-shared. Record sightings via
|
|
123
|
+
`_lib/knowledge_global_promote.ts record-seen`.
|
|
122
124
|
|
|
123
125
|
## Missing structure → fixed extension workflow
|
|
124
126
|
|
|
@@ -156,21 +158,21 @@ threshold is met, a thin committed card.
|
|
|
156
158
|
|
|
157
159
|
## Evidence v2 — self-building context (heuristics only, never a bypass)
|
|
158
160
|
|
|
159
|
-
Curated project-intelligence (Class A config digests, Class B observed
|
|
160
|
-
Class C learned lessons) may be loaded to inform *where to look* and
|
|
161
|
-
to expect* — but read **for heuristics only** and **never**
|
|
162
|
-
read. A field/endpoint/column/value is still confirmed
|
|
163
|
-
session. v2 capture is **write-only into gitignored
|
|
164
|
-
signal, never silently commit); trust and
|
|
165
|
-
the three classes + memory tiers:
|
|
161
|
+
Curated project-intelligence (Class A config digests, Class B observed
|
|
162
|
+
conventions, Class C learned lessons) may be loaded to inform *where to look* and
|
|
163
|
+
*what convention to expect* — but it is read **for heuristics only** and **never**
|
|
164
|
+
bypasses a fresh structural read. A field/endpoint/column/value is still confirmed
|
|
165
|
+
against a live source this session. v2 capture is **write-only into gitignored
|
|
166
|
+
intake** (the agent may *suggest* a signal, never silently commit); trust and
|
|
167
|
+
commit are always human-gated. Full model + the three classes + memory tiers:
|
|
166
168
|
[`project-intelligence`](../../agent-src/contexts/execution/project-intelligence.md).
|
|
167
169
|
|
|
168
170
|
## Knowledge capture (`api_shape_learned` / `convention_detected` events)
|
|
169
171
|
|
|
170
172
|
A confirmed API/GraphQL shape (§B) or an observed coding convention with
|
|
171
|
-
≥ 2 supporting locations is worth persisting for the team, distinct
|
|
172
|
-
|
|
173
|
-
|
|
173
|
+
≥ 2 supporting locations is worth persisting for the team, distinct from
|
|
174
|
+
the per-session Evidence Report above. Append to the knowledge intake —
|
|
175
|
+
never write a tracked page mid-task:
|
|
174
176
|
|
|
175
177
|
```bash
|
|
176
178
|
./scripts-run src/scripts/emit_knowledge_event --type api_shape_learned \
|
|
@@ -182,7 +184,7 @@ intake — never write a tracked page mid-task:
|
|
|
182
184
|
|
|
183
185
|
`/team-knowledge consolidate` turns accumulated events into
|
|
184
186
|
`agents/knowledge/concepts/` pages as a reviewed batch — see
|
|
185
|
-
[`knowledge-pages`](../../templates/contexts/knowledge-pages.md).
|
|
187
|
+
[`knowledge-pages`](../../agent-src/templates/contexts/knowledge-pages.md).
|
|
186
188
|
|
|
187
189
|
## Gotchas
|
|
188
190
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: subagent-orchestration
|
|
4
|
-
description: "Use when orchestrating implementer/judge subagents —
|
|
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)."
|
|
5
5
|
domain: process
|
|
6
6
|
workspaces:
|
|
7
7
|
- agent-config-maintainer
|
|
@@ -82,11 +82,46 @@ over-scripted prompts that break on first contingency.
|
|
|
82
82
|
- **(d) Pre-declared check-in conditions.** The worker names, at spawn time, the
|
|
83
83
|
conditions under which it will halt and ask ("if login required", "if
|
|
84
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.
|
|
85
94
|
|
|
86
95
|
When to delegate at all is [`delegation-policy`](../../rules/delegation-policy.md);
|
|
87
96
|
the spawn boundary is the [`subagent-spawn-contract`](../../contexts/execution/subagent-spawn-contract.md).
|
|
88
97
|
|
|
89
|
-
##
|
|
98
|
+
## Form gate — deterministic, BEFORE mode selection
|
|
99
|
+
|
|
100
|
+
With auto-dispatch on by default (ADR-117), mode selection happens without
|
|
101
|
+
a human in the loop — so the FORM is decided by a static table first, and
|
|
102
|
+
only then is the specific mode picked inside that form. Static table only:
|
|
103
|
+
no learned routing, no self-modifying selector (rejected, stays rejected).
|
|
104
|
+
|
|
105
|
+
| Task shape (structural signal) | Form | Modes in the form |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| ≥ 2 independent, verifiable slices | parallel | `do-in-parallel`, `do-competitively` |
|
|
108
|
+
| Multi-step cross-wing chain needing filesystem isolation | worktrees | `do-in-worktrees` |
|
|
109
|
+
| Ordered steps with declared dependencies | steps | `do-in-steps` |
|
|
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
|
+
| Single slice below the delegability floor, unstructured, or frontier-priced | none | no dispatch — run in-session |
|
|
112
|
+
|
|
113
|
+
Rules:
|
|
114
|
+
|
|
115
|
+
- The gate consumes the SAME structural signals as
|
|
116
|
+
`auto_dispatch.ts::classifyTask` (slice count, dependency declarations,
|
|
117
|
+
size floor) — it never re-interprets the task text on vibes.
|
|
118
|
+
- Ambiguous shape → `none` (in-session), never a speculative spawn — the
|
|
119
|
+
delegation-policy default.
|
|
120
|
+
- Record the outcome in the telemetry line (`dispatch_mode` field, mode id
|
|
121
|
+
or `none`) so the gate's value is measurable inside the ADR-117
|
|
122
|
+
prove-or-drop window.
|
|
123
|
+
|
|
124
|
+
## The eight modes
|
|
90
125
|
|
|
91
126
|
Each mode has a decision row: when to use, when not, and the expected
|
|
92
127
|
model pairing. Defaults come from
|
|
@@ -178,49 +213,23 @@ migration, public API) where a single judge is too easy to fool.
|
|
|
178
213
|
|
|
179
214
|
### 7. do-in-worktrees
|
|
180
215
|
|
|
181
|
-
Cross-wing or cross-skill chain executed across isolated git
|
|
182
|
-
|
|
183
|
-
the
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
[`finishing-a-development-branch`](../finishing-a-development-branch/SKILL.md).
|
|
216
|
+
Cross-wing or cross-skill chain executed across isolated git worktrees —
|
|
217
|
+
each handoff runs in its own worktree so one step's workspace state never
|
|
218
|
+
leaks into the next. Use for a multi-step cross-wing chain (≥2 senior
|
|
219
|
+
skills, each ≥30 min); not for fast iteration under 30 min (overhead
|
|
220
|
+
dominates). Full handoff shape, example chain, competitive per-candidate
|
|
221
|
+
isolation, and the no-auto-merge Hard Floor →
|
|
222
|
+
[`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 7.
|
|
189
223
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
**Example chain (W3 launch):** `positioning-strategy` (worktree A) →
|
|
201
|
-
`messaging-architecture` (worktree B, consumes positioning's
|
|
202
|
-
`positioning-statement.md`) → `gtm-launch` (worktree C, consumes
|
|
203
|
-
both prior artifacts). Each worktree carries one branch; the chain
|
|
204
|
-
end produces a single integration PR.
|
|
205
|
-
|
|
206
|
-
**Anti-pattern:** do not use for fast iteration loops where each
|
|
207
|
-
step is under ~30 minutes. The branch-creation, context-switch, and
|
|
208
|
-
worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
|
|
209
|
-
or mode 3 (do-in-steps) for those.
|
|
210
|
-
|
|
211
|
-
**Competitive variant — per-candidate isolation.** When mode 5
|
|
212
|
-
(`do-competitively`) is combined with worktrees, each candidate
|
|
213
|
-
implementer runs in its own worktree (so candidates cannot read each
|
|
214
|
-
other's open files or branch state). Selection rules:
|
|
215
|
-
|
|
216
|
-
- **No auto-merge.** The orchestrator never merges a candidate
|
|
217
|
-
branch. Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md) —
|
|
218
|
-
applies even under standing autonomy. ADR-005 records the reasoning.
|
|
219
|
-
- **Ranked presentation.** Judge ranks candidates (1..N) with a
|
|
220
|
-
one-line justification per rank; user picks the winner.
|
|
221
|
-
- **Loser worktrees stay.** The orchestrator does not delete losing
|
|
222
|
-
worktrees automatically — the user keeps the option to harvest a
|
|
223
|
-
partial idea before cleanup.
|
|
224
|
+
### 8. do-with-live-app-judge (gated — UI-heavy tasks)
|
|
225
|
+
|
|
226
|
+
Implementer ships the change AND starts the dev server; the judge drives
|
|
227
|
+
the RUNNING app (Playwright / browser) against a written rubric, never
|
|
228
|
+
reading the diff. Use for UI-heavy change where "looks right in the diff"
|
|
229
|
+
≠ "works in the app"; not for backend/logic (a diff judge is cheaper).
|
|
230
|
+
Experimental until `verdict_changed_outcome` telemetry proves it. Rubric,
|
|
231
|
+
adoption gate, and the async-verifier future candidate →
|
|
232
|
+
[`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 8.
|
|
224
233
|
|
|
225
234
|
## Status taxonomy — every subagent return uses one envelope
|
|
226
235
|
|
|
@@ -256,7 +265,7 @@ Each mode's literal dispatch template lives under
|
|
|
256
265
|
matching prompt at dispatch time and substitutes `{{placeholders}}`.
|
|
257
266
|
Edits to a prompt do not bloat this skill against the 400-line sunset
|
|
258
267
|
trigger; `tests/test_subagent_prompt_loading.py` confirms each of the
|
|
259
|
-
|
|
268
|
+
eight modes resolves to a loadable prompt that cites all four taxonomy
|
|
260
269
|
statuses.
|
|
261
270
|
|
|
262
271
|
## Procedure
|
|
@@ -285,7 +294,7 @@ same context, **stop** and report. Do not improvise.
|
|
|
285
294
|
|
|
286
295
|
### 3. Pick the mode
|
|
287
296
|
|
|
288
|
-
|
|
297
|
+
Run the form gate first, then match task shape to one of the eight modes. When two modes could fit,
|
|
289
298
|
prefer the cheaper one (`do-and-judge` < `do-and-judge-two-stage` <
|
|
290
299
|
`do-in-steps` < `do-in-parallel` < `do-competitively` <
|
|
291
300
|
`judge-with-debate` < `do-in-worktrees`).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "subagent-orchestration",
|
|
3
|
+
"_calibration": "Golden E2E task 2 (road-to-fable-feedback-5 Phase 4c; council 2026-07-10 ranked bad-lite-output delegation second-highest signal/cost). Exercises the never-adopt-unverified Iron Law (delegation-policy) + the escalation path + the telemetry pairing (first_pass_success/escalated per orchestration-telemetry.md § Operationalization). Deterministic `contains` assertions pin the telemetry vocabulary; rubric pins the verification behavior. Baseline: authored 2026-07-10, pending first host-scored run.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "sao-bad-lite-output-escalation",
|
|
7
|
+
"prompt": "You are orchestrating: a lite-tier subagent was dispatched to implement `slugify(title: string): string` (lowercase, spaces to hyphens, strip non-alphanumerics, collapse repeated hyphens). Its return is: `export function slugify(title: string) { return title.toLowerCase().replace(' ', '-'); }` with no tests. Process this return per the orchestration contract and record the dispatch telemetry.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "contains",
|
|
11
|
+
"value": "first_pass_success"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"kind": "contains",
|
|
15
|
+
"value": "escalated"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"kind": "rubric",
|
|
19
|
+
"criterion": "The return is NOT adopted unverified: verification runs against the stated spec and catches at least two planted defects (String.replace with a string only replaces the FIRST space; non-alphanumerics are not stripped; repeated hyphens are not collapsed; no tests). The orchestrator never merges the defective return as-is."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"kind": "rubric",
|
|
23
|
+
"criterion": "After the verification failure the slice is re-dispatched on a higher tier (or corrected with the failure fed back), and the telemetry records escalated=true and first_pass_success=false per the operationalization table (business-logic rework counts as rework; formatting would not). The final adopted output satisfies the full spec."
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "sao-good-return-no-spurious-escalation",
|
|
29
|
+
"prompt": "You are orchestrating: a lite-tier subagent was dispatched to rename the constant `MAX_RETRIES` to `MAX_ATTEMPTS` across a 3-file module. Its return is a diff renaming all 7 occurrences, all references updated, tests still green. Process this return per the orchestration contract and record the dispatch telemetry.",
|
|
30
|
+
"assertions": [
|
|
31
|
+
{
|
|
32
|
+
"kind": "contains",
|
|
33
|
+
"value": "first_pass_success"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"kind": "rubric",
|
|
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
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -185,6 +185,16 @@ Pairs with [`context-hygiene § Read-Loop Detection`](../../rules/context-hygien
|
|
|
185
185
|
6. **Full suite at the end, not between laps.** It is the gate, not
|
|
186
186
|
the feedback loop.
|
|
187
187
|
|
|
188
|
+
**Failure-signature triage — same taxonomy as [`context-hygiene § The 3-Failure Rule`](../../rules/context-hygiene.md#the-3-failure-rule).**
|
|
189
|
+
The **failure signature** = **same target + same error class** (same failing test
|
|
190
|
+
+ same assertion, same lint rule id, same build error). **Same failure signature
|
|
191
|
+
twice → stop and pivot** — don't spend the next lap on a near-identical retry; a
|
|
192
|
+
repeated identical signature means the hypothesis is wrong, not under-applied. A
|
|
193
|
+
**new error signature each attempt = progress** and the counter continues. The
|
|
194
|
+
**hard-blocker classes** (missing credentials, permission denied, spend/quota/rate
|
|
195
|
+
limit, external-service `5xx`) skip retries entirely — surface on first
|
|
196
|
+
occurrence; another lap cannot fix them.
|
|
197
|
+
|
|
188
198
|
**Anti-patterns this loop prevents:**
|
|
189
199
|
|
|
190
200
|
* Editing source to make tests pass when the test was wrong (or
|
|
@@ -141,6 +141,16 @@ Run the project's fastest test target. If the baseline **fails**, stop
|
|
|
141
141
|
and report — ask whether to fix main first or proceed. Never silently
|
|
142
142
|
continue with a red baseline.
|
|
143
143
|
|
|
144
|
+
**Optional `env-bootstrap` entry — stand-up beyond deps.** Some projects need
|
|
145
|
+
more than package install to stand up (start services, seed fixtures, generate
|
|
146
|
+
config). A project MAY declare a single bootstrap entry — an `env-bootstrap`
|
|
147
|
+
target in its runner file (`Taskfile.yml` / `Makefile` / `package.json`
|
|
148
|
+
`scripts`) or a documented equivalent. When one exists, **surface it as the
|
|
149
|
+
suggested next action** after the baseline — suggest, never auto-execute (no new
|
|
150
|
+
autonomous surface). Long-running work then reads one deterministic stand-up
|
|
151
|
+
entry instead of re-deriving it each session. If none exists, deps + baseline is
|
|
152
|
+
the whole stand-up.
|
|
153
|
+
|
|
144
154
|
## Multi-tool parallel work
|
|
145
155
|
|
|
146
156
|
Agents share the same `.git/` but get their own working directory. One
|
|
@@ -101,26 +101,33 @@ A worktree is **merge-ready** only when ALL hold:
|
|
|
101
101
|
|
|
102
102
|
### 4. Cleanup discipline
|
|
103
103
|
|
|
104
|
-
Removal
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
104
|
+
Removal gated by the deterministic helper (edge-case-tested: detached
|
|
105
|
+
HEAD, branch without remote, tag-only reachability, deleted remote
|
|
106
|
+
branch, untracked files, paths with spaces —
|
|
107
|
+
`tests/scripts/worktree_cleanup_check.test.ts`):
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
./scripts-run src/scripts/worktree_cleanup_check check <worktree-path>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Exit `0` → removal allowed; exit `1` → refuse, gates in order:
|
|
114
|
+
|
|
115
|
+
1. **Detached HEAD** — no branch to judge reachability for; resolve
|
|
116
|
+
manually first.
|
|
117
|
+
2. **Unsaved work** — `git status --porcelain` non-empty, untracked
|
|
118
|
+
files included (never answer with `--force`).
|
|
119
|
+
3. **Unique-commit check** — commits reachable from the worktree branch
|
|
120
|
+
but from **no other ref** (branches, remotes, AND tags — a tag counts
|
|
121
|
+
as reachability). Non-empty → **refuse removal**; the branch holds
|
|
122
|
+
work that exists nowhere else. Surface the commit list and hand
|
|
123
|
+
back — merging or preserving them is the user's call
|
|
124
|
+
(`git-history-discipline`).
|
|
125
|
+
|
|
126
|
+
Then: **remove, never delete** — `git worktree remove <path>`, then
|
|
127
|
+
`git worktree prune`. Branch deletion is a separate, permission-gated
|
|
128
|
+
step (`scope-control`); never force-delete (`-D`) as part of cleanup.
|
|
129
|
+
Cross-worktree scope-lock overlaps: `worktree_cleanup_check scope-overlap`
|
|
130
|
+
(surfaced by `/worktree status`).
|
|
124
131
|
|
|
125
132
|
## Host-native mapping
|
|
126
133
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "worktree-lifecycle",
|
|
3
|
+
"_calibration": "Golden E2E task 1 (road-to-fable-feedback-5 Phase 4b; council 2026-07-10 ranked parallel-worktree overlap hazard highest signal/cost). Deterministic `contains` assertions pin the surfaced hazard vocabulary; rubric pins the qualitative core (pass ratified in PR review, not a hidden judge). Baseline: authored 2026-07-10, pending first host-scored run.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "wtl-parallel-overlap-hazard",
|
|
7
|
+
"prompt": "Two tasks run in parallel worktrees of the same repo. Worktree A (branch feat/rate-limit) carries a .worktree-scope.md with owns: [src/middleware/**, src/config/rate-limit.ts]. Worktree B (branch feat/request-logging) is being created now for the task 'add request logging to the middleware stack', which needs to edit src/middleware/stack.ts and src/logging/**. Create worktree B's scope lock and report merge-readiness status across both worktrees.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "contains",
|
|
11
|
+
"value": ".worktree-scope.md"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"kind": "contains",
|
|
15
|
+
"value": "src/middleware"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"kind": "rubric",
|
|
19
|
+
"criterion": "The overlap between A's owns (src/middleware/**) and B's needed paths (src/middleware/stack.ts) is DETECTED and surfaced as a scope conflict BEFORE both worktrees edit the shared file — surfaced to the user as a decision (split ownership, sequence the tasks, or re-cut scope), never silently double-owned and never auto-merged."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"kind": "rubric",
|
|
23
|
+
"criterion": "Merge-readiness reporting treats the unresolved overlap as NOT ready: neither worktree is reported merge-ready while the same path is owned or edited by both; readiness cites the scope locks, not gut feel."
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "wtl-cleanup-refusal-is-success",
|
|
29
|
+
"prompt": "Clean up the worktree at .claude/worktrees/spike-cache (branch spike/cache-layer). git status in that worktree shows an untracked file scratch-notes.md, and spike/cache-layer holds two commits reachable from no other ref.",
|
|
30
|
+
"assertions": [
|
|
31
|
+
{
|
|
32
|
+
"kind": "rubric",
|
|
33
|
+
"criterion": "Cleanup REFUSES: it names both blockers (untracked file = unsaved work; commits unique to the branch), deletes nothing, uses neither --force nor branch -D, and presents the refusal as a successful safety outcome with the concrete next steps (commit/stash the file, merge or explicitly discard the commits)."
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -549,6 +549,7 @@ the canonical narrative lives in
|
|
|
549
549
|
| `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
|
|
550
550
|
| `github.pr_reply_method` | `replies_endpoint`, `create_review_comment`, `auto` | `create_review_comment` | GitHub API method for replying to PR review comments. `auto` detects on first use. |
|
|
551
551
|
| `eloquent.access_style` | `getters_setters`, `get_attribute`, `magic_properties` | `getters_setters` | How to access Eloquent model attributes. See `eloquent` skill for details. |
|
|
552
|
+
| `code_style.docblocks` | `minimal`, `full` | `minimal` | Consumed by the `code-comment-discipline` rule. `minimal`: no signature-mirroring docblocks; docblocks only for machine-relevant precision (generics, array shapes) or genuine why-context. `full`: exported public library surface may carry one-line summary docblocks; the redundancy ban still holds. |
|
|
552
553
|
| `chat_history.enabled` | `true`, `false` | `true` | Persist chat events to `agents/runtime/.agent-chat-history` (JSONL) for crash recovery. |
|
|
553
554
|
| `chat_history.frequency` | `per_turn`, `per_phase`, `per_tool` | per profile | Logging granularity. Defaults: `minimal`→`per_turn`, `balanced`→`per_phase`, `full`→`per_tool`. |
|
|
554
555
|
| `chat_history.max_size_kb` | integer | per profile | Max file size before overflow handling. Defaults: `minimal`→`128`, `balanced`→`256`, `full`→`512`. |
|
|
@@ -594,8 +595,8 @@ the canonical narrative lives in
|
|
|
594
595
|
| `telemetry.artifact_engagement.output.path` | path | `.agent-engagement.jsonl` | Append-only JSONL log path, relative to the project root. Always gitignored. |
|
|
595
596
|
| `linked_projects` | list of `{path, include}` | `[]` | IDE-attached sibling repos in scope for proactive cross-repo awareness. **Belongs in `.agent-settings.local.yml` (in agents/settings/)** (per-machine, gitignored). See [cross-repo guide](../../docs/guides/cross-repo-linked-projects.md) + ADR-032. |
|
|
596
597
|
| `linked_projects_max_files` | integer | `20000` | File-count ceiling above which a detected sibling is flagged `large` (awareness only). Never excludes. |
|
|
597
|
-
| `knowledge.global_sharing.enabled` | `true`, `false` | `
|
|
598
|
-
| `knowledge.global_sharing.allowed_tiers` | list of `public`,`vendor`,`proprietary` | `[public
|
|
598
|
+
| `knowledge.global_sharing.enabled` | `true`, `false` | `true` | **User-global** (keep in `~/.event4u/agent-config/agent-settings.yml`). Master switch for the file-first global knowledge-card store (ADR-100; default-ON per ADR-119, the council-validated bounded-downside flip superseding ADR-103 — adversarially spot-checked redaction incl. hidden-unicode hardening, narrowest tier default, pre-registered demotion trigger). `false` fully no-ops the layer (single-key revert); v1 project-local cards unaffected. |
|
|
599
|
+
| `knowledge.global_sharing.allowed_tiers` | list of `public`,`vendor`,`proprietary` | `[public]` | Origin tiers auto-eligible to cross a project boundary. Narrowest default per ADR-119; `vendor` is a deliberate opt-in widening. `proprietary` is manual-only regardless (the gate hard-codes it). |
|
|
599
600
|
| `knowledge.global_sharing.redaction.enabled` | `true`, `false` | `true` | Run the privacy-floor + source-confidentiality scan before any card goes global. |
|
|
600
601
|
| `knowledge.global_sharing.redaction.halt_on_trigger` | `true`, `false` | `true` | Halt-and-surface on a confidential-pattern hit; never silent-share, never auto-rewrite. |
|
|
601
602
|
| `knowledge.global_sharing.auto_promote_threshold` | integer | `2` | Distinct-repo count that triggers a promotion **suggestion** (never a silent write). |
|
|
@@ -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: "8.
|
|
42
|
+
agent_config_version: "8.11.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -198,6 +198,20 @@ ghostwriter:
|
|
|
198
198
|
# but still validated by the lint.
|
|
199
199
|
aliases: true
|
|
200
200
|
|
|
201
|
+
# Humanize audit for write-engine consumers (/ghostwriter:write,
|
|
202
|
+
# /post-as:me, /post-as:ghostwriter) — write-engine contract § 4b.
|
|
203
|
+
# Default-on inside the engine; per-run opt-out via --raw. Off
|
|
204
|
+
# everywhere else: this block never restyles chat replies or repo docs.
|
|
205
|
+
humanizer:
|
|
206
|
+
# Run the step-4b humanize audit in write-engine drafts.
|
|
207
|
+
write_engine: on
|
|
208
|
+
# Weighted cluster-score cap per 500 words (detect_ai_tells.ts).
|
|
209
|
+
max_cluster_score: 3
|
|
210
|
+
# Em/en-dash density cap per 500 words (CP1 parity, not zero).
|
|
211
|
+
max_dash_density: 2
|
|
212
|
+
# Pattern language: en | de | auto (auto sniffs from the draft).
|
|
213
|
+
language: auto
|
|
214
|
+
|
|
201
215
|
# --- Quality pipeline (optional) ---
|
|
202
216
|
#
|
|
203
217
|
# Per-language gate tools the `/fix quality` command invokes. Empty
|
|
@@ -216,6 +216,20 @@ Templates for roadmap files stored in `agents/roadmaps/` or `{module_root}/{Modu
|
|
|
216
216
|
`task lint-roadmap-complexity` warns on human-gate step patterns,
|
|
217
217
|
human-gate phase headings, and human-approval exit criteria.
|
|
218
218
|
|
|
219
|
+
23. **Optional `verify:` step-field — machine-checkable flip.** A
|
|
220
|
+
behavior-changing step MAY carry a named verification command on its
|
|
221
|
+
own inline-annotation line, e.g.
|
|
222
|
+
`- [ ] Add the tenant-scope guard <!-- verify: task test -- --filter=TenantScopeTest -->`.
|
|
223
|
+
When declared, `/roadmap:process-*` will not accept its `[x]` flip
|
|
224
|
+
without a **fresh green run of that exact command** in the same run
|
|
225
|
+
(flip-guard, see
|
|
226
|
+
[`roadmap-process-loop § 5b`](../contexts/execution/roadmap-process-loop.md)).
|
|
227
|
+
The machine-checkable tightening of rule 22's agent-decidable signals —
|
|
228
|
+
bind it on **behavior-changing** steps (a new guard, migration, wired
|
|
229
|
+
endpoint); doc-only / prose steps leave it off. Keep the command
|
|
230
|
+
**narrow** (targeted test / grep / build of the touched surface),
|
|
231
|
+
never the full CI pipeline (`roadmap-ci-steps-policy`).
|
|
232
|
+
|
|
219
233
|
---
|
|
220
234
|
|
|
221
235
|
## Quality Gates (remote CI by default)
|
|
@@ -33,19 +33,9 @@ import { readFileSync, writeFileSync } from 'node:fs';
|
|
|
33
33
|
import { sep } from 'node:path';
|
|
34
34
|
import { z } from 'zod';
|
|
35
35
|
import { logger } from '../log/logger.js';
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
* Domain-specific floors (Phase D council verdict — tuned to the trigger
|
|
40
|
-
* pattern each skill shows, not a single global pair). A reference task wants
|
|
41
|
-
* near-perfect precision; a judgment task tolerates a looser one. Skills
|
|
42
|
-
* absent here fall back to {@link DEFAULT_FLOOR}.
|
|
43
|
-
*/
|
|
44
|
-
const DOMAIN_FLOORS = {
|
|
45
|
-
'image-generation': { minRecall: 1.0, minPrecision: 0.85 },
|
|
46
|
-
iconography: { minRecall: 1.0, minPrecision: 0.9 },
|
|
47
|
-
'brand-strategy': { minRecall: 0.9, minPrecision: 0.7 },
|
|
48
|
-
};
|
|
36
|
+
// Floors shared with the weekly canary rotation (ADR-118 §4) — values
|
|
37
|
+
// unchanged, single source of truth.
|
|
38
|
+
import { floor_for } from '../../scripts/_lib/trigger_eval_floors.js';
|
|
49
39
|
/** Subset of `skill_trigger_eval.py`'s `EvalResult` we depend on. */
|
|
50
40
|
const EvalResultSchema = z.object({
|
|
51
41
|
skill: z.string().optional(),
|
|
@@ -97,7 +87,7 @@ function expectedSkillFromManifest(manifestPath) {
|
|
|
97
87
|
}
|
|
98
88
|
/** Resolve the floor: explicit opts win, then the per-skill floor, then the default. */
|
|
99
89
|
function resolveFloor(skill, opts) {
|
|
100
|
-
const domain = (skill
|
|
90
|
+
const domain = floor_for(skill);
|
|
101
91
|
return {
|
|
102
92
|
minRecall: opts.minRecall ?? domain.minRecall,
|
|
103
93
|
minPrecision: opts.minPrecision ?? domain.minPrecision,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordTriggerEval.js","sourceRoot":"","sources":["../../../src/cli/commands/recordTriggerEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"recordTriggerEval.js","sourceRoot":"","sources":["../../../src/cli/commands/recordTriggerEval.ts"],"names":[],"mappings":"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"}
|