@tyroneross/build-loop 0.36.0 → 0.43.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/.agents/plugins/marketplace.json +2 -2
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor/rules/build-loop-surface.mdc +12 -11
- package/.cursor/rules/skill-index.mdc +33 -0
- package/AGENTS.md +213 -34
- package/README.md +99 -31
- package/agents/advisor.md +4 -4
- package/agents/alignment-checker.md +2 -2
- package/agents/architecture-scout.md +4 -4
- package/agents/build-orchestrator.md +38 -36
- package/agents/database-assessor.md +11 -5
- package/agents/design-contract-specialist.md +8 -8
- package/agents/fact-checker.md +13 -3
- package/agents/fix-critique.md +2 -2
- package/agents/independent-auditor.md +60 -7
- package/agents/leak-scanner.md +82 -0
- package/agents/overfitting-reviewer.md +2 -2
- package/agents/plan-critic.md +1 -1
- package/agents/promotion-reviewer.md +5 -5
- package/agents/retrospective-synthesizer.md +138 -35
- package/agents/scope-auditor.md +82 -11
- package/agents/security-reviewer.md +56 -2
- package/agents/self-improvement-architect.md +17 -3
- package/agents/transcript-pattern-miner.md +5 -5
- package/agents/ui-validator.md +1 -1
- package/bin/build-loop-debugger.js +143 -0
- package/bin/build-loop-install.js +1 -4
- package/bin/build-loop-load-probe.js +345 -0
- package/codex-skills/build-loop/SKILL.md +28 -6
- package/commands/feedback.md +37 -0
- package/dist/src/interactive-verifier.d.ts +1 -14
- package/dist/src/interactive-verifier.d.ts.map +1 -1
- package/dist/src/interactive-verifier.js +6 -113
- package/dist/src/interactive-verifier.js.map +1 -1
- package/dist/src/quality.d.ts +5 -0
- package/dist/src/quality.d.ts.map +1 -0
- package/dist/src/quality.js +81 -0
- package/dist/src/quality.js.map +1 -0
- package/dist/src/storage.d.ts.map +1 -1
- package/dist/src/storage.js +37 -3
- package/dist/src/storage.js.map +1 -1
- package/docs/agent-surface-policy.md +35 -31
- package/docs/memory-setup.md +19 -0
- package/hooks/git/pre-push +65 -4
- package/hooks/hooks.json +95 -38
- package/hooks/pre-commit +20 -1
- package/hooks/pre-edit-rally-point.sh +10 -3
- package/hooks/session-start-codex-hook-trust.sh +30 -0
- package/hooks/session-start-git-hooks.sh +3 -1
- package/hooks/session-start-rally-point.sh +52 -4
- package/hooks/session-start-worktree-gc.sh +47 -94
- package/hooks/stop-transcript-sweep.sh +173 -0
- package/hooks/test_closeout.sh +14 -2
- package/package.json +8 -7
- package/scripts/README.md +1 -1
- package/scripts/_paths.py +65 -0
- package/scripts/groundwork_exchange.py +1012 -0
- package/scripts/install_memory.py +33 -1
- package/scripts/lessons_index/ingest.py +13 -2
- package/scripts/lessons_index/query.py +36 -13
- package/scripts/memory_context/__init__.py +108 -14
- package/scripts/memory_graph/__init__.py +5 -1
- package/scripts/project_resolver.py +42 -36
- package/scripts/sync_plugin_cache.py +37 -2
- package/skills/agent-rally-point/SKILL.md +46 -0
- package/skills/api-registry-bridge/SKILL.md +1 -1
- package/skills/architecture/dead/SKILL.md +1 -1
- package/skills/architecture/impact/SKILL.md +1 -1
- package/skills/architecture/review/SKILL.md +1 -1
- package/skills/architecture/rules/SKILL.md +3 -3
- package/skills/architecture/scan/SKILL.md +1 -1
- package/skills/architecture/trace/SKILL.md +1 -1
- package/skills/attribution-standard/SKILL.md +6 -6
- package/skills/auto-decision-capture/SKILL.md +31 -2
- package/skills/auto-finding-capture/SKILL.md +28 -1
- package/skills/build-loop/SKILL.md +131 -23
- package/skills/build-loop/fallbacks.md +16 -21
- package/skills/build-loop/phases/ui-validation.md +2 -2
- package/skills/build-loop/references/advisor-dispatch-ladder.md +1 -1
- package/skills/build-loop/references/apple-native-planning.md +1 -1
- package/skills/build-loop/references/autonomous-and-per-commit-modes.md +11 -5
- package/skills/build-loop/references/autonomy-dashboard.md +115 -0
- package/skills/build-loop/references/capability-routing.md +24 -2
- package/skills/build-loop/references/coordination.md +24 -6
- package/skills/build-loop/references/experiment-results-template.md +15 -3
- package/skills/build-loop/references/leadership.md +1 -1
- package/skills/build-loop/references/memory.md +14 -3
- package/skills/build-loop/references/modular-systems-pack.md +8 -0
- package/skills/build-loop/references/output-style.md +86 -0
- package/skills/build-loop/references/phase-1-assess.md +102 -2
- package/skills/build-loop/references/phase-2-plan.md +9 -1
- package/skills/build-loop/references/phase-3-execute.md +5 -2
- package/skills/build-loop/references/phase-4-review.md +85 -8
- package/skills/build-loop/references/phase-5-iterate.md +76 -8
- package/skills/build-loop/references/phase-6-learn.md +10 -17
- package/skills/build-loop/references/privileged-request-broker.md +254 -0
- package/skills/build-loop/references/resource-aware-execution.md +183 -0
- package/skills/build-loop/references/self-recursive-dev.md +2 -2
- package/skills/build-loop/references/status-output-format.md +207 -0
- package/skills/build-loop/references/verify-dispatch.md +56 -2
- package/skills/building-with-deepagents/SKILL.md +1 -1
- package/skills/claim-scope/SKILL.md +185 -0
- package/skills/color-engine/SKILL.md +103 -0
- package/skills/color-engine/_core.py +464 -0
- package/skills/color-engine/color_engine.py +175 -0
- package/skills/cost-rca/SKILL.md +61 -0
- package/skills/data-plane-worktrees/SKILL.md +139 -0
- package/skills/data-plane-worktrees/agents/openai.yaml +4 -0
- package/skills/database-practice/SKILL.md +200 -0
- package/skills/database-practice/references/diagnostic-queries.sql +126 -0
- package/skills/database-practice/references/vector-and-graph-tuning.md +208 -0
- package/skills/database-practice/scripts/db_table_map.py +1244 -0
- package/skills/database-practice/scripts/test_db_table_map.py +514 -0
- package/skills/debug-loop/SKILL.md +36 -6
- package/skills/debugging-memory/SKILL.md +32 -430
- package/skills/debugging-memory/references/pattern-extraction.md +4 -4
- package/skills/debugging-memory/references/search.md +32 -120
- package/skills/debugging-memory/references/store.md +32 -126
- package/skills/debugging-memory/references/subagent-integration.md +1 -1
- package/skills/decision-queue/SKILL.md +251 -0
- package/skills/decision-queue/assets/template.html +1242 -0
- package/skills/decision-queue/references/example-large-queue-batching.md +164 -0
- package/skills/decision-queue/scripts/regen_template_constants.py +160 -0
- package/skills/defenseclaw-bridge/SKILL.md +2 -2
- package/skills/defenseclaw-bridge/references/dc-config-mapping.md +2 -9
- package/skills/drain-proposals/SKILL.md +53 -0
- package/skills/focused-loop-builder/SKILL.md +31 -0
- package/skills/focused-loop-builder/references/spec-format.md +27 -0
- package/skills/handoff/SKILL.md +169 -8
- package/skills/ibr-bridge/SKILL.md +4 -1
- package/skills/knowledge/SKILL.md +26 -14
- package/skills/knowledge/references/review-mode.md +2 -3
- package/skills/knowledge/templates/madr-minimal.md +1 -1
- package/skills/mcp-builder/SKILL.md +1 -1
- package/skills/model-bakeoff/SKILL.md +48 -10
- package/skills/model-tiering/SKILL.md +92 -31
- package/skills/native-ax-driver/SKILL.md +38 -5
- package/skills/native-ax-driver/scripts/native_driver.py +278 -22
- package/skills/native-ax-driver/scripts/test_native_driver.py +227 -0
- package/skills/optimize/SKILL.md +1 -1
- package/skills/plugin-builder/SKILL.md +48 -1
- package/skills/plugin-builder/references/build-loop-phase-guidance.md +3 -4
- package/skills/plugin-builder/references/distribution.md +13 -2
- package/skills/plugin-builder/references/plugin-hygiene-lessons.md +2 -2
- package/skills/plugin-tests/SKILL.md +2 -2
- package/skills/recursive-retrospective/SKILL.md +1 -1
- package/skills/repo-closeout/SKILL.md +17 -0
- package/skills/repo-closeout/agents/openai.yaml +4 -0
- package/skills/repo-maintenance/SKILL.md +179 -0
- package/skills/repo-maintenance/agents/openai.yaml +4 -0
- package/skills/repo-maintenance/references/pre-public-hygiene.md +134 -0
- package/skills/repo-maintenance/references/repository-taxonomy.md +161 -0
- package/skills/repo-maintenance/references/safety-protocol.md +106 -0
- package/skills/repo-maintenance/references/stack-profiles.md +138 -0
- package/skills/repo-maintenance/scripts/audit_repo_maintenance.py +1198 -0
- package/skills/repo-maintenance/scripts/test_audit_repo_maintenance.py +506 -0
- package/skills/repository-intelligence/SKILL.md +189 -0
- package/skills/repository-intelligence/agents/openai.yaml +4 -0
- package/skills/repository-intelligence/references/assessment-rubric.md +88 -0
- package/skills/repository-intelligence/scripts/repository_inventory.py +347 -0
- package/skills/research/SKILL.md +12 -2
- package/skills/root-cause-analysis/SKILL.md +1 -1
- package/skills/runtime-parity-verification/SKILL.md +36 -1
- package/skills/security-methodology/SKILL.md +23 -10
- package/skills/security-methodology/references/agentic-handoff-templates.md +220 -0
- package/skills/security-methodology/references/cross-source-matrix.md +1 -1
- package/skills/security-methodology/references/owasp-agentic-top-10.md +1 -1
- package/skills/security-scan/SKILL.md +55 -15
- package/skills/self-improve/SKILL.md +70 -50
- package/skills/silent-assumptions/SKILL.md +341 -0
- package/skills/silent-assumptions/references/elicitation-detectors.md +342 -0
- package/skills/spec-writing/SKILL.md +128 -24
- package/skills/spec-writing/scripts/check_checklist.py +114 -15
- package/skills/ui-design/SKILL.md +6 -4
- package/skills/ui-design/references/color-engine.md +132 -0
- package/skills/ui-design/references/design-preferences-from-owned-apps.md +8 -8
- package/skills/ui-design/references/ui-guidance-sources.md +1 -1
- package/skills/ui-design/references/universal-design-principles.alt.md +2 -2
- package/plugin-artifacts/codex/.codex-plugin/plugin.json +0 -41
- package/plugin-artifacts/codex/AGENTS.md +0 -560
- package/plugin-artifacts/codex/BUILD-ARTIFACT.md +0 -5
- package/plugin-artifacts/codex/LICENSE +0 -202
- package/plugin-artifacts/codex/README.md +0 -313
- package/plugin-artifacts/codex/assets/build-loop-plugin-icon.png +0 -0
- package/plugin-artifacts/codex/docs/agent-surface-policy.md +0 -63
- package/plugin-artifacts/codex/references/advisor-dispatch-ladder.md +0 -62
- package/plugin-artifacts/codex/references/agent-role-taxonomy.md +0 -135
- package/plugin-artifacts/codex/references/autonomous-and-per-commit-modes.md +0 -161
- package/plugin-artifacts/codex/references/autonomy-config.md +0 -231
- package/plugin-artifacts/codex/references/backlog-system.md +0 -285
- package/plugin-artifacts/codex/references/capability-routing.md +0 -231
- package/plugin-artifacts/codex/references/codex-subagents.md +0 -106
- package/plugin-artifacts/codex/references/coordination-file-template.md +0 -181
- package/plugin-artifacts/codex/references/coordination-rules.md +0 -552
- package/plugin-artifacts/codex/references/dogfood-reload-checkpoint.md +0 -112
- package/plugin-artifacts/codex/references/halt-and-ask-protocol.md +0 -102
- package/plugin-artifacts/codex/references/implementer-envelope-schema.md +0 -302
- package/plugin-artifacts/codex/references/intent-capability-pack.md +0 -257
- package/plugin-artifacts/codex/references/intent-exploration-prompts.md +0 -96
- package/plugin-artifacts/codex/references/leadership.md +0 -72
- package/plugin-artifacts/codex/references/memory-systems.md +0 -261
- package/plugin-artifacts/codex/references/memory.md +0 -313
- package/plugin-artifacts/codex/references/model-tier-mapping.md +0 -296
- package/plugin-artifacts/codex/references/modular-systems-pack.md +0 -96
- package/plugin-artifacts/codex/references/phase-1-assess.md +0 -249
- package/plugin-artifacts/codex/references/phase-2-plan.md +0 -86
- package/plugin-artifacts/codex/references/phase-3-execute.md +0 -49
- package/plugin-artifacts/codex/references/phase-4-review.md +0 -341
- package/plugin-artifacts/codex/references/phase-5-iterate.md +0 -72
- package/plugin-artifacts/codex/references/phase-6-learn.md +0 -58
- package/plugin-artifacts/codex/references/recent-design-structures.md +0 -274
- package/plugin-artifacts/codex/references/research-trigger-policy.md +0 -140
- package/plugin-artifacts/codex/references/runtime-smoke-triggers.md +0 -42
- package/plugin-artifacts/codex/references/self-review.md +0 -234
- package/plugin-artifacts/codex/references/single-writer-commit-protocol.md +0 -90
- package/plugin-artifacts/codex/references/task-capture-policy.md +0 -68
- package/plugin-artifacts/codex/references/ui-io-contract.md +0 -116
- package/plugin-artifacts/codex/references/ui-spotcheck-protocol.md +0 -65
- package/plugin-artifacts/codex/references/verify-dispatch.md +0 -85
- package/plugin-artifacts/codex/skills/build-loop/SKILL.md +0 -381
- package/plugin-artifacts/codex/skills/build-loop/detect-plugins.mjs +0 -82
- package/plugin-artifacts/codex/skills/build-loop/eval-guide.md +0 -65
- package/plugin-artifacts/codex/skills/build-loop/fallbacks.md +0 -549
- package/plugin-artifacts/codex/skills/build-loop/phases/fact-check.md +0 -42
- package/plugin-artifacts/codex/skills/build-loop/phases/ui-validation.md +0 -267
- package/plugin-artifacts/codex/skills/build-loop/references/advisor-dispatch-ladder.md +0 -62
- package/plugin-artifacts/codex/skills/build-loop/references/apple-native-planning.md +0 -439
- package/plugin-artifacts/codex/skills/build-loop/references/autonomous-and-per-commit-modes.md +0 -161
- package/plugin-artifacts/codex/skills/build-loop/references/capability-routing.md +0 -231
- package/plugin-artifacts/codex/skills/build-loop/references/codex-subagents.md +0 -106
- package/plugin-artifacts/codex/skills/build-loop/references/coordination.md +0 -161
- package/plugin-artifacts/codex/skills/build-loop/references/correction-aware-capture.md +0 -177
- package/plugin-artifacts/codex/skills/build-loop/references/experiment-results-template.md +0 -101
- package/plugin-artifacts/codex/skills/build-loop/references/independent-auditor.md +0 -72
- package/plugin-artifacts/codex/skills/build-loop/references/intent-capability-pack.md +0 -257
- package/plugin-artifacts/codex/skills/build-loop/references/intent-exploration-prompts.md +0 -96
- package/plugin-artifacts/codex/skills/build-loop/references/leadership.md +0 -72
- package/plugin-artifacts/codex/skills/build-loop/references/memory.md +0 -313
- package/plugin-artifacts/codex/skills/build-loop/references/modular-systems-pack.md +0 -96
- package/plugin-artifacts/codex/skills/build-loop/references/output-style.md +0 -222
- package/plugin-artifacts/codex/skills/build-loop/references/pay-it-forward-arch.md +0 -98
- package/plugin-artifacts/codex/skills/build-loop/references/phase-1-assess.md +0 -249
- package/plugin-artifacts/codex/skills/build-loop/references/phase-2-plan.md +0 -86
- package/plugin-artifacts/codex/skills/build-loop/references/phase-3-execute.md +0 -49
- package/plugin-artifacts/codex/skills/build-loop/references/phase-4-review.md +0 -341
- package/plugin-artifacts/codex/skills/build-loop/references/phase-5-iterate.md +0 -72
- package/plugin-artifacts/codex/skills/build-loop/references/phase-6-learn.md +0 -58
- package/plugin-artifacts/codex/skills/build-loop/references/recent-design-structures.md +0 -274
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/ASSESSMENT.md +0 -85
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/STANDALONE_TEST_RUN.md +0 -149
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/01-simple-bugfix.md +0 -32
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/02-ui-build-with-iteration.md +0 -48
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/03-multi-failure-escalation.md +0 -60
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/04-ui-build-ibr-absent.md +0 -51
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/05-refactor-navgator-absent.md +0 -71
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/06-recurring-bug-debugger-absent.md +0 -52
- package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/trace-comparison.md +0 -202
- package/plugin-artifacts/codex/skills/build-loop/references/self-recursive-dev.md +0 -77
- package/plugin-artifacts/codex/skills/build-loop/references/self-review.md +0 -234
- package/plugin-artifacts/codex/skills/build-loop/references/ui-io-contract.md +0 -116
- package/plugin-artifacts/codex/skills/build-loop/references/verify-dispatch.md +0 -85
- package/plugin-artifacts/codex/skills/build-loop/scanners/audit-design-rules.mjs +0 -476
- package/plugin-artifacts/codex/skills/build-loop/scanners/require-visual-evidence.mjs +0 -239
- package/plugin-artifacts/codex/skills/build-loop/templates/backlog-item.md +0 -35
- package/plugin-artifacts/codex/skills/build-loop/templates/codex-worker-prompt.md +0 -100
- package/plugin-artifacts/codex/skills/build-loop/templates/ui-subagent-prompt.md +0 -179
- package/plugin-artifacts/codex/skills/build-loop/templates/ux-fix-plan.md +0 -40
- package/scripts/build_codex_plugin_artifact.py +0 -321
package/skills/handoff/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: handoff
|
|
3
3
|
description: "Compose a complete, durable build-loop handoff document from the current run state, and optionally launch a fresh session with it injected. Use when crossing a context boundary (context limit, planned restart, worktree GC). Triggers: 'hand off', 'handoff', 'new session', 'context limit', 'restart', 'fresh session', '/build-loop:compose-handoff'."
|
|
4
|
-
user-invocable:
|
|
4
|
+
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
@@ -18,20 +18,154 @@ then (optionally) launch a fresh session in the STABLE checkout with that docume
|
|
|
18
18
|
- A worktree about to be GC'd — extract state before the folder disappears.
|
|
19
19
|
- Handing off work to a peer agent or co-developer.
|
|
20
20
|
|
|
21
|
+
## The seven content classes a handoff must carry
|
|
22
|
+
|
|
23
|
+
Derived empirically (2026-07-26): a generated handoff was cold-read by fresh agents at
|
|
24
|
+
three model tiers, scored, repaired, and re-tested. Every failure fell into one of seven
|
|
25
|
+
classes. A handoff missing any one of them produces an agent that can *restate* the work
|
|
26
|
+
but cannot *act* on it. Ranked by how much damage the omission causes.
|
|
27
|
+
|
|
28
|
+
| # | Class | The question it answers | Failure when missing |
|
|
29
|
+
|---|-------|------------------------|----------------------|
|
|
30
|
+
| 1 | **Orientation** | What is this product, for whom, on what stack? | Reviewer inferred "Apple app" only from `xcodebuild` in a gotcha. Everything downstream is guesswork. |
|
|
31
|
+
| 2 | **Constraints / non-goals** | What must I NOT do? | The single most-cited gap. This is the class truncation kills first, because non-goals sit at the END of an intent file. |
|
|
32
|
+
| 3 | **Landmines** | What will bite me on my FIRST action? | Stale run-id markers, set push-holds, emptied state blocks. Each fires before any real work begins. |
|
|
33
|
+
| 4 | **Authorization** | Am I allowed to just start? | Absent this, an agent picks the most visible queue item — which may be another run's unpaid audit debt. |
|
|
34
|
+
| 5 | **Verification recipe** | How do I build/test, and what must I never run? | Without it an agent reaches for the obvious tool and gets a false green. |
|
|
35
|
+
| 6 | **Open decisions** | What is genuinely undecided, who owns it, what decides it? | A dangling "may have been wrong" with no owner and no criterion is unresolvable by the next agent. |
|
|
36
|
+
| 7 | **Provenance** | How trustworthy is this record itself? | A reconstructed or overridden record read as ground truth is worse than no record. |
|
|
37
|
+
|
|
38
|
+
Two cross-cutting rules learned the same way:
|
|
39
|
+
|
|
40
|
+
- **Never truncate a class-2 or class-6 section.** Both live at the end of their source
|
|
41
|
+
files, so any line cap removes exactly the text that carries the constraint.
|
|
42
|
+
- **Counts are claims.** A queue count that silently caps (or counts a derived `INDEX.md`
|
|
43
|
+
instead of `items/`) understates open work. Titles alone are not enough either — carry
|
|
44
|
+
the frontmatter fields that decide whether an item is safe to pick up
|
|
45
|
+
(`status`, `classify`, `judgment_verdict`, `owed_layers`, `blocked_by`).
|
|
46
|
+
|
|
47
|
+
## Recall and confidence are different failures with different fixes
|
|
48
|
+
|
|
49
|
+
This is the finding that mattered most, and it is not obvious: **an agent can score full
|
|
50
|
+
marks on recall and still refuse to act.**
|
|
51
|
+
|
|
52
|
+
Measured on one document across four rounds. Haiku answered 10/10 factual questions
|
|
53
|
+
correctly while rating its own confidence **2/5** — it had every fact and would not touch
|
|
54
|
+
the repo. Adding more facts would not have helped, because facts were never the gap.
|
|
55
|
+
|
|
56
|
+
| Failure | Caused by | Symptom | Fix |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| **Recall** | Omission — truncation, silent caps, missing orientation | "NOT IN DOC", wrong counts, guessing the tech stack | Put the content in (classes 1–5) |
|
|
59
|
+
| **Confidence** | Unresolved implication — a flag with no interpretation | Correct answers, low self-rating, "I'd have to read the code first" | State what each flag *means for the reader* (classes 6–7) |
|
|
60
|
+
|
|
61
|
+
Concretely, what moved Haiku from 2/5 to 5/5 was not new information. It was:
|
|
62
|
+
|
|
63
|
+
- Queue items carrying `judgment_verdict` / `classify` / `owed_layers`, so "Judgment owed —
|
|
64
|
+
bl-…-codex-299759" became something a reader could triage instead of fear.
|
|
65
|
+
- The open decision gaining an **owner** and a **criterion for deciding**, so it read as
|
|
66
|
+
assigned rather than abandoned.
|
|
67
|
+
- The override gaining an explicit **cost** ("runs zero tests") and **bound** (what it does
|
|
68
|
+
and does not invalidate), so it read as disclosed rather than alarming.
|
|
69
|
+
|
|
70
|
+
**Rule: every warning in a handoff must carry its own interpretation.** A flag without a
|
|
71
|
+
"so what" transfers anxiety, not information — and a cautious reader responds by doing
|
|
72
|
+
nothing, which is the exact outcome the handoff exists to prevent.
|
|
73
|
+
|
|
74
|
+
## How to test a handoff (the cold-read protocol)
|
|
75
|
+
|
|
76
|
+
Do not self-assess a handoff. Dispatch a fresh agent whose ONLY artifact is the document
|
|
77
|
+
path, tell it to open nothing else, and score it. Brief it and the test is worthless.
|
|
78
|
+
|
|
79
|
+
Run the same fixed question set at **two model tiers**, because they detect different
|
|
80
|
+
defects:
|
|
81
|
+
|
|
82
|
+
| Tier | Detects | Why |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| **Weakest available** (Haiku) | Unresolved implications | It will not infer past an ambiguity; low confidence with correct answers pinpoints class 6/7 gaps |
|
|
85
|
+
| **Strongest available** (Opus) | Internal contradictions | It cross-references sections and finds claims that cannot both be true |
|
|
86
|
+
|
|
87
|
+
Ask for `CONFIDENCE (1-5)`, `GAPS`, and `CONTRADICTIONS` explicitly, and instruct the
|
|
88
|
+
agent to answer "NOT IN DOC" rather than guess — otherwise general knowledge silently
|
|
89
|
+
fills holes and the doc scores better than it deserves. Tell it to be harsh; a comfortable
|
|
90
|
+
review is a useless one.
|
|
91
|
+
|
|
92
|
+
Question set that surfaced every defect found (adapt the nouns, keep the shapes): what is
|
|
93
|
+
this product and for whom · what platforms and storage · what was just done and is it
|
|
94
|
+
finished · what builds/tests it and what must you never run · what is <the largest open
|
|
95
|
+
item> and is it done · name three forbidden things · how many queue items and which are
|
|
96
|
+
audit debt · did this ship through a normal gate · what decision is owed, who owns it,
|
|
97
|
+
what decides it · which field proves no new run started and which must you not read · why
|
|
98
|
+
is this record untrustworthy · what is the trap when searching for callers · are you
|
|
99
|
+
authorized to start · what must you run after adding a file · who wrote this record and
|
|
100
|
+
when relative to the work.
|
|
101
|
+
|
|
102
|
+
**Expect the strong tier to challenge your evidence, not just your prose.** On the final
|
|
103
|
+
round Opus accepted every fact and still flagged that a "three platforms build clean"
|
|
104
|
+
claim was overstated — the third platform's target excluded the directory the changed
|
|
105
|
+
files lived in, so its green proved the change could not break it, not that it was
|
|
106
|
+
verified. That correction came from the review, not from the author.
|
|
107
|
+
|
|
21
108
|
## What it composes
|
|
22
109
|
|
|
23
|
-
|
|
110
|
+
Nine fixed sections (always the same order; absent data renders as "n/a"):
|
|
24
111
|
|
|
25
112
|
| # | Section | Source |
|
|
26
113
|
|---|---------|--------|
|
|
27
|
-
| 1 | North Star (intent) | `.build-loop/intent.md` |
|
|
28
|
-
| 2 | Current Goal | `.build-loop/goal.md` |
|
|
114
|
+
| 1 | North Star (intent) — incl. Orientation + glossary | `.build-loop/intent.md` (inlined WHOLE) |
|
|
115
|
+
| 2 | Current Goal — incl. open decisions | `.build-loop/goal.md` (inlined WHOLE) |
|
|
29
116
|
| 3 | Phase + Live Checklist | `.build-loop/state.json` (execution + runs[]) |
|
|
30
|
-
| 4 | Git State | `git status` + `git log` |
|
|
117
|
+
| 4 | Git State | `git status` + `git log` (working-tree listing capped — see below) |
|
|
31
118
|
| 5 | Queues | `followup/`, `backlog/`, `ux-queue/`, `issues/` |
|
|
32
119
|
| 6 | Gotchas / Lessons | `.build-loop/feedback.md` |
|
|
33
120
|
| 7 | Last Run Summary | `state.json.runs[-1]` |
|
|
34
|
-
| 8 |
|
|
121
|
+
| 8 | Landmines | detected (stale `.current-run-id`, `.push-hold`, crash marker, …) |
|
|
122
|
+
| 9 | Resume Instructions | generated (workdir, phase context) |
|
|
123
|
+
|
|
124
|
+
### §4 working-tree listing is capped at 40 paths
|
|
125
|
+
|
|
126
|
+
Above 40 dirty files, §4 lists the paths in the **smallest** top-level groups and
|
|
127
|
+
collapses the rest into a count-by-top-level-path table, then prints a
|
|
128
|
+
`git add -A` warning. Reproduced 2026-07-25 on atomize-ai: ~2,981 pre-existing
|
|
129
|
+
dirty tooling files (`.navgator/`, `.build-loop/`, `.bookmark/`, `.rally/`) made §4
|
|
130
|
+
2,999 of the document's 3,214 lines — 93% — burying North Star, Goal, Landmines,
|
|
131
|
+
and Resume Instructions past 3,000 lines of cache paths. A handoff exists for when
|
|
132
|
+
context is scarce, so paying 3,000 lines for it inverts the tool's purpose.
|
|
133
|
+
|
|
134
|
+
The cap is on **enumeration only**: every dirty file is still counted in the table.
|
|
135
|
+
Smallest-group-first is what keeps it useful — `git status` sorts by path, so a
|
|
136
|
+
head-40 would have emitted 40 `.bookmark/` cache paths and cut every source edit.
|
|
137
|
+
|
|
138
|
+
`--full-git` restores the raw per-file listing when it is genuinely wanted.
|
|
139
|
+
|
|
140
|
+
## Delivery is not the same as writing it
|
|
141
|
+
|
|
142
|
+
A handoff that exists only on disk has not been handed off. Two things are required
|
|
143
|
+
every time, and neither is optional because the file was committed.
|
|
144
|
+
|
|
145
|
+
**1. State the absolute path in the reply.** Not "handoff written", not a repo-relative
|
|
146
|
+
path. The person picking this up is in a different terminal, often a different repo, and
|
|
147
|
+
frequently is not a person. Print the full path:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
/Users/<user>/dev/git-folder/<repo>/HANDOFF.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**2. Post it to Rally Point.** A handoff invisible to the coordination substrate cannot be
|
|
154
|
+
picked up by a peer agent, which is the case it most exists for.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
rally say fact --tool "<your-tool-id>" \
|
|
158
|
+
--subject "handoff: <one line, what state the work is in>" \
|
|
159
|
+
--evidence "file:<absolute path>" --json
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The same applies to a retrospective. Those land in the memory store rather than the repo,
|
|
163
|
+
so they are unfindable from the working directory unless the path is stated.
|
|
164
|
+
|
|
165
|
+
**Why this is a rule and not a preference.** The seven content classes below exist so a
|
|
166
|
+
cold reader can resume without the author. All of that work is wasted if the reader cannot
|
|
167
|
+
locate the document. The most common failure is not a thin handoff; it is a good handoff
|
|
168
|
+
nobody found.
|
|
35
169
|
|
|
36
170
|
## Usage — no flag (emit doc)
|
|
37
171
|
|
|
@@ -45,7 +179,27 @@ Prints the handoff doc to stdout. Pipe to a file or share directly.
|
|
|
45
179
|
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --output handoff.md
|
|
46
180
|
```
|
|
47
181
|
|
|
48
|
-
Writes to a file instead
|
|
182
|
+
Writes to a file instead, and prints where it landed **plus a browsable URL**:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Handoff written to /path/projects/<proj>/handoffs/2026-08-25-lane.md
|
|
186
|
+
url: https://github.com/<owner>/<repo>/blob/main/projects/<proj>/handoffs/2026-08-25-lane.md
|
|
187
|
+
(live)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
A handoff is written so someone ELSE can pick the work up, and an absolute local
|
|
191
|
+
path names a file on one machine — useless to a peer session, a ticket, or
|
|
192
|
+
another host. The URL is the part that travels.
|
|
193
|
+
|
|
194
|
+
Two states are distinguished, because a link to unpushed content is worse than
|
|
195
|
+
no link: `(live)` means the upstream holds this exact content; `(NOT PUSHED YET
|
|
196
|
+
— commit and push before sharing)` means it does not. An untracked file reports
|
|
197
|
+
NOT PUSHED, not live — `git diff @{u} -- <path>` exits 0 for a path git has
|
|
198
|
+
never seen, so the check confirms the upstream actually has the path first.
|
|
199
|
+
|
|
200
|
+
When no github/gitlab origin resolves for that path, it prints the `file://` URI
|
|
201
|
+
and says the doc is local-only. It never guesses a URL: a wrong link sends the
|
|
202
|
+
reader to a 404 or to a stale copy of a different file.
|
|
49
203
|
|
|
50
204
|
```bash
|
|
51
205
|
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --json
|
|
@@ -53,6 +207,13 @@ python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --json
|
|
|
53
207
|
|
|
54
208
|
Emits a JSON envelope `{document, sources, errors, ts}` for programmatic use.
|
|
55
209
|
|
|
210
|
+
```bash
|
|
211
|
+
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --full-git
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Lists every dirty path in §4 instead of capping at 40 and summarizing the rest.
|
|
215
|
+
Combines with any of the flags above.
|
|
216
|
+
|
|
56
217
|
## Usage — `--launch` (fresh session)
|
|
57
218
|
|
|
58
219
|
The command surface (`/build-loop:compose-handoff --launch`) handles this. The skill provides
|
|
@@ -84,7 +245,7 @@ new session starts.
|
|
|
84
245
|
`scripts/handoff/__main__.py` reads `.build-loop/` using only `json`, `pathlib`,
|
|
85
246
|
and `subprocess` from the standard library — no new dependencies. It does NOT
|
|
86
247
|
re-implement state parsing; it reads `state.json` directly at the same paths the
|
|
87
|
-
orchestrator already writes. Tests: `scripts/handoff/test_handoff.py
|
|
248
|
+
orchestrator already writes. Tests: `scripts/handoff/test_handoff.py`.
|
|
88
249
|
|
|
89
250
|
## Host-agnostic design
|
|
90
251
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop:ibr-bridge
|
|
3
|
-
description:
|
|
3
|
+
description: Route rendered UI design updates, comparisons, and audits to the IBR plugin when installed, falling back to build-loop's own driver otherwise. Use when a build changes, compares, or audits a rendered UI and that change needs visual evidence before it can close. Not for registering a new API (use `api-registry-bridge`) or PRD grounding (use `prd-bridge`).
|
|
4
4
|
version: 0.3.0
|
|
5
5
|
user-invocable: false
|
|
6
6
|
---
|
|
@@ -19,6 +19,7 @@ At Phase 1 Assess, the orchestrator reads `state.json.availablePlugins.ibr` (pop
|
|
|
19
19
|
|
|
20
20
|
| Build-loop need | Primary (when `availablePlugins.ibr == true`) | Fallback (when IBR absent) |
|
|
21
21
|
|---|---|---|
|
|
22
|
+
| UI design update / comparison / audit | IBR `snapshot` + `compare`, `match`, or the narrowest platform `scan` | `ui-validator` / native AX / simulator or browser screenshots + static scanner |
|
|
22
23
|
| Web UI verify | IBR `scan` against the dev-server route | `ui-validator` agent + browser/screenshot tooling |
|
|
23
24
|
| macOS UI verify | IBR `scan_macos` against the running `.app` | `native-ax-driver` (`skills/native-ax-driver/`) pid-anchored AX-tree + screenshot |
|
|
24
25
|
| iOS sim UI verify | IBR `scan` against the booted sim (when supported) | `xcrun simctl io booted screenshot` + `idb ui` for interaction |
|
|
@@ -61,6 +62,8 @@ The bridge returns results in the same envelope shape regardless of which route
|
|
|
61
62
|
|
|
62
63
|
The orchestrator forwards `verification` and `artifacts` to the BL-1 gate envelope as the chunk's `verification` and `evidence_paths` fields.
|
|
63
64
|
|
|
65
|
+
The binding automatic trigger and viewer boundary are defined once in `../../references/ibr-ui-verification-policy.md`.
|
|
66
|
+
|
|
64
67
|
## Status: 0.3.0 (2026-06-04)
|
|
65
68
|
|
|
66
69
|
- Reversed the explicit-only default. IBR is now the preferred primary when present; build-loop-owned `native-ax-driver` / `ui-validator` is the always-available fallback.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: knowledge
|
|
3
|
-
description: Canonical build-loop-memory framework. Use when the user asks to "record a decision", "log an ADR", "write an MADR", "capture this choice", "regenerate the decisions index", "validate knowledge", "migrate feedback to decisions", or "recall <topic>". ALSO the read-only review surface (review mode): "review my decisions", "show review queue", "check decision rot", "list open conflicts", "find stale procedures", or `/knowledge:review`. Active durable writes go to
|
|
4
|
-
user-invocable:
|
|
3
|
+
description: Canonical build-loop-memory framework. Use when the user asks to "record a decision", "log an ADR", "write an MADR", "capture this choice", "regenerate the decisions index", "validate knowledge", "migrate feedback to decisions", or "recall <topic>". ALSO the read-only review surface (review mode): "review my decisions", "show review queue", "check decision rot", "list open conflicts", "find stale procedures", or `/knowledge:review`. Active durable writes go to the resolved build-loop-memory root (override via `$BUILD_LOOP_MEMORY_ROOT`; per-user default otherwise — see `scripts/_paths.py:memory_store_root()`); legacy `.episodic/` paths are migration/archive inputs only.
|
|
4
|
+
user-invocable: false
|
|
5
5
|
when_to_use: |
|
|
6
6
|
- User wants to record a substantive choice with rationale
|
|
7
7
|
- User asks to regenerate canonical decision indexes or validate decision files
|
|
@@ -12,7 +12,7 @@ when_to_use: |
|
|
|
12
12
|
- Auto-capture (Phase 3) and consolidation (Phase 4) are NOT yet
|
|
13
13
|
implemented; this skill covers Phase 1 (manual + scripted) and
|
|
14
14
|
Phase 2 (Postgres + pgvector retrieval) only.
|
|
15
|
-
namespace:
|
|
15
|
+
namespace: resolved build-loop-memory root ($BUILD_LOOP_MEMORY_ROOT override, else per-user default — canonical), .build-loop/events.jsonl (repo-local runtime), legacy .episodic/ (migration/archive only)
|
|
16
16
|
---
|
|
17
17
|
|
|
18
18
|
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
@@ -20,15 +20,16 @@ namespace: ~/dev/git-folder/build-loop-memory/ (canonical), .build-loop/events.j
|
|
|
20
20
|
# Knowledge — Canonical Build-Loop Memory (Phases 1 + 2)
|
|
21
21
|
|
|
22
22
|
This skill is the entrypoint for the four-memory-types framework. The
|
|
23
|
-
full design lives
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
full design lives in "Repo Episodic Memory Framework" (private research
|
|
24
|
+
note — substance summarized here; see §11–§14 for the four-memory-type
|
|
25
|
+
taxonomy, extraction pipeline, and Postgres schema). This skill's
|
|
26
|
+
`scripts/` are the executable source of truth for structural changes;
|
|
27
|
+
the research note is background reading, not a required dependency.
|
|
27
28
|
|
|
28
29
|
## What lives where
|
|
29
30
|
|
|
30
31
|
```
|
|
31
|
-
|
|
32
|
+
<build-loop-memory root>/ # resolved by scripts/_paths.py:memory_store_root()
|
|
32
33
|
├── projects/<project>/decisions/ # canonical MADR decisions + INDEX.md
|
|
33
34
|
├── projects/<project>/lessons/ # project-specific lessons
|
|
34
35
|
├── lessons/ # cross-project lessons
|
|
@@ -72,7 +73,7 @@ relevant prior memory rather than reading INDEX.md wholesale. See
|
|
|
72
73
|
2. Run `write_decision.py` with the required flags. The script:
|
|
73
74
|
- Allocates the next sequential ID (zero-padded 4-digit).
|
|
74
75
|
- Writes the MADR to
|
|
75
|
-
|
|
76
|
+
`<build-loop-memory root>/projects/<project>/decisions/<canonical-id>.md` (root resolved per `scripts/_paths.py:memory_store_root()`) using
|
|
76
77
|
`skills/knowledge/templates/madr-minimal.md` as the body
|
|
77
78
|
scaffold (filled from CLI flags).
|
|
78
79
|
- Regenerates the canonical decisions `INDEX.md`.
|
|
@@ -106,12 +107,23 @@ the current version.
|
|
|
106
107
|
`write_decision.py` calls the validator as a pre-write gate; you can
|
|
107
108
|
also run it standalone over the whole tree.
|
|
108
109
|
|
|
109
|
-
## Postgres connection
|
|
110
|
+
## Postgres connection (optional — Phase 2 only)
|
|
110
111
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
The entire Postgres/pgvector/Ollama-embedding stack is **optional**. Phase 1
|
|
113
|
+
(file-only decisions) works with zero DB configuration; `write_decision.py`'s
|
|
114
|
+
DB write is best-effort and never fails the file write (see "DB errors do NOT
|
|
115
|
+
fail the file write" above). Skip this section entirely if you only want
|
|
116
|
+
Phase 1.
|
|
117
|
+
|
|
118
|
+
When you do want Phase 2 retrieval, DB-side scripts resolve a connection
|
|
119
|
+
string via `scripts/_db_url.py:resolve_db_url()`, in order:
|
|
120
|
+
|
|
121
|
+
1. `$BUILD_LOOP_DATABASE_URL`
|
|
122
|
+
2. `$DATABASE_URL`
|
|
123
|
+
3. `~/.config/agent-memory/connection.env` (`DATABASE_URL=postgresql://$USER@localhost:5432/agent_memory` is a reasonable local default to put there)
|
|
124
|
+
|
|
125
|
+
Per-project schema defaults to `$AGENT_MEMORY_SCHEMA` or `personal_memory`;
|
|
126
|
+
this repo uses `build_loop_memory`. The schema name is also configurable via
|
|
115
127
|
the `--schema` flag on each DB-aware script.
|
|
116
128
|
|
|
117
129
|
## Review mode (read-only)
|
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
framework (Working / Episodic / Semantic / Procedural). It does NOT modify
|
|
8
8
|
any data; it lists what humans need to decide on.
|
|
9
9
|
|
|
10
|
-
The full design lives
|
|
11
|
-
|
|
12
|
-
(see §11–§14).
|
|
10
|
+
The full design lives in "Repo Episodic Memory Framework" (private
|
|
11
|
+
research note — substance summarized here; see §11–§14).
|
|
13
12
|
|
|
14
13
|
Companion scripts: `scripts/knowledge_review.py` (aggregates all four sections into a
|
|
15
14
|
markdown report), `scripts/detect_decision_rot.py` (rot section),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mcp-builder
|
|
3
|
-
description:
|
|
3
|
+
description: Build, package, or debug an MCP server and its tools. Use when the user is adding MCP tools, or working on `.mcp.json`, transport, or bundling. Not for scaffolding the plugin around it (use `plugin-builder`; pair the two when a plugin exposes MCP tools).
|
|
4
4
|
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: model-bakeoff
|
|
3
|
-
description:
|
|
3
|
+
description: Run the same bounded change across multiple models in parallel, then deterministically score and merge the best result. Use when the user says "bake-off", "compare models on this task", "which model is best at", or "A/B test these models". Not for picking a single model tier for one agent (use `model-tiering`).
|
|
4
4
|
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,22 +8,51 @@ user-invocable: false
|
|
|
8
8
|
|
|
9
9
|
Run a fair, evidence-based competition where several models each solve the *same* change end-to-end, then merge the best result. One orchestrator (this session) coordinates; contestants are single agents (measure the model, not a multi-agent loop). Repeat per change, accumulating merges on one experiment branch.
|
|
10
10
|
|
|
11
|
+
## Validation contract (define BEFORE any dispatch)
|
|
12
|
+
|
|
13
|
+
Fix the grading before running — a metric invented after seeing outputs bends to them.
|
|
14
|
+
|
|
15
|
+
1. **Metric + rubric + judge, up front.** Write the exact success metric, the rubric, and the pass/fail threshold BEFORE dispatch. Name the **independent judge** (a non-contestant model, e.g. Fable) for subjective dims. No post-hoc scoring.
|
|
16
|
+
2. **Reproduce the baseline FAILURE first.** To prove an intervention (profile/scaffold/fix) makes a model succeed, first REPRODUCE the failure deterministically. n=1 anecdotal failures don't generalize — a task where the control already passes has no fix to validate. (2026-07-09: "kimi fails multi-crate Rust" did NOT reproduce on synthetic 2-crate tasks — the control passed both a 3-file crate and a 2-crate cross-crate task via the default profile; the original sandbox-dogfood failure was task-specific, not a general ceiling.)
|
|
17
|
+
3. **Task at the failure boundary.** If every arm passes, the task is too easy → no signal to separate arms. Calibrate difficulty until the control fails.
|
|
18
|
+
4. **A control arm.** Always include the default-profile / no-intervention (and, for harness work, the no-harness one-shot) arm to isolate the intervention's marginal value.
|
|
19
|
+
|
|
20
|
+
## Model + thinking identity (mandatory data contract)
|
|
21
|
+
|
|
22
|
+
A benchmark measures a **model at a thinking level and mode**, not a model name alone. Use Benchmark Lab's existing `abc-comparison/v2` artifact; do not create a Build Loop-only benchmark schema. Every arm adds:
|
|
23
|
+
|
|
24
|
+
- `model`: exact provider model/version, separate from the host or harness.
|
|
25
|
+
- `effort`: exact effective provider/runtime label, or `unknown`.
|
|
26
|
+
- `effort_normalized`: `none|minimal|low|medium|high|xhigh|max|ultra|unknown`.
|
|
27
|
+
- `effort_provenance`: `source_document|experiment_config|runtime_log|unknown`.
|
|
28
|
+
- `effort_evidence`: source page/table/footnote for published data, or exact config/command/log evidence for our test.
|
|
29
|
+
- `mode`: `single_agent|multi_agent|adaptive|unknown`.
|
|
30
|
+
|
|
31
|
+
These are additive arm fields on the canonical artifact, following the existing field-observation contract. Benchmark Lab owns validation, normalization, and aggregation, but its current converter does not retain these additive fields. Preserve the raw artifact as source evidence until that Lab-owned extension lands; ingest acceptance alone is not proof of retention. Never infer effort from a model default or translate provider labels without evidence. If a source omits row-level effort, record `unknown`, cite the omission, and mark the comparison effort-confounded/directional. `ultra` or another multi-agent mode is a distinct treatment arm, never a higher single-agent score.
|
|
32
|
+
|
|
33
|
+
## When scoring: check the CODE and the OUTPUT, and distrust the rig
|
|
34
|
+
|
|
35
|
+
- **Check the produced code AND its oracle output — never "it ran."** Read the code; run the oracle; parse the RIGHT signal. (2026-07-09: an auto-grep matched the lib unit-test line "0 passed" and mislabeled a 2/5-passing control as FAIL; multi-binary `cargo test` needs pass/fail SUMMED across binaries, not first-match. Always confirm the specific test binary that carries the assertions.)
|
|
36
|
+
- **Separate the measurement apparatus from the thing measured.** The **rig** = everything that is NOT the model or the code under test: the grading script, the exact command + flags you invoke, the tooling environment (installed binaries, language toolchain, PATH), and the fixtures/scaffold. A **rig bug** is a defect in that apparatus that yields a false pass or a false fail wrongly blamed on the model. Before trusting any `0` or any FAIL, confirm the rig produced a *valid run*: the command parsed, the tools were present, the oracle actually executed against real output. Three rig bugs on 2026-07-08, each first mis-scored as a model failure: (a) `pytest` absent from the grading env → a contestant looped on a false-negative it could never clear; (b) `harness swarm --segments` expects a manifest FILE, not an integer count → the treatment arm produced 0 files twice on a malformed command; (c) an auto-grep read the wrong `cargo test` binary's summary line → a 2-of-5-passing run was labeled FAIL. None were the model; all were the rig.
|
|
37
|
+
|
|
11
38
|
## Roster & dispatch (verified handles)
|
|
12
39
|
- Opus 4.8 → `Agent(model: "opus")`; Sonnet 5.0 → `Agent(model: "sonnet")` (`sonnet` = latest, NOT 4.x — older Sonnets have no clean subagent handle).
|
|
13
|
-
-
|
|
40
|
+
- Codex/OpenAI → read the exact model id and requested effort from the experiment manifest; pass both explicitly (for example `model: "gpt-5.6-terra"`, `config: {model_reasoning_effort: "high"}`). Capture the effective runtime config in the arm log; do not rely on `~/.codex/config.toml` defaults or guess `-codex` suffixes.
|
|
41
|
+
- Claude effort → use a host surface that can set the requested effort. If the available dispatch primitive cannot set it, record the effective value as `unknown`; do not label the arm `xhigh` from intent alone.
|
|
14
42
|
- Independent judge: prefer a NON-contestant model (e.g. Fable). If unavailable, the orchestrator scores subjective dims with over-cited evidence + a stated caveat, and leans on deterministic dims.
|
|
15
43
|
|
|
16
44
|
## Per-change protocol
|
|
17
45
|
1. **Baseline:** branch the experiment off clean `origin/main` (not a dirty/active branch). Confirm no concurrent session collides.
|
|
18
|
-
2. **
|
|
19
|
-
3. **
|
|
20
|
-
4. **
|
|
21
|
-
5. **
|
|
22
|
-
6. **
|
|
46
|
+
2. **Manifest:** pre-register each arm's exact model/version, requested thinking level, mode, dispatch surface, and evidence path in the run manifest. Pre-create the `abc-comparison/v2` arm fields above; update `effort` and `effort_evidence` from effective runtime evidence before scoring.
|
|
47
|
+
3. **Scaffold** one worktree per contestant off the experiment branch HEAD: `git worktree add -b bakeoff/<Cn>-<model> <path> <branch>`; `npm ci` (or lockfile-equiv) per worktree; copy `.env.local`.
|
|
48
|
+
4. **Brief** (IDENTICAL for all): give the *symptom* + acceptance criteria + a fair equal entrypoint pointer — WITHHOLD the diagnosis (that's what's scored). Add repo guardrails (see below).
|
|
49
|
+
5. **Dispatch** all contestants in parallel (Agent arms `run_in_background: true`; Codex arm blocks the turn — fine, the others run concurrently). Write the effective thinking setting and its runtime evidence back to the run manifest and observation arm before scoring.
|
|
50
|
+
6. **Commit stranded Codex work:** Codex's sandbox usually cannot write an external worktree's `.git` (`index.lock: Operation not permitted`). The orchestrator commits it: `git -C <worktree> add -A && git commit`. (RESULT.md is often gitignored → `git add -f`.)
|
|
51
|
+
7. **Score deterministically** (don't trust self-reports — re-run each contestant's committed code):
|
|
23
52
|
- Objective dims computed in code: typecheck, build, test, betterer, + the change-specific success criterion run on a fresh server. Weight these highest.
|
|
24
53
|
- Subjective dims (diagnosis depth, plan, code quality, intent fidelity) by the judge reading diffs + captured outputs.
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
8. **Scorecard** (rubric below) → **merge** best base onto the experiment branch, **grafting** distinct wins from the others (each graft: fixes a real gap the winner has, is isolable from the loser's *harmful* parts, verified by re-running). Document graft rationale.
|
|
55
|
+
9. **Re-verify the merged result**, regenerate coverage, validate the canonical observation through Benchmark Lab when available, commit. Then next change.
|
|
27
56
|
|
|
28
57
|
## Rubric (max 50; tune weights per task)
|
|
29
58
|
success-criteria attainment ×3 (objective) · build/typecheck/test/betterer ×2 (objective) · diagnosis accuracy ×2 · plan quality ×1 · code quality+scope ×1 · intent fidelity ×1. Objective dims dominate; the LLM judge is confined to subjective dims.
|
|
@@ -41,4 +70,13 @@ success-criteria attainment ×3 (objective) · build/typecheck/test/betterer ×2
|
|
|
41
70
|
Work ONLY in your worktree; no edits outside it; no deploy/push; no `--no-verify`; no DDL against the shared DB; unique per-model test-user id + id-scoped cleanup; verify by RUNNING (name the exact verification mechanism: curl the endpoint, CDP virtual authenticator for WebAuthn, function-level test for cleaners, screenshots for UI).
|
|
42
71
|
|
|
43
72
|
## Output
|
|
44
|
-
Per stage: a `SCORECARD.md` (rubric table + verdict + merge/graft rationale). At the end:
|
|
73
|
+
Per stage: a `SCORECARD.md` (rubric table + verdict + merge/graft rationale). At the end:
|
|
74
|
+
|
|
75
|
+
- `RESULTS.md`: cross-stage scoreboard, each arm labeled `model_id @ thinking level/mode`, per-model performance pattern, where multi-model merge beat any single model, and scoring-integrity caveats.
|
|
76
|
+
- `OBSERVATION.json`: canonical `abc-comparison/v2` rounds with each arm's exact model,
|
|
77
|
+
thinking fields, result metrics, and provenance. This is the machine-readable source of
|
|
78
|
+
truth; Benchmark Lab is the sole normalization and aggregation owner.
|
|
79
|
+
|
|
80
|
+
Preserve the raw JSON whether or not Benchmark Lab ingestion is available. Until the Lab
|
|
81
|
+
converter and storage retain these fields, do not use successful ingest as evidence that
|
|
82
|
+
thinking provenance survived, and do not aggregate results across thinking settings.
|