@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop:architecture-review
|
|
3
|
-
description:
|
|
3
|
+
description: Full architectural integrity pass — system flow, connections, documentation drift, and lessons in one report. Use when the user asks for "an architectural review" or "full integrity check" on a build crossing 2+ layers. Not for a single violation/orphan pass (use `architecture-rules`) — this is the heavier superset.
|
|
4
4
|
version: 0.1.0
|
|
5
5
|
user-invocable: false
|
|
6
6
|
source: NavGator/skills/code-review/SKILL.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop:architecture-rules
|
|
3
|
-
description:
|
|
3
|
+
description: Detect structural rule violations — layer violations, circular dependencies, and connection hotspots. Use when the user asks to "check for violations" or "find circular deps". Not for code with zero callers (use `architecture-dead`) or a full narrative review (use `architecture-review`).
|
|
4
4
|
version: 0.1.0
|
|
5
5
|
user-invocable: false
|
|
6
6
|
source: NavGator/commands/test.md
|
|
@@ -11,7 +11,7 @@ source_hash: 4a967c08ff3d7cddd408e7caefcd07b09e8931bcaccf9ea70c0f5aa94349e0d1
|
|
|
11
11
|
|
|
12
12
|
# Architecture Rules / Violation Check
|
|
13
13
|
|
|
14
|
-
Run NavGator's rules engine to detect architectural violations using the `mcp__plugin_navgator__rules` MCP tool. Classifies findings as blocking (circular dependency, layer violation, database isolation breach, frontend-direct-DB at error level) vs warning (hotspot, high-fan-out, orphan).
|
|
14
|
+
Run NavGator's rules engine to detect architectural violations using the `mcp__plugin_navgator__rules` MCP tool. Classifies findings as blocking (circular dependency, layer violation, database isolation breach, frontend-direct-DB at error level) vs warning (hotspot, high-fan-out, orphan, shallow-module).
|
|
15
15
|
|
|
16
16
|
> **Divergence note**: NavGator has no discrete SKILL.md for rules. The canonical wrapper is `commands/test.md`, which orchestrates `navgator rules` + `navgator dead` + pipeline traces. This skill extracts the rules-only workflow.
|
|
17
17
|
|
|
@@ -34,7 +34,7 @@ Run NavGator's rules engine to detect architectural violations using the `mcp__p
|
|
|
34
34
|
| Severity | Categories |
|
|
35
35
|
|----------|-----------|
|
|
36
36
|
| **Blocking** | `circular-dependency`, `layer-violation`, `database-isolation`, `frontend-direct-db` (error level) |
|
|
37
|
-
| **Warning** | `hotspot`, `high-fan-out`, `orphan` |
|
|
37
|
+
| **Warning** | `hotspot`, `high-fan-out`, `orphan`, `shallow-module` (thin pass-through: high fan-out, low fan-in — advisory design guidance, never blocks) |
|
|
38
38
|
|
|
39
39
|
3. Diff against the Phase 1 baseline if present in `.build-loop/state.json.architecture.rules.baseline`
|
|
40
40
|
4. Flag recurrences against `.navgator/lessons/lessons.json` (lessons with matching `signature`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop:architecture-scan
|
|
3
|
-
description:
|
|
3
|
+
description: Refresh build-loop's native component/connection data before any other architecture check runs. Use when the user asks for "an architecture scan" or Phase 1 Assess finds the data stale. Not for finding violations or dead code — `architecture-rules`/`architecture-dead` need this data first.
|
|
4
4
|
version: 0.1.0
|
|
5
5
|
user-invocable: false
|
|
6
6
|
source: NavGator/skills/architecture-scan/SKILL.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop:architecture-trace
|
|
3
|
-
description: Use when the user asks to "trace data flow", "follow this request end-to-end", or "show how X reaches Y".
|
|
3
|
+
description: Follow one component's connections end-to-end, input to output. Use when the user asks to "trace data flow", "follow this request end-to-end", or "show how X reaches Y".
|
|
4
4
|
version: 0.1.0
|
|
5
5
|
user-invocable: false
|
|
6
6
|
source: NavGator/commands/trace.md
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
|
|
9
9
|
# Attribution Standard
|
|
10
10
|
|
|
11
|
-
Four overlapping mechanisms make stripping attribution either illegal, mechanically tedious, or detectable. Each survives a different removal pattern. The research backing this skill is
|
|
11
|
+
Four overlapping mechanisms make stripping attribution either illegal, mechanically tedious, or detectable. Each survives a different removal pattern. The research backing this skill is "Apache-2.0 Attribution & Watermarking" (private research note, 2026-05-22 — substance summarized here).
|
|
12
12
|
|
|
13
13
|
## The four layers
|
|
14
14
|
|
|
@@ -21,9 +21,9 @@ Four overlapping mechanisms make stripping attribution either illegal, mechanica
|
|
|
21
21
|
|
|
22
22
|
## Canonical strings
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
**These are build-loop's own values** (this repo's actual copyright holder) — use them verbatim only when stamping attribution onto build-loop itself. **Applying this skill to any OTHER repo requires the target repo's own name/email/years**, not these: derive from `git config user.name` / `user.email` in that repo, an existing LICENSE/NOTICE holder if one is already present, or ask the user. The `attribution_stamp.py` script's `--name`/`--email`/`--years` flags default to the build-loop values below if omitted — **always pass all three explicitly for a non-build-loop repo**; never invoke the script bare against someone else's repo.
|
|
25
25
|
|
|
26
|
-
| Field | Value |
|
|
26
|
+
| Field | Value (build-loop's own) |
|
|
27
27
|
|---|---|
|
|
28
28
|
| Copyright holder | `Tyrone Ross, Jr` |
|
|
29
29
|
| SPDX email tail | `<46267523+tyroneross@users.noreply.github.com>` |
|
|
@@ -57,9 +57,9 @@ For Python-heavy repos with no `src/` directory (like agent-rally-point), pass t
|
|
|
57
57
|
```bash
|
|
58
58
|
python scripts/attribution_stamp.py \
|
|
59
59
|
--repo <path-to-repo> \
|
|
60
|
-
--name "
|
|
61
|
-
--email "
|
|
62
|
-
--years
|
|
60
|
+
--name "<target repo's copyright holder — NOT build-loop's, unless stamping build-loop itself>" \
|
|
61
|
+
--email "<target repo owner's email/SPDX tail>" \
|
|
62
|
+
--years <target repo's applicable year range> \
|
|
63
63
|
--canary-files <path1> <path2> \
|
|
64
64
|
[--paths <override-paths...>] \
|
|
65
65
|
[--restamp]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: auto-decision-capture
|
|
3
|
-
description:
|
|
3
|
+
description: Passively capture a substantive decision the user just made, in real time, into build-loop-memory. Fires automatically when the user confirms a choice or states a constraint — not user-invoked. Not for findings/issues (use `auto-finding-capture`), after-the-fact review (use `recursive-retrospective`), or surfacing an unstated call the user never saw so he can reverse it (use `silent-assumptions`).
|
|
4
4
|
user-invocable: false
|
|
5
5
|
when_to_use: |
|
|
6
6
|
- User issues a direct verbal marker ("let's go with X", "ship it", "use Y")
|
|
@@ -231,7 +231,9 @@ python3 scripts/recall.py --query "test framework"
|
|
|
231
231
|
## Extraction prompts (inline reference)
|
|
232
232
|
|
|
233
233
|
These three prompts are the canonical extraction templates from
|
|
234
|
-
|
|
234
|
+
"Repo Episodic Memory Framework" (private research note — substance
|
|
235
|
+
summarized here; see §12), reproduced in full below so this skill has
|
|
236
|
+
no dependency on the note being present.
|
|
235
237
|
Use them whenever you need to extract structured decisions from
|
|
236
238
|
unstructured conversation. Keep temperature low (0.1–0.3).
|
|
237
239
|
|
|
@@ -418,3 +420,30 @@ candidate, and promotes via `scripts/memory_writer.py --type lesson|feedback`
|
|
|
418
420
|
complementary: this skill catches what you can see during the turn; the
|
|
419
421
|
companion catches what the deterministic scanner can find at the end of
|
|
420
422
|
the session.
|
|
423
|
+
|
|
424
|
+
## The decision-surface family — one core, several variants
|
|
425
|
+
|
|
426
|
+
Four skills share one job: put a set of calls in front of the user and capture a
|
|
427
|
+
ruling. They differ only in the KIND of call, so they share a core rather than
|
|
428
|
+
forking one — the variant registry (`scripts/decision_surface.py`), the
|
|
429
|
+
interactive page and its save/self-publish plumbing
|
|
430
|
+
(`skills/decision-queue/assets/template.html`), and the durable writer
|
|
431
|
+
(`scripts/write_decision/__main__.py`). **Adding a variant is a registry entry,
|
|
432
|
+
never a fork of the core.**
|
|
433
|
+
|
|
434
|
+
**Choose by the question the user is actually asking, never by name.** An agent
|
|
435
|
+
that picks on name alone reaches for the one it already knows and rebuilds
|
|
436
|
+
something that exists.
|
|
437
|
+
|
|
438
|
+
| Member | Answers | Layer | Does work stop? |
|
|
439
|
+
|---|---|---|---|
|
|
440
|
+
| [`silent-assumptions`](../silent-assumptions/SKILL.md) | "What did you decide without me?" | surface | No — work continued under your default |
|
|
441
|
+
| [`decision-queue`](../decision-queue/SKILL.md) | "What is waiting on me?" | surface | Yes — work has stopped |
|
|
442
|
+
| [`auto-decision-capture`](../auto-decision-capture/SKILL.md) | "What did we already settle, and where is it written down?" | capture | No — fires passively |
|
|
443
|
+
| [`auto-finding-capture`](../auto-finding-capture/SKILL.md) | "What concrete issues has anyone surfaced?" | capture | No — fires passively |
|
|
444
|
+
|
|
445
|
+
`python3 scripts/decision_surface.py` prints this table (`--json` for machines).
|
|
446
|
+
The registry is the one place a member is declared; this table is its prose
|
|
447
|
+
mirror and must match it.
|
|
448
|
+
|
|
449
|
+
**You are here: `auto-decision-capture`.** Reach for `silent-assumptions` when the user never saw the call at all and you need it rendered for a ruling; this skill records a decision the user already made, it does not surface one he did not know about.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: auto-finding-capture
|
|
3
|
-
description:
|
|
3
|
+
description: Passively capture a concrete, severity-labeled finding or issue into the backlog, in real time. Fires automatically whenever an agent, audit, or critic surfaces one — never gated behind a user selection. Not for decisions (use `auto-decision-capture`) or for a judgement call the agent made without asking, which is not a defect and does not belong in the backlog (use `silent-assumptions`).
|
|
4
4
|
user-invocable: false
|
|
5
5
|
when_to_use: |
|
|
6
6
|
- Any agent/audit/critic states a concrete, severity-labeled issue in the session
|
|
@@ -117,3 +117,30 @@ An LLM-judged extraction path (for findings stated without a severity label or a
|
|
|
117
117
|
finding keyword) is a possible future extension. v1 is deterministic-only by
|
|
118
118
|
design: it satisfies the acceptance contract, adds no dependency, and keeps
|
|
119
119
|
precision high. Add the LLM path only against a named, observed miss in this repo.
|
|
120
|
+
|
|
121
|
+
## The decision-surface family — one core, several variants
|
|
122
|
+
|
|
123
|
+
Four skills share one job: put a set of calls in front of the user and capture a
|
|
124
|
+
ruling. They differ only in the KIND of call, so they share a core rather than
|
|
125
|
+
forking one — the variant registry (`scripts/decision_surface.py`), the
|
|
126
|
+
interactive page and its save/self-publish plumbing
|
|
127
|
+
(`skills/decision-queue/assets/template.html`), and the durable writer
|
|
128
|
+
(`scripts/write_decision/__main__.py`). **Adding a variant is a registry entry,
|
|
129
|
+
never a fork of the core.**
|
|
130
|
+
|
|
131
|
+
**Choose by the question the user is actually asking, never by name.** An agent
|
|
132
|
+
that picks on name alone reaches for the one it already knows and rebuilds
|
|
133
|
+
something that exists.
|
|
134
|
+
|
|
135
|
+
| Member | Answers | Layer | Does work stop? |
|
|
136
|
+
|---|---|---|---|
|
|
137
|
+
| [`silent-assumptions`](../silent-assumptions/SKILL.md) | "What did you decide without me?" | surface | No — work continued under your default |
|
|
138
|
+
| [`decision-queue`](../decision-queue/SKILL.md) | "What is waiting on me?" | surface | Yes — work has stopped |
|
|
139
|
+
| [`auto-decision-capture`](../auto-decision-capture/SKILL.md) | "What did we already settle, and where is it written down?" | capture | No — fires passively |
|
|
140
|
+
| [`auto-finding-capture`](../auto-finding-capture/SKILL.md) | "What concrete issues has anyone surfaced?" | capture | No — fires passively |
|
|
141
|
+
|
|
142
|
+
`python3 scripts/decision_surface.py` prints this table (`--json` for machines).
|
|
143
|
+
The registry is the one place a member is declared; this table is its prose
|
|
144
|
+
mirror and must match it.
|
|
145
|
+
|
|
146
|
+
**You are here: `auto-finding-capture`.** Reach for `silent-assumptions` when the thing to surface is a judgement call YOU made rather than a defect you found; a silent assumption is not a finding and does not belong in the backlog.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: build-loop
|
|
3
3
|
description: "Orchestrated build loop for multi-step code work. TRIGGER on verb language ('build', 'implement', 'create', 'add', 'ship', 'wire up', 'integrate', 'refactor', 'migrate', 'rewrite', 'replace') OR symptom language ('fix', 'broken', 'doesn't work', 'isn't loading', 'not displaying', 'missing', 'should show', 'needs to', 'make it', 'show this differently') OR any task touching 2+ files, adding/removing an endpoint, crossing an architectural boundary, or attached screenshots of a bug. SKIP one-line edits, pure Q&A, conversational clarifications, status checks, and trivial typos/renames."
|
|
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 -->
|
|
@@ -26,22 +26,24 @@ Intent → internal mode:
|
|
|
26
26
|
- **Root-cause analysis**: blameless RCA producing durable system levers — "root cause", "why did this fail", "post-mortem" (delegates to the `root-cause-analysis` skill).
|
|
27
27
|
- **Retrospective**: recursive learning retrospective on a build/project — "retrospective", "retro", "what did we learn", "review this project's trajectory" (delegates to `recursive-retrospective`). *Example: "I need a root cause and a retrospective" → run does both.*
|
|
28
28
|
- **Plan / spec**: "write a plan", "spec this" → spec-writing + plan-verify.
|
|
29
|
+
- **Repository maintenance / closeout**: repository structure, duplicate source, sibling consolidation, build artifacts, branches, worktrees, stashes, or local-main closeout → `repo-maintenance` (`repo-closeout` remains a temporary compatibility alias).
|
|
29
30
|
- **PRD**: "start a PRD", "spec out a new app" → prd-bridge / start-prd flow.
|
|
30
31
|
- **Self-improve / promote / knowledge / handoff / memory setup**: "scan recent runs", "promote this experiment", "record a decision", "hand this off", "set up memory" → the matching internal skill (self-improve, promotion-reviewer, knowledge, handoff, setup-memory).
|
|
32
|
+
- **Drain proposals**: "drain proposals", "review the proposal backlog", "what proposals are open" → the `drain-proposals` skill. Interactive and never auto-applies; every item needs an explicit apply / reject / defer.
|
|
31
33
|
|
|
32
34
|
**Design intent:** one command for humans, plain-language routing, everything else agent-invoked within build-loop. If a request doesn't match a mode, run treats it as a Build task or asks one clarifying question — it never makes the user pick a command.
|
|
33
35
|
|
|
34
36
|
### Parallelism config
|
|
35
37
|
|
|
36
|
-
Fan-out width is
|
|
38
|
+
Fan-out width is supervisor-controlled. `autonomy_supervisor.py fanout` resolves `parallelism.py` capacity, then applies live backpressure. Effective width is the minimum of independent MECE work, project/request capacity, CPU headroom, cloud token budget, shared cross-session capacity, and the absolute ceiling of 150. Default project capacity remains 8.
|
|
37
39
|
|
|
38
|
-
To
|
|
40
|
+
To set a project preference, use `.build-loop/config.json`:
|
|
39
41
|
|
|
40
42
|
```json
|
|
41
43
|
{ "parallelism": { "maxImplementers": 8 } }
|
|
42
44
|
```
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
The preference never forces that many workers. The supervisor admits only independent chunks supported by live resource and provider telemetry. Values above 150 are clamped; local capacity also preserves two CPU cores for the orchestrator and host OS.
|
|
45
47
|
|
|
46
48
|
## Autonomous Mode + Per-Commit Mode
|
|
47
49
|
|
|
@@ -50,7 +52,7 @@ Both are conditional modes — their flag tables, budget/iteration caps, questio
|
|
|
50
52
|
- the invocation carries `--long` / `--budget` / `--autonomous=false`, or the goal text matches a long-running keyword (`overnight`, `large-scale`, `multi-day`, …) → **Autonomous Mode** detail;
|
|
51
53
|
- `state.json.selfRecursive.enabled` is true, or the invocation carries `--per-commit` / `--no-per-commit` → **Per-Commit Mode** detail.
|
|
52
54
|
|
|
53
|
-
Default behavior with none of those signals: classic single-pass Phase 1–6, 2h budget, autonomous queue
|
|
55
|
+
Default behavior with none of those signals: classic single-pass Phase 1–6, 2h budget, autonomous execution-queue drain on. Backlog items stay deferred until class-aware promotion at a planning boundary; initiatives and decisions never auto-promote.
|
|
54
56
|
|
|
55
57
|
## Scope Check
|
|
56
58
|
|
|
@@ -102,6 +104,30 @@ Self-heal is **both reactive and proactive**. It is not only triggered by errors
|
|
|
102
104
|
|
|
103
105
|
**Closure test (counterfactual):** a root cause is not closed at "an actionable control." It is closed only when the named lever would have **prevented, detected, or contained THIS exact failure on the real input** (not a hand-constructed one) — a control that exists but stays dormant on the real signal does not count. **Fix strength:** prefer the strongest feasible control — `eliminate → impossible-state → automated-block → detect → contain → decision-support → docs` — over the reflex "add a detect-gate." A dependency you don't own is never "ignore it": isolate / validate / monitor / degrade / escalate / accept-residual-risk explicitly.
|
|
104
106
|
|
|
107
|
+
### Finding disposition — "pre-existing" is not a decision (C-FINDINGS / every_finding_dispositioned)
|
|
108
|
+
|
|
109
|
+
Every finding a run surfaces — lint, type, security, scanner or detector warning, failing or skipped test, deprecation, contract drift — reaches exactly one terminal state before "done": **fixed**, **waived against a durable record**, or **escalated as a new record**. "Pre-existing" says when a defect arrived, never whether it may stand. A report that names a warning and moves on has disclosed it, not dispositioned it; across runs that is how a repo accretes permanent warnings every future run re-observes and re-dismisses at full token cost.
|
|
110
|
+
|
|
111
|
+
Route each finding: **inside** the run's owned files → fix it (C-HEAL self-heal, then C-RCA to root cause). **Outside** them → escalate and record — `scripts/backlog.py new` for this repo, `scripts/file_to_operations_center.py` for any other (`references/keep-going-policy.md` §"Flagged-issue default route") — and report the returned id. Scope bounds what a run FIXES; it never bounds what a run RECORDS, so out-of-scope findings get handed off rather than absorbed. **Genuinely acceptable** → waive, and only against a durable record:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
python3 scripts/waivers.py check --repo "$PWD" --rule <id> --path <file> [--anchor <sym|line:N>] --json # exit 0 = already waived
|
|
115
|
+
python3 scripts/waivers.py new --repo "$PWD" --rule <id> --path <file> --rationale "..." --authority "user|agent:<name>|decision:<path>" --expires "<date|version|until-file-changes>"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Before filing a finding that a value is factually WRONG about the world, search (C-CLAIMS/search_before_contradicting_code).**
|
|
119
|
+
Company and product names, rebrands, acquisitions, model IDs, versions, pricing, API
|
|
120
|
+
signatures, deprecations, legal names: all of these change after a model's cutoff, so
|
|
121
|
+
disagreeing with one is a prompt to search, never a finding on its own. Two tells that
|
|
122
|
+
the code is right and the model is stale: the value sits among siblings that are plainly
|
|
123
|
+
correct, or a migration/repair script/test already treats the other value as legacy. A
|
|
124
|
+
search costs seconds; a wrong correction to a world-fact ships a regression and fights
|
|
125
|
+
whatever migration already encodes the new value. Walk the tree in
|
|
126
|
+
`references/research-trigger-policy.md` §"Encounter Trigger" — it fires in ANY phase,
|
|
127
|
+
including runs whose goal carries no research signal, which is exactly when this misses.
|
|
128
|
+
|
|
129
|
+
An agent's own unrecorded "out of scope" or "not mine" is not a waiver, and a user's spoken waiver counts only once written. Every waiver names its expiry; absent one it defaults to re-surfacing the next time its covered file changes. Phase 4G carries the `## Findings disposition` table — one row per finding, its state, and the record it points at.
|
|
130
|
+
|
|
105
131
|
### Follow-up auto-drain at chunk boundary
|
|
106
132
|
|
|
107
133
|
A chunk boundary is not a checkpoint. When the orchestrator (or any session under the build-loop skill) is about to write a final report containing a "still-to-do" / "deferred" / "next pass" list of same-shape, same-intent items, route those items through the follow-up queue instead of writing them to the user as prose questions:
|
|
@@ -139,6 +165,8 @@ their brief explicitly hands them a bounded implementation task.
|
|
|
139
165
|
|
|
140
166
|
**Codex permission gate**: generic Build Loop wording such as "parallel-safe groups" is not by itself authorization to spawn Codex subagents. In Codex, spawn workers only when the user explicitly asks for delegation/parallel agent work or uses a command flag such as `--parallel`. Without that signal, keep execution local while preserving the MECE plan.
|
|
141
167
|
|
|
168
|
+
**System-access requests**: before a read-only command could trigger a macOS administrator or privacy request, run it through `scripts/system_access_request.py` with a specific `--purpose`, `--scope`, and `--requester`. The wrapper prints that explanation before dispatch, records the first request, and makes identical callers wait. A dispatched denial, cancellation, or failure never triggers an automatic retry; only a process that failed before dispatch is retryable. Use this path for `sfltool dumpbtm`; do not invoke it directly.
|
|
169
|
+
|
|
142
170
|
**Native agent-rally capabilities**: build-loop vendors `skills/agent-rally-point/SKILL.md` and `skills/agent-rally-watcher/SKILL.md` as embedded mini-plugin skills. Use those skill entrypoints for Rally Point substrate or watcher work before reaching for the standalone repos. The grouped extraction contract is `scripts/rally_point/plugin_boundary.json`; validate it with `python3 scripts/agent_rally.py boundary --repo "$PWD" --check --json`.
|
|
143
171
|
|
|
144
172
|
**Ephemeral plan cleanup**: never delete a `.build-loop/plan*.md` or
|
|
@@ -146,7 +174,7 @@ their brief explicitly hands them a bounded implementation task.
|
|
|
146
174
|
build-loop-memory via `python3 scripts/archive_project_plan.py <plan> --workdir
|
|
147
175
|
"$PWD"`. Use `--remove-source` only after the archive write succeeds.
|
|
148
176
|
|
|
149
|
-
**Coding-host coordination polling gate**: when a build-loop task involves more than one coding host, an active rally-point peer, an active coord file, any `inbox/<tool>.jsonl` message, or any `inbox/all.jsonl` broadcast, the current host must keep a cheap watcher live while work is in flight. Rally/coordination output is routing metadata only, not verification evidence; use it to decide who to coordinate with, then verify code/package/release facts against the authoritative source.
|
|
177
|
+
**Coding-host coordination polling gate**: when a build-loop task involves more than one coding host, an active rally-point peer, an active coord file, any `inbox/<tool>.jsonl` message, or any `inbox/all.jsonl` broadcast, the current host must keep a cheap watcher live while work is in flight. Rally/coordination output is routing metadata only, not verification evidence; use it to decide who to coordinate with, then verify code/package/release facts against the authoritative source. Set `TOOL_NAME` to the stable host family (`claude_code`, `codex`, `cursor`, etc.) and `SESSION_ID` to the stable host session. Build Loop qualifies that pair into an exact native Rally actor; Build Loop local fallback deliberately keeps the base tool plus session id. Run a one-shot status check first:
|
|
150
178
|
|
|
151
179
|
```bash
|
|
152
180
|
python3 scripts/coordination_status.py --workdir "$PWD" --session-id "$SESSION_ID" --tool "$TOOL_NAME" --json
|
|
@@ -158,7 +186,7 @@ If the status has `active_peers`, `coordination_file`, `inbox_unread_count > 0`,
|
|
|
158
186
|
python3 scripts/coordination_watch.py --workdir "$PWD" --session-id "$SESSION_ID" --tool "$TOOL_NAME" --interval 5 --jsonl --baseline-current
|
|
159
187
|
```
|
|
160
188
|
|
|
161
|
-
Keep that process attached in the host's tool/session mechanism and poll it before commits, before final responses, and after any 30s work interval. When it emits a revision or inbox change, immediately rerun `coordination_status.py --tool "$TOOL_NAME"`, then run `python3 scripts/rally_point/inbox.py read --workdir "$PWD" --tool "$TOOL_NAME" --json` to read the
|
|
189
|
+
Keep that process attached in the host's tool/session mechanism and poll it before commits, before final responses, and after any 30s work interval. When it emits a revision or inbox change, immediately rerun `coordination_status.py --tool "$TOOL_NAME" --session-id "$SESSION_ID"`, then run `python3 scripts/rally_point/inbox.py read --workdir "$PWD" --tool "$TOOL_NAME" --session-id "$SESSION_ID" --json` to read the exact native actor's inbox (or the base-tool local inbox) plus the common broadcast inbox, and post the required channel response. Do not ask the user to paste peer messages that are already present in the rally channel, the addressed inbox, or the common broadcast inbox.
|
|
162
190
|
|
|
163
191
|
## Intent Capability Pack
|
|
164
192
|
|
|
@@ -198,6 +226,8 @@ Build-loop prefers installed plugins and skills over reinventing patterns. Each
|
|
|
198
226
|
|
|
199
227
|
Understand current state, load memory through the automatic context bootstrap, detect tools, map architecture, capture north star + update intent, assess clean-sheet vs current-constraints approach lenses, define goal and criteria. Writes `.build-loop/context-bootstrap.json`, `.build-loop/context/current.md` via `scripts/context_snapshot.py`, `.build-loop/intent.md`, and `.build-loop/goal.md`.
|
|
200
228
|
|
|
229
|
+
Groundwork intake: when `$GROUNDWORK_BUILD_REQUEST` or `.designdoc/build-request.json` is present, validate it with the adjacent canonical Spec through `scripts/groundwork_exchange.py validate-request` before planning; failures block Execute.
|
|
230
|
+
|
|
201
231
|
Key steps: detect plugins → set sub-routers → map architecture → run `scripts/context_bootstrap.py` (bootstrap surfaces queue counts+top items+progressive lessons in the packet; check `session_prefs.continue_from_queues` and ask the user ONCE when "ask" and any queue has items; see `agents/build-orchestrator.md` §"Queue surfacing + session preference" and `AGENTS.md` §"Memory bootstrap + queue surfacing" for the full surface+ask protocol) → run `scripts/research_trigger.py` to decide Research plugin depth and blocked final-claim handling → run `scripts/task_surface.py` when surfacing open work → load PRD if present → capture intent → capture approach lenses for non-trivial recommendations → for UI work load `references/ui-io-contract.md` and inventory affected inputs/outputs → define scoring criteria → synthesis-density routing (count `synthesis_dimensions`; escalate to thinking-tier when > 5).
|
|
202
232
|
|
|
203
233
|
**Load `skills/build-loop/references/phase-1-assess.md`** for the full step-by-step protocol including UI pre-flight, workspace concurrency checks, recovery check, and synthesis-density routing details.
|
|
@@ -222,17 +252,28 @@ Key steps: subagent-driven-development → model assignment (Sonnet default) →
|
|
|
222
252
|
|
|
223
253
|
Seven sub-steps run in order (A–G): Critic → Validate → Optimize (opt-in) → Fact-Check → Simplify → Auto-Resolve → Report. F (Auto-Resolve) drains non-destructive items via `scripts/autonomy_gate.py` (auto/warn/confirm/block routing). G (Report) is final-pass-only.
|
|
224
254
|
|
|
225
|
-
|
|
255
|
+
Groundwork return: when Phase 1 accepted a request, Review-G emits `.designdoc/implementation-map.json` through `scripts/groundwork_exchange.py emit-map`; failures route to Iterate and Groundwork alone calculates convergence.
|
|
256
|
+
|
|
257
|
+
Key steps: independent-auditor (build scope) adversarial read → build-loop-owned UI validation when UI changed → code-based graders → live smoke gate → LLM judges → fact-checker + mock-scanner + architecture-rules in parallel → public/private documentation boundary check when docs changed or publication is in scope → simplify → autonomy gate queue → final scorecard + run entry (asserted by `scripts/run_close_lint.py` — a report may not be emitted while the `runs[]` write is missing) → **non-gating post-push retrospective dispatch** (`build-loop:retrospective-synthesizer` writes the 9-section `.build-loop/retrospectives/<date>/<run-id>.md` + ≤5-line summary surfaced inline, AND a required durable copy to `build-loop-memory/projects/<slug>/retrospectives/` via `memory_writer.py` — `.build-loop/` is gitignored, so the local copy alone does not survive a clone; enforce-candidates land at `.build-loop/proposals/enforce-from-retro/` for human review — never auto-promoted; fire-and-continue, run-close is NOT delayed). On self-recursive runs, G appends `## Self-modifications (readback)` listing every self-modification attempted this run — file, what/why, gate verdict, additional-review finding — so the human sees results at the end without the loop stopping. Full spec in `agents/build-orchestrator.md` §G.
|
|
258
|
+
|
|
259
|
+
**Documentation publication boundary.** When documentation changed, a repository is
|
|
260
|
+
being prepared for publication, or Review finds plan/RCA/audit/retrospective material,
|
|
261
|
+
load `references/public-repository-documentation-boundary.md`. Verify repository
|
|
262
|
+
visibility. Private repositories retain internal records. Public repositories retain
|
|
263
|
+
only current user-, contributor-, and agent-facing product material; archive internal
|
|
264
|
+
plans, RCAs, future architecture, review artifacts, and maintainer operations to the
|
|
265
|
+
private `build-loop-memory` project lane before removing and ignoring them. A missing
|
|
266
|
+
private-memory receipt blocks the documentation review from passing.
|
|
226
267
|
|
|
227
268
|
**Load `skills/build-loop/references/phase-4-review.md`** for sub-step details, gate matrices, routing rules, and the full Sub-step F Auto-Resolve protocol (all 4 verdict arms including `warn` exit-0 behavior).
|
|
228
269
|
|
|
229
|
-
**Independent commit auditor — boundary gate + dispatched judge.** Single consolidated auditor (2026-05-23 — replaces retired `commit-auditor` and earlier retired `sonnet-critic`). Two surfaces share the same context-gathering procedure and verdict taxonomy: (1) a PreToolUse Bash hook fires `scripts/audit_before_commit.py` on every `git commit` regardless of who initiates it (manual, Codex, build-loop, IDE) — deterministic packet-builder, hard-blocks (exit 2) on staged secrets and merge-conflict markers, bypass via `BUILDLOOP_AUDIT_BYPASS=1`; (2) the `independent-auditor` agent dispatches at Phase 3 chunk-close (chunk advisory) and Phase 4 Review-A (build scope) for LLM-grade judgment. Four verdicts: `yay (approve)` / `nay (reject)` / `suggest_correction` / `look_again`. **Auditor dispatch ladder (GAP-1):** a *nested* orchestrator (dispatched as a subagent, or per-commit mode) has no Agent tool and cannot dispatch the auditor — it walks `dispatched-agent → peer-host (rally / codex exec) → not-run:parent-must-dispatch`, records the chosen rung in `auditor_status`, and **never** lets inline self-reasoning masquerade as the independent auditor. A `not-run:parent-must-dispatch` run is not review-complete: under the parent-dispatch contract the dispatching parent
|
|
270
|
+
**Independent commit auditor — boundary gate + dispatched judge.** Single consolidated auditor (2026-05-23 — replaces retired `commit-auditor` and earlier retired `sonnet-critic`). Two surfaces share the same context-gathering procedure and verdict taxonomy: (1) a PreToolUse Bash hook fires `scripts/audit_before_commit.py` on every `git commit` regardless of who initiates it (manual, Codex, build-loop, IDE) — deterministic packet-builder, hard-blocks (exit 2) on staged secrets and merge-conflict markers, bypass via `BUILDLOOP_AUDIT_BYPASS=1`; (2) the `independent-auditor` agent dispatches at Phase 3 chunk-close (chunk advisory) and Phase 4 Review-A (build scope) for LLM-grade judgment. Four verdicts: `yay (approve)` / `nay (reject)` / `suggest_correction` / `look_again`. **Auditor dispatch ladder (GAP-1):** a *nested* orchestrator (dispatched as a subagent, or per-commit mode) has no Agent tool and cannot dispatch the auditor — it walks `dispatched-agent → peer-host (rally / codex exec) → not-run:parent-must-dispatch`, records the chosen rung in `auditor_status`, and **never** lets inline self-reasoning masquerade as the independent auditor. A `not-run:parent-must-dispatch` run is not review-complete: the nested orchestrator writes a machine-checkable **owed-verification manifest** (`.build-loop/owed-verification.json` via `scripts/owed_verification.py write`) and flips `state.json.review_incomplete = true`, so under the parent-dispatch contract the dispatching parent MUST dispatch the owed verifiers and `clear` the manifest before Report — the manifest replaces "parent remembers" with a gate (`owed_verification.py check`). Full reference: `skills/build-loop/references/independent-auditor.md` + `references/phase-4-review.md` §"Sub-step A" + `agents/independent-auditor.md`.
|
|
230
271
|
|
|
231
272
|
## Phase 5: Iterate — Fix Review Failures + UX Queue (up to 5x)
|
|
232
273
|
|
|
233
274
|
Fix failures surfaced by Review plus drain the UX queue from Sub-step D Gates 7-8, systematically. Loops back to Review after each pass. Hard stop at 5 iterations.
|
|
234
275
|
|
|
235
|
-
Key steps: prioritized work list (Validate failures → blocker UX → major UX → optimization → UI coverage gaps) → fan-out
|
|
276
|
+
Key steps: prioritized work list (Validate failures → blocker UX → major UX → optimization → UI coverage gaps) → supervisor-selected adaptive fan-out (default project preference 8; absolute ceiling 150; resource, provider, independent-work, and shared-capacity limits remain binding) → stuck-cascade (evidence-gap → memory re-check → parallel assess at 2 fails → independent audit at the third same unresolved verdict → quarantine at the fifth) → UI re-validate hook → overflow to followup/.
|
|
236
277
|
|
|
237
278
|
**Load `skills/build-loop/references/phase-5-iterate.md`** for the full prioritized work list, status routing for all 9 implementer return values, convergence detection, and followup overflow protocol.
|
|
238
279
|
|
|
@@ -240,13 +281,13 @@ Key steps: prioritized work list (Validate failures → blocker UX → major UX
|
|
|
240
281
|
|
|
241
282
|
Detect recurring patterns across recent runs, auto-draft experimental skills/agents. **Always runs after Review-G** (v0.30.0+) and always emits a `## Learn` outcome line. Three outcome states: **accruing** (`runs[] < 3` → `Learn: accruing (N/3 runs)`), **deferred** (debug-only `closeout: false` or budget-exhausted → write `learn-deferred-<run-id>.md` marker → `Learn: deferred — <reason>`), or **full** (`runs[] >= 3` AND pattern crossing threshold AND not-deferred). Promotion to `active/` still requires explicit `/build-loop:promote-experiment` (safety boundary). The prior `autoSelfImprove: false` opt-out is deprecated to a migration no-op — old configs do not error.
|
|
242
283
|
|
|
243
|
-
|
|
284
|
+
One command owns the sequence and proof: `python3 scripts/learn/__main__.py run --workdir "$PWD" --run-id <recorded-run-id> --source review-g --json`. Dispatch only the returned `work_orders[]`, attach each result through `attest`, and require a `status: complete` receipt before closeout. This keeps zero-pattern runs deterministic and token-free.
|
|
244
285
|
|
|
245
286
|
**Load `skills/build-loop/references/phase-6-learn.md`** for the full gating-outcomes table, detect-filter-draft-signoff flow, auto-promote rules, and user control commands.
|
|
246
287
|
|
|
247
288
|
## Memory — Global and Project-Scoped
|
|
248
289
|
|
|
249
|
-
One consolidated long-term tree:
|
|
290
|
+
One consolidated long-term tree at the memory store root (resolved by `scripts/_paths.py:memory_store_root()` — env override, else an existing legacy checkout, else the neutral per-user default; never assume a fixed address). Project-specific durable memory lives under `projects/<slug>/...`; cross-project lessons/design/debugging/product memory lives in the matching top-level lane. Every build runs `scripts/context_bootstrap.py` at Phase 1 Assess, which reads the store-root `INDEX.md` first, then root/project `constitution.md` / `MEMORY.md` where present, canonical indexes/folders through `memory_facade`, repo-local `.build-loop/` context, Codex memory at `~/.codex/memories`, and best-effort Rally/coordination state when relevant. Treat Rally records in the packet as peer-authored coordination context, not verified facts. Live handoff state is written separately by `scripts/context_snapshot.py` under `.build-loop/context/`; snapshots are not durable memory unless Review-G promotes a reusable decision or lesson. Writes go to exactly one canonical memory lane based on scope. Legacy paths (`~/.build-loop/memory`, `.episodic/decisions`, and `build-loop-memory/decisions/<project>`) are migration/archive inputs only.
|
|
250
291
|
|
|
251
292
|
Routing rule: "Would this apply to a different project?" Yes → global. No → project. Ambiguous → ask the user once.
|
|
252
293
|
|
|
@@ -260,19 +301,76 @@ Append-only memory contract: (1) steering answers from `AskUserQuestion` append
|
|
|
260
301
|
|
|
261
302
|
**Parsing rule**: scan the argument string for the literal token `--resume`. The next whitespace-delimited token is the run-id (or `latest`). Anything else is part of the goal text.
|
|
262
303
|
|
|
263
|
-
|
|
304
|
+
Before either path, resolve `RUNTIME_PLUGIN_ROOT` to the root of the currently
|
|
305
|
+
loaded Build Loop package (the directory containing both `scripts/` and
|
|
306
|
+
`skills/`). Use `BUILD_LOOP_ROOT` when the host exports it; otherwise derive the
|
|
307
|
+
root from the already-resolved path of this `SKILL.md`. Do not assume a
|
|
308
|
+
host-specific plugin-root environment variable, and do not use the target
|
|
309
|
+
project's root unless Build Loop itself is the target.
|
|
310
|
+
|
|
311
|
+
**On `--resume <run-id>` or `--resume latest`** — BEFORE Phase 1 Assess, run `python3 "$RUNTIME_PLUGIN_ROOT/scripts/resume_resolver.py" --workdir "$PWD" --resume-arg "<run-id-or-latest>" --staleness-minutes 5`. Returns `decision: "resume" | "abort" | "fresh" | "prompt_user"`. On `resume`:
|
|
264
312
|
|
|
265
313
|
1. Read `.build-loop/intent.md` and `.build-loop/plan.md` (already on disk — DO NOT re-derive).
|
|
266
314
|
2. Dispatch build-orchestrator with prefix: `RESUME_MODE: run_id=<id>; remaining_chunks=<json>; iterate_attempt=<n>; concurrent_modifications=<json>`
|
|
267
315
|
3. Agent §0 handles the rest — skips Phase 1+2, jumps to Phase 3 on `remaining_chunks` only.
|
|
268
316
|
|
|
269
|
-
**On NO `--resume` (normal dispatch)** — BEFORE Phase 1 step 1, run the same resolver with `--resume-arg ""`.
|
|
317
|
+
**On NO `--resume` (normal dispatch)** — BEFORE Phase 1 step 1, run the same resolver with `--resume-arg ""`. When the host supplies a stable current session id, pass it explicitly as `--current-session-id "<id>"`; never infer ownership from heartbeat freshness. An exact session match proves continuity only, so a `decision: "resume"` result continues the existing run through the same Resume Mode path above—it never starts fresh. If the resolver returns `decision: "prompt_user"`, surface to the user verbatim:
|
|
270
318
|
> "Incomplete build detected (run_id=X, last heartbeat N min ago, M of K chunks complete). Resume with `/build-loop:run --resume X` or start fresh? Starting fresh will not delete the incomplete state — it persists until manually cleared."
|
|
271
319
|
|
|
320
|
+
If it instead returns `decision: "abort"` with
|
|
321
|
+
`required_action: "archive_legacy_crash"`, immediately rerun the resolver with
|
|
322
|
+
`--archive-terminal-legacy-crash`. Proceed as a fresh run only when that second
|
|
323
|
+
result returns `decision: "fresh"`, `archive_applied: true`, and
|
|
324
|
+
`fresh_ready: true`. This path is limited to a schema-less crash whose terminal
|
|
325
|
+
evidence the resolver revalidates under the state lock; every ambiguous or
|
|
326
|
+
potentially active schema-less execution remains refused.
|
|
327
|
+
|
|
328
|
+
Every other `abort` is a hard refusal: do not begin a fresh run. In particular,
|
|
329
|
+
an existing nonterminal execution with a fresh, missing, timezone-less, or
|
|
330
|
+
unparseable heartbeat is not fresh-run permission. An exact match between the
|
|
331
|
+
explicit `--current-session-id` and `execution.current_session_id` proves only
|
|
332
|
+
host/thread continuity and therefore resumes that run. It is not a unique
|
|
333
|
+
invocation nonce and cannot authorize replacing the execution.
|
|
334
|
+
|
|
272
335
|
This is the crash-resume staleness signal — heartbeat staleness on `state.json.execution`, no hook dependency, fires every fresh dispatch. (A crash-recovery concern, distinct from concurrent-presence collision, which is owned solely by Rally Point presence — see `KNOWN-ISSUES.md` §M4.)
|
|
273
336
|
|
|
274
337
|
**Concurrent-modification handling**: when `concurrent_modifications` is non-empty in the resolver output, the agent's §0 branch surfaces each flagged chunk as `status: concurrent_modification_detected` and asks the user whether to redo the chunk (default) or keep the hand-edits.
|
|
275
338
|
|
|
339
|
+
## Output contract — applies to EVERY user-facing message, not just the Phase 4 report
|
|
340
|
+
|
|
341
|
+
Two references govern how build-loop talks to a human. Load them the first time a
|
|
342
|
+
run emits user-facing text, and follow them for the rest of the session:
|
|
343
|
+
|
|
344
|
+
- `references/output-style.md` — SENTENCE level. Lead with the answer to the
|
|
345
|
+
question actually asked. Strong verb over weak-verb-plus-filler
|
|
346
|
+
(`was responsible for` → `caused`). Data over adverbs
|
|
347
|
+
(`significantly increased` → `increased 42%`). Say `because` only when the cause
|
|
348
|
+
is proven, `suggesting` when evidence merely implies it.
|
|
349
|
+
- `references/status-output-format.md` — BLOCK level, for findings, open items,
|
|
350
|
+
status updates, and recommendations. Heading is an action-verb phrase with real
|
|
351
|
+
numbers inline; second line is the consequence (what breaks, for whom, when);
|
|
352
|
+
specifics named individually; close with a decision or a status.
|
|
353
|
+
|
|
354
|
+
**These are not Review-G-only.** They govern interim status, findings surfaced
|
|
355
|
+
mid-run, handoffs, and any answer given while the skill is loaded. Review-G is
|
|
356
|
+
where the deterministic lint runs, not where the contract begins. A run that
|
|
357
|
+
reports conforming prose only in its final report has followed the lint and missed
|
|
358
|
+
the rule.
|
|
359
|
+
|
|
360
|
+
Self-check any substantial user-facing markdown before sending:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
python3 scripts/report_lint.py <draft.md> --json # weak-verb, filler-opener, hedge
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
WARN-only with self-heal — rewrite and move on; it never halts a run. The lint
|
|
367
|
+
grades three mechanical rules; everything else in the two references is judgment,
|
|
368
|
+
so a clean lint is not evidence the contract was met.
|
|
369
|
+
|
|
370
|
+
The governing test, from `status-output-format.md` §2: *if an agent with zero
|
|
371
|
+
context read only this line, would it know what to do?* A block that satisfies
|
|
372
|
+
every rule and fails that test is still wrong.
|
|
373
|
+
|
|
276
374
|
## Efficiency
|
|
277
375
|
|
|
278
376
|
- No extraneous code. Every line serves the goal
|
|
@@ -301,16 +399,21 @@ Build-loop can author new skills mid-flow when a repeated task pattern emerges a
|
|
|
301
399
|
|
|
302
400
|
**Procedure:**
|
|
303
401
|
|
|
304
|
-
1. Draft the skill during Phase 4 if the need arises. Use the `plugin-dev:skill-development` skill if available, else `fallbacks.md#agent-authoring` format (but for skills — name, description, body ≤200 lines, progressive disclosure).
|
|
305
|
-
2.
|
|
306
|
-
|
|
307
|
-
|
|
402
|
+
1. Draft the skill during Phase 4 if the need arises. Use the `plugin-dev:skill-development` skill if available, else `fallbacks.md#agent-authoring` format (but for skills — name, description, body ≤200 lines, progressive disclosure). Write `user-invocable: false` into the frontmatter: a new skill is hidden by default and is reached by build-loop routing, not by the user's slash menu.
|
|
403
|
+
2. Stamp it in the same turn as the write, on the path you just wrote:
|
|
404
|
+
```bash
|
|
405
|
+
python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/stamp_skill_frontmatter.py" --apply <path-just-written>
|
|
406
|
+
```
|
|
407
|
+
The harness computes `userInvocable ?? true`, so a SKILL.md carrying no field is PUBLIC. Step 1's frontmatter line is the fast path; this command is the control. Expected status `compliant` or `stamped`, exit 0. A `violation` or `malformed` exit means the skill you just authored is publicly invocable or unparseable — fix it and re-run before using the skill.
|
|
408
|
+
3. Use it immediately in the current build.
|
|
409
|
+
4. At Review-F, score its usefulness: did it reduce friction? Would you use it next build?
|
|
410
|
+
5. Decide: **keep**, **promote** (project → global), or **drop**.
|
|
308
411
|
- Keep (project) — leave in `.build-loop/skills/`.
|
|
309
|
-
- Promote —
|
|
412
|
+
- Promote — copy to `~/.claude/skills/<name>/SKILL.md`, run the stamper again **on the destination path** (`python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/stamp_skill_frontmatter.py" --apply ~/.claude/skills/<name>/SKILL.md`), then confirm with the user using the exposure block in `skills/self-improve/SKILL.md` §"Promotion exposure statement". `~/.claude/skills/` loads in every session on every project, so this move — not the drafting step — is where exposure is decided.
|
|
310
413
|
- Drop — delete and note in `.build-loop/feedback.md` why it didn't earn its keep.
|
|
311
|
-
|
|
414
|
+
6. Record the decision through `scripts/memory_writer.py` into `build-loop-memory/lessons/` or `build-loop-memory/projects/<slug>/lessons/` as a `pattern` entry.
|
|
312
415
|
|
|
313
|
-
**Self-review/self-heal loop extension:** the self-review/self-heal loop (proactive arm of C-HEAL) MAY author new skills AND new scripts when doing so prevents a class of issue or streamlines repeated work. New skills start project-local and follow this same keep/promote/drop lifecycle. Promotion to the build-loop plugin repo or `~/.claude/skills/` still requires user confirmation (global scope is consequential). New scripts MUST have a colocated `test_<name>.py` — no untested script lands. When the authoring happens inside a self-recursive build (editing build-loop itself), every new or modified file passes through the SELF-MODIFICATION SAFETY GATE in `references/self-review.md` §"Self-modification of the restricted repo" before commit.
|
|
416
|
+
**Self-review/self-heal loop extension:** the self-review/self-heal loop (proactive arm of C-HEAL) MAY author new skills AND new scripts when doing so prevents a class of issue or streamlines repeated work. New skills start project-local and follow this same keep/promote/drop lifecycle. Promotion to the build-loop plugin repo or `~/.claude/skills/` still requires user confirmation (global scope is consequential) and runs the destination-path stamper from step 5 before that confirmation is asked. New scripts MUST have a colocated `test_<name>.py` — no untested script lands. When the authoring happens inside a self-recursive build (editing build-loop itself), every new or modified file passes through the SELF-MODIFICATION SAFETY GATE in `references/self-review.md` §"Self-modification of the restricted repo" before commit.
|
|
314
417
|
|
|
315
418
|
**Never proliferate skills**. A skill that isn't used twice across builds should be dropped. Prefer extending an existing skill over creating a new one.
|
|
316
419
|
|
|
@@ -347,14 +450,17 @@ Contextual material loaded on demand (not at skill invocation):
|
|
|
347
450
|
- `references/phase-3-execute.md` — Full Phase 3 Execute protocol
|
|
348
451
|
- `references/verify-dispatch.md` — Post-dispatch 5-step git/test ground-truth checklist; walk after any dispatched agent claims commits landed / tests passed (a solicited peer agreeing is not independent verification)
|
|
349
452
|
- `references/dogfood-reload-checkpoint.md` — Self-recursive stop/reload/resume checkpoint and ACK/fallback protocol
|
|
453
|
+
- `references/privileged-request-broker.md` — Naming, coalescing, and recording macOS administrator-password requests across concurrent tasks. Load when a build touches a command that asks for an admin password, when a user reports unexplained password dialogs, or when editing `scripts/privileged_commands.json`.
|
|
350
454
|
- `references/phase-4-review.md` — Full Phase 4 Review protocol (sub-steps A–G, including Sub-step F Auto-Resolve with all 4 verdict arms)
|
|
351
455
|
- `references/phase-5-iterate.md` — Full Phase 5 Iterate protocol
|
|
352
456
|
- `references/phase-6-learn.md` — Full Phase 6 Learn protocol
|
|
353
457
|
- `references/memory.md` — Memory system: global vs project stores, routing rule, read/write policy
|
|
458
|
+
- `references/output-style.md` — Sentence-level user-facing style contract (see "Output contract" above)
|
|
459
|
+
- `references/status-output-format.md` — Block-level shape for findings, open items, status, recommendations
|
|
354
460
|
- `references/leadership.md` — Initiative + decision-escalation doctrine (decide-at-70%, self-research → memory → peers → persona panel → human-only-for-irreversible, parallel-work-before-idling, token-posture gauge). Synthesized from intent-based leadership / mission command / two-door decisions.
|
|
355
461
|
- `references/research-trigger-policy.md` — Research plugin trigger/depth gate, t-shirt depth lower bounds, and final-claim citation/unavailable rule
|
|
356
462
|
- `references/task-capture-policy.md` — Read-only active task surface over existing plan/state/queue/backlog surfaces; no new task ledger by default
|
|
357
|
-
- `references/backlog-system.md` — Host-agnostic
|
|
463
|
+
- `references/backlog-system.md` — Host-agnostic classed backlog: planned pickup, approval-gated initiatives, contextual user decisions, lossless reconciliation, and explicit promotion into the executable queue
|
|
358
464
|
- `references/agent-role-taxonomy.md` — Lead/peer/coder-assessor/reviewer/skill responsibility map; use before adding or renaming agents.
|
|
359
465
|
- `references/capability-routing.md` — Full capability routing table, trigger conditions, sub-routers
|
|
360
466
|
- `references/recent-design-structures.md` — Recent UI structure library loaded by `design-contract-specialist` in Phase 2. Structures are options, not mandates.
|
|
@@ -362,7 +468,7 @@ Contextual material loaded on demand (not at skill invocation):
|
|
|
362
468
|
- `../ui-design/references/ui-guidance-sources.md` — Source map for local UI guidance across build-loop, UI Guidance, IBR, Mockup Gallery, document/deck plugins, research, vault, project-local hidden folders, and build-loop-memory.
|
|
363
469
|
- `references/refactor-history/` — Internal assessment of the 2026-04 refactor. `ASSESSMENT.md` explains rationale, `trace-comparison.md` shows before/after flow, `STANDALONE_TEST_RUN.md` validates the model, `scenarios/01..06` contain 6 test scenarios.
|
|
364
470
|
- `eval-guide.md` — How to interpret build-loop scorecards.
|
|
365
|
-
- `fallbacks.md` — Degraded-but-useful behavior when bridge plugins or rendered UI tooling are absent. IBR
|
|
471
|
+
- `fallbacks.md` — Degraded-but-useful behavior when bridge plugins or rendered UI tooling are absent. Headless IBR verification follows `../../references/ibr-ui-verification-policy.md`; viewer surfaces remain explicit-only.
|
|
366
472
|
- `phases/fact-check.md` — Detailed fact-check sub-step specification.
|
|
367
473
|
|
|
368
474
|
Companion skills (each has its own SKILL.md; load via `Skill("build-loop:<name>")`):
|
|
@@ -373,7 +479,9 @@ Companion skills (each has its own SKILL.md; load via `Skill("build-loop:<name>"
|
|
|
373
479
|
- `build-loop:architecture-{scan,impact,trace,rules,dead,review}` — native architecture skills sourced from NavGator (provenance + drift-detection via `build-loop:sync-skills`)
|
|
374
480
|
- `build-loop:debugging-memory` · `build-loop:debug-loop` · `build-loop:logging-tracer` — bundled debugger primitives (orchestrator owns when-to-fire, these own the procedural detail)
|
|
375
481
|
- `build-loop:plugin-builder` · `build-loop:mcp-builder` — plugin authoring (use together for plugins that expose MCP tools)
|
|
482
|
+
- `build-loop:repo-maintenance` — repository structure, source-of-truth, artifact retention, sibling consolidation, and safe local-main closeout (`build-loop:repo-closeout` is the temporary compatibility alias)
|
|
376
483
|
- `build-loop:authentication` — multi-provider auth reference library (Better Auth, Supabase, Google OAuth, Resend; routed by provider × topic)
|
|
484
|
+
- `build-loop:data-plane-worktrees` — isolates mutable non-Git state across run worktrees; loads for SQLite/PostgreSQL migrations, generated indexes, Docker volumes/projects, mutable file stores, or external namespaces and drives the run manifest through terminal closeout.
|
|
377
485
|
- `build-loop:building-with-deepagents` — OSS deepagents framework (activates on `from deepagents import`)
|
|
378
486
|
- `build-loop:ui-design` — build-loop-owned UI design direction skill loaded before non-trivial UI implementation; `design-contract-specialist` writes the resulting `.build-loop/app-contract/ui.md`.
|
|
379
487
|
- `build-loop:telemetry` — OpenTelemetry-first observability guidance (LLM/agent → Phoenix/Langfuse + OpenInference/OpenLLMetry; web/server → OTel SDK + Sentry; mobile/iOS → Embrace/OTel-swift over Firebase). Loaded in Phase 1 when a build touches a server/LLM/mobile app with no telemetry, or Phase 2 when adding a service/LLM path; encodes the user's decided OTel + GenAI-semconv stack.
|