@tyroneross/build-loop 0.30.3
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 +10 -0
- package/.claude-plugin/marketplace.json +38 -0
- package/.claude-plugin/plugin.json +30 -0
- package/.codex-plugin/plugin.json +41 -0
- package/.cursor/rules/build-loop-surface.mdc +22 -0
- package/AGENTS.md +498 -0
- package/LICENSE +202 -0
- package/README.md +403 -0
- package/agents/alignment-checker.md +124 -0
- package/agents/api-assessor.md +136 -0
- package/agents/architecture-scout.md +185 -0
- package/agents/assessment-orchestrator.md +163 -0
- package/agents/build-orchestrator.md +198 -0
- package/agents/database-assessor.md +133 -0
- package/agents/design-contract-specialist.md +239 -0
- package/agents/fact-checker.md +69 -0
- package/agents/fix-critique.md +161 -0
- package/agents/frontend-assessor.md +136 -0
- package/agents/implementer.md +185 -0
- package/agents/independent-auditor.md +143 -0
- package/agents/mock-scanner.md +78 -0
- package/agents/optimize-runner.md +112 -0
- package/agents/overfitting-reviewer.md +96 -0
- package/agents/performance-assessor.md +159 -0
- package/agents/plan-critic.md +85 -0
- package/agents/promotion-reviewer.md +121 -0
- package/agents/recurring-pattern-detector.md +248 -0
- package/agents/retrospective-synthesizer.md +109 -0
- package/agents/root-cause-investigator.md +285 -0
- package/agents/scope-auditor.md +121 -0
- package/agents/security-reviewer.md +151 -0
- package/agents/self-improvement-architect.md +125 -0
- package/agents/synthesis-critic.md +99 -0
- package/agents/transcript-pattern-miner.md +165 -0
- package/agents/ui-validator.md +193 -0
- package/codex-skills/build-loop/SKILL.md +20 -0
- package/codex-skills/debug-loop/SKILL.md +18 -0
- package/codex-skills/handoff/SKILL.md +22 -0
- package/codex-skills/knowledge/SKILL.md +21 -0
- package/codex-skills/optimize/SKILL.md +18 -0
- package/codex-skills/research/SKILL.md +18 -0
- package/commands/agent-rally-point.md +301 -0
- package/commands/assess.md +41 -0
- package/commands/debug.md +20 -0
- package/commands/debugger-detail.md +34 -0
- package/commands/debugger-scan.md +15 -0
- package/commands/debugger-status.md +20 -0
- package/commands/debugger.md +32 -0
- package/commands/handoff.md +113 -0
- package/commands/knowledge-review.md +16 -0
- package/commands/optimize.md +31 -0
- package/commands/plan-verify.md +39 -0
- package/commands/promote-experiment.md +129 -0
- package/commands/research.md +22 -0
- package/commands/run.md +12 -0
- package/commands/self-review.md +51 -0
- package/commands/start-prd.md +57 -0
- package/commands/test.md +34 -0
- package/dist/src/assessment-orchestrator.d.ts +78 -0
- package/dist/src/assessment-orchestrator.d.ts.map +1 -0
- package/dist/src/assessment-orchestrator.js +304 -0
- package/dist/src/assessment-orchestrator.js.map +1 -0
- package/dist/src/audit-miner.d.ts +21 -0
- package/dist/src/audit-miner.d.ts.map +1 -0
- package/dist/src/audit-miner.js +421 -0
- package/dist/src/audit-miner.js.map +1 -0
- package/dist/src/batch-operations.d.ts +30 -0
- package/dist/src/batch-operations.d.ts.map +1 -0
- package/dist/src/batch-operations.js +339 -0
- package/dist/src/batch-operations.js.map +1 -0
- package/dist/src/config.d.ts +83 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +176 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/context-engine.d.ts +45 -0
- package/dist/src/context-engine.d.ts.map +1 -0
- package/dist/src/context-engine.js +135 -0
- package/dist/src/context-engine.js.map +1 -0
- package/dist/src/debug-wrapper.d.ts +58 -0
- package/dist/src/debug-wrapper.d.ts.map +1 -0
- package/dist/src/debug-wrapper.js +285 -0
- package/dist/src/debug-wrapper.js.map +1 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +149 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interactive-verifier.d.ts +26 -0
- package/dist/src/interactive-verifier.d.ts.map +1 -0
- package/dist/src/interactive-verifier.js +435 -0
- package/dist/src/interactive-verifier.js.map +1 -0
- package/dist/src/lessons.d.ts +59 -0
- package/dist/src/lessons.d.ts.map +1 -0
- package/dist/src/lessons.js +172 -0
- package/dist/src/lessons.js.map +1 -0
- package/dist/src/log-reader.d.ts +39 -0
- package/dist/src/log-reader.d.ts.map +1 -0
- package/dist/src/log-reader.js +291 -0
- package/dist/src/log-reader.js.map +1 -0
- package/dist/src/logger.d.ts +59 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +328 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/parallel-retrieval.d.ts +52 -0
- package/dist/src/parallel-retrieval.d.ts.map +1 -0
- package/dist/src/parallel-retrieval.js +309 -0
- package/dist/src/parallel-retrieval.js.map +1 -0
- package/dist/src/pattern-extractor.d.ts +30 -0
- package/dist/src/pattern-extractor.d.ts.map +1 -0
- package/dist/src/pattern-extractor.js +386 -0
- package/dist/src/pattern-extractor.js.map +1 -0
- package/dist/src/result-aggregator.d.ts +44 -0
- package/dist/src/result-aggregator.d.ts.map +1 -0
- package/dist/src/result-aggregator.js +315 -0
- package/dist/src/result-aggregator.js.map +1 -0
- package/dist/src/retrieval.d.ts +139 -0
- package/dist/src/retrieval.d.ts.map +1 -0
- package/dist/src/retrieval.js +724 -0
- package/dist/src/retrieval.js.map +1 -0
- package/dist/src/setup/auto-setup.d.ts +15 -0
- package/dist/src/setup/auto-setup.d.ts.map +1 -0
- package/dist/src/setup/auto-setup.js +157 -0
- package/dist/src/setup/auto-setup.js.map +1 -0
- package/dist/src/setup/configure-hooks.d.ts +8 -0
- package/dist/src/setup/configure-hooks.d.ts.map +1 -0
- package/dist/src/setup/configure-hooks.js +16 -0
- package/dist/src/setup/configure-hooks.js.map +1 -0
- package/dist/src/setup/create-slash-commands.d.ts +8 -0
- package/dist/src/setup/create-slash-commands.d.ts.map +1 -0
- package/dist/src/setup/create-slash-commands.js +101 -0
- package/dist/src/setup/create-slash-commands.js.map +1 -0
- package/dist/src/setup/index.d.ts +8 -0
- package/dist/src/setup/index.d.ts.map +1 -0
- package/dist/src/setup/index.js +17 -0
- package/dist/src/setup/index.js.map +1 -0
- package/dist/src/setup/inject-claude-md.d.ts +10 -0
- package/dist/src/setup/inject-claude-md.d.ts.map +1 -0
- package/dist/src/setup/inject-claude-md.js +150 -0
- package/dist/src/setup/inject-claude-md.js.map +1 -0
- package/dist/src/setup/uninstall.d.ts +22 -0
- package/dist/src/setup/uninstall.d.ts.map +1 -0
- package/dist/src/setup/uninstall.js +235 -0
- package/dist/src/setup/uninstall.js.map +1 -0
- package/dist/src/storage.d.ts +192 -0
- package/dist/src/storage.d.ts.map +1 -0
- package/dist/src/storage.js +1037 -0
- package/dist/src/storage.js.map +1 -0
- package/dist/src/string-similarity.d.ts +8 -0
- package/dist/src/string-similarity.d.ts.map +1 -0
- package/dist/src/string-similarity.js +57 -0
- package/dist/src/string-similarity.js.map +1 -0
- package/dist/src/traces/adapters/browser.d.ts +69 -0
- package/dist/src/traces/adapters/browser.d.ts.map +1 -0
- package/dist/src/traces/adapters/browser.js +280 -0
- package/dist/src/traces/adapters/browser.js.map +1 -0
- package/dist/src/traces/adapters/index.d.ts +23 -0
- package/dist/src/traces/adapters/index.d.ts.map +1 -0
- package/dist/src/traces/adapters/index.js +67 -0
- package/dist/src/traces/adapters/index.js.map +1 -0
- package/dist/src/traces/adapters/langchain.d.ts +42 -0
- package/dist/src/traces/adapters/langchain.d.ts.map +1 -0
- package/dist/src/traces/adapters/langchain.js +151 -0
- package/dist/src/traces/adapters/langchain.js.map +1 -0
- package/dist/src/traces/adapters/opentelemetry.d.ts +46 -0
- package/dist/src/traces/adapters/opentelemetry.d.ts.map +1 -0
- package/dist/src/traces/adapters/opentelemetry.js +164 -0
- package/dist/src/traces/adapters/opentelemetry.js.map +1 -0
- package/dist/src/traces/adapters/sentry.d.ts +58 -0
- package/dist/src/traces/adapters/sentry.d.ts.map +1 -0
- package/dist/src/traces/adapters/sentry.js +212 -0
- package/dist/src/traces/adapters/sentry.js.map +1 -0
- package/dist/src/traces/index.d.ts +10 -0
- package/dist/src/traces/index.d.ts.map +1 -0
- package/dist/src/traces/index.js +45 -0
- package/dist/src/traces/index.js.map +1 -0
- package/dist/src/traces/storage.d.ts +78 -0
- package/dist/src/traces/storage.d.ts.map +1 -0
- package/dist/src/traces/storage.js +399 -0
- package/dist/src/traces/storage.js.map +1 -0
- package/dist/src/traces/summarizer.d.ts +83 -0
- package/dist/src/traces/summarizer.d.ts.map +1 -0
- package/dist/src/traces/summarizer.js +247 -0
- package/dist/src/traces/summarizer.js.map +1 -0
- package/dist/src/traces/types.d.ts +365 -0
- package/dist/src/traces/types.d.ts.map +1 -0
- package/dist/src/traces/types.js +14 -0
- package/dist/src/traces/types.js.map +1 -0
- package/dist/src/types.d.ts +495 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +27 -0
- package/dist/src/types.js.map +1 -0
- package/docs/agent-surface-policy.md +45 -0
- package/docs/memory-setup.md +226 -0
- package/hooks/_arch_scan_bg.py +88 -0
- package/hooks/_plugin_drift_check_bg.py +85 -0
- package/hooks/_session_start_lib.sh +42 -0
- package/hooks/git/pre-push +141 -0
- package/hooks/hooks.json +126 -0
- package/hooks/post-commit +30 -0
- package/hooks/pre-commit +29 -0
- package/hooks/pre-edit-apppulse.sh +6 -0
- package/hooks/pre-edit-architecture.sh +106 -0
- package/hooks/pre-edit-rally-point.sh +92 -0
- package/hooks/session-start-apppulse.sh +6 -0
- package/hooks/session-start-architecture.sh +10 -0
- package/hooks/session-start-git-hooks.sh +12 -0
- package/hooks/session-start-plugin-drift.sh +27 -0
- package/hooks/session-start-rally-point.sh +44 -0
- package/hooks/session-start-retrieval.sh +24 -0
- package/hooks/session-start-worktree-gc.sh +105 -0
- package/hooks/test_apppulse_hooks.sh +6 -0
- package/hooks/test_rally_point_hooks.sh +388 -0
- package/hooks/test_sec008_hooks.sh +66 -0
- package/package.json +111 -0
- package/scripts/README.md +301 -0
- package/scripts/_db_url.py +61 -0
- package/scripts/_paths.py +445 -0
- package/scripts/blm.py +162 -0
- package/scripts/blm_api.py +263 -0
- package/scripts/check_cache_sync.py +490 -0
- package/scripts/embed_backend.py +475 -0
- package/scripts/install_memory.py +556 -0
- package/scripts/lessons_index/__init__.py +77 -0
- package/scripts/lessons_index/__main__.py +135 -0
- package/scripts/lessons_index/ingest.py +288 -0
- package/scripts/lessons_index/query.py +285 -0
- package/scripts/lessons_index/schema.py +114 -0
- package/scripts/memory_context/__init__.py +610 -0
- package/scripts/memory_graph/__init__.py +393 -0
- package/scripts/project_resolver.py +172 -0
- package/scripts/prune_codex_plugin_cache.py +23 -0
- package/scripts/prune_plugin_cache.py +359 -0
- package/scripts/semantic_index/__init__.py +482 -0
- package/scripts/semantic_index/_bench_hybrid.py +175 -0
- package/scripts/semantic_index/backfill.py +263 -0
- package/scripts/semantic_index/hybrid.py +174 -0
- package/scripts/semantic_index/test_backfill.py +292 -0
- package/scripts/semantic_index/test_hybrid.py +541 -0
- package/scripts/sync_navgator_lessons.py +666 -0
- package/scripts/sync_plugin_cache.py +388 -0
- package/skills/agent-rally-point/SKILL.md +165 -0
- package/skills/agent-rally-watcher/SKILL.md +83 -0
- package/skills/api-registry-bridge/SKILL.md +59 -0
- package/skills/architecture/dead/SKILL.md +56 -0
- package/skills/architecture/impact/SKILL.md +88 -0
- package/skills/architecture/review/SKILL.md +227 -0
- package/skills/architecture/rules/SKILL.md +72 -0
- package/skills/architecture/scan/SKILL.md +79 -0
- package/skills/architecture/trace/SKILL.md +65 -0
- package/skills/attribution-standard/SKILL.md +122 -0
- package/skills/authentication/SKILL.md +81 -0
- package/skills/authentication/references/better-auth-magic-link.md +135 -0
- package/skills/authentication/references/better-auth-setup.md +224 -0
- package/skills/authentication/references/google-calendar-sync.md +278 -0
- package/skills/authentication/references/google-cloud-console.md +159 -0
- package/skills/authentication/references/google-geocoding-directions.md +126 -0
- package/skills/authentication/references/google-lessons-example-web-app.md +177 -0
- package/skills/authentication/references/google-maps.md +162 -0
- package/skills/authentication/references/google-oauth-setup.md +343 -0
- package/skills/authentication/references/google-places.md +173 -0
- package/skills/authentication/references/lessons-example-web-app-better-auth.md +126 -0
- package/skills/authentication/references/resend-email.md +227 -0
- package/skills/authentication/references/resend-otp-magic-link.md +153 -0
- package/skills/authentication/references/supabase-auth.md +172 -0
- package/skills/auto-decision-capture/SKILL.md +419 -0
- package/skills/build-loop/SKILL.md +516 -0
- package/skills/build-loop/detect-plugins.mjs +82 -0
- package/skills/build-loop/eval-guide.md +65 -0
- package/skills/build-loop/fallbacks.md +549 -0
- package/skills/build-loop/phases/fact-check.md +42 -0
- package/skills/build-loop/phases/ui-validation.md +267 -0
- package/skills/build-loop/references/apple-native-planning.md +439 -0
- package/skills/build-loop/references/capability-routing.md +181 -0
- package/skills/build-loop/references/codex-subagents.md +98 -0
- package/skills/build-loop/references/coordination.md +161 -0
- package/skills/build-loop/references/correction-aware-capture.md +177 -0
- package/skills/build-loop/references/independent-auditor.md +72 -0
- package/skills/build-loop/references/intent-capability-pack.md +170 -0
- package/skills/build-loop/references/intent-exploration-prompts.md +96 -0
- package/skills/build-loop/references/leadership.md +72 -0
- package/skills/build-loop/references/memory.md +284 -0
- package/skills/build-loop/references/modular-systems-pack.md +96 -0
- package/skills/build-loop/references/output-style.md +129 -0
- package/skills/build-loop/references/pay-it-forward-arch.md +98 -0
- package/skills/build-loop/references/phase-1-assess.md +218 -0
- package/skills/build-loop/references/phase-2-plan.md +77 -0
- package/skills/build-loop/references/phase-3-execute.md +47 -0
- package/skills/build-loop/references/phase-4-review.md +310 -0
- package/skills/build-loop/references/phase-5-iterate.md +71 -0
- package/skills/build-loop/references/phase-6-learn.md +56 -0
- package/skills/build-loop/references/recent-design-structures.md +274 -0
- package/skills/build-loop/references/refactor-history/ASSESSMENT.md +85 -0
- package/skills/build-loop/references/refactor-history/STANDALONE_TEST_RUN.md +149 -0
- package/skills/build-loop/references/refactor-history/scenarios/01-simple-bugfix.md +32 -0
- package/skills/build-loop/references/refactor-history/scenarios/02-ui-build-with-iteration.md +48 -0
- package/skills/build-loop/references/refactor-history/scenarios/03-multi-failure-escalation.md +60 -0
- package/skills/build-loop/references/refactor-history/scenarios/04-ui-build-ibr-absent.md +51 -0
- package/skills/build-loop/references/refactor-history/scenarios/05-refactor-navgator-absent.md +71 -0
- package/skills/build-loop/references/refactor-history/scenarios/06-recurring-bug-debugger-absent.md +52 -0
- package/skills/build-loop/references/refactor-history/trace-comparison.md +202 -0
- package/skills/build-loop/references/self-recursive-dev.md +77 -0
- package/skills/build-loop/references/self-review.md +232 -0
- package/skills/build-loop/references/ui-io-contract.md +116 -0
- package/skills/build-loop/scanners/audit-design-rules.mjs +476 -0
- package/skills/build-loop/scanners/require-visual-evidence.mjs +239 -0
- package/skills/build-loop/templates/backlog-item.md +35 -0
- package/skills/build-loop/templates/codex-worker-prompt.md +89 -0
- package/skills/build-loop/templates/ui-subagent-prompt.md +179 -0
- package/skills/build-loop/templates/ux-fix-plan.md +40 -0
- package/skills/building-with-deepagents/SKILL.md +195 -0
- package/skills/building-with-deepagents/references/anti-patterns.md +141 -0
- package/skills/building-with-deepagents/references/api-quick-reference.md +184 -0
- package/skills/capabilities/SKILL.md +91 -0
- package/skills/debug-loop/SKILL.md +278 -0
- package/skills/debug-loop/references/convergence-rules.md +145 -0
- package/skills/debug-loop/references/swiftui-macos-clunky-ui-debugger.html +823 -0
- package/skills/debugging/assess/SKILL.md +111 -0
- package/skills/debugging/debug-loop/SKILL.md +231 -0
- package/skills/debugging/memory/SKILL.md +147 -0
- package/skills/debugging/store/SKILL.md +153 -0
- package/skills/debugging-memory/SKILL.md +440 -0
- package/skills/debugging-memory/examples/incident-example.json +67 -0
- package/skills/debugging-memory/references/incident-documentation.md +280 -0
- package/skills/debugging-memory/references/ios-notification-alarm-playbook.md +300 -0
- package/skills/debugging-memory/references/pattern-extraction.md +163 -0
- package/skills/debugging-memory/references/subagent-integration.md +312 -0
- package/skills/defenseclaw-bridge/SKILL.md +156 -0
- package/skills/defenseclaw-bridge/references/dc-config-mapping.md +162 -0
- package/skills/defenseclaw-bridge/references/output-format.md +108 -0
- package/skills/handoff/SKILL.md +94 -0
- package/skills/ibr-bridge/SKILL.md +68 -0
- package/skills/knowledge/SKILL.md +127 -0
- package/skills/knowledge/references/recall-integration.md +83 -0
- package/skills/knowledge/templates/madr-minimal.md +56 -0
- package/skills/knowledge-review/SKILL.md +112 -0
- package/skills/logging-tracer/SKILL.md +202 -0
- package/skills/logging-tracer/references/log-analysis.md +128 -0
- package/skills/logging-tracer/references/stack-templates.md +274 -0
- package/skills/logging-tracer-bridge/SKILL.md +70 -0
- package/skills/mcp-builder/SKILL.md +278 -0
- package/skills/mcp-builder/references/mcp-security.md +106 -0
- package/skills/model-tiering/SKILL.md +216 -0
- package/skills/native-ax-driver/SKILL.md +220 -0
- package/skills/native-ax-driver/scripts/layout_fill.py +222 -0
- package/skills/native-ax-driver/scripts/native_driver.py +495 -0
- package/skills/native-ax-driver/swift/bl-ax-driver/Package.swift +20 -0
- package/skills/native-ax-driver/swift/bl-ax-driver/Sources/main.swift +542 -0
- package/skills/optimize/SKILL.md +202 -0
- package/skills/optimize/profiles.md +61 -0
- package/skills/plan-verify/SKILL.md +115 -0
- package/skills/plan-verify/test-fixtures/example-app-v20-findings.json +27 -0
- package/skills/plan-verify/test-fixtures/example-app-v20.md +42 -0
- package/skills/plan-verify/test-fixtures/example-app-v22-findings.json +15 -0
- package/skills/plan-verify/test-fixtures/example-app-v22.md +1608 -0
- package/skills/plan-verify/test-fixtures/unrelated-good-plan-findings.json +15 -0
- package/skills/plan-verify/test-fixtures/unrelated-good-plan.md +55 -0
- package/skills/plugin-builder/SKILL.md +329 -0
- package/skills/plugin-builder/references/authoritative-sources.md +104 -0
- package/skills/plugin-builder/references/build-loop-phase-guidance.md +94 -0
- package/skills/plugin-builder/references/components-guide.md +221 -0
- package/skills/plugin-builder/references/distribution.md +317 -0
- package/skills/plugin-builder/references/dual-host-claude-codex.md +220 -0
- package/skills/plugin-builder/references/hooks-reference.md +210 -0
- package/skills/plugin-builder/references/manifest-schema.md +111 -0
- package/skills/plugin-builder/references/plugin-hygiene-lessons.md +307 -0
- package/skills/plugin-tests/SKILL.md +94 -0
- package/skills/prd-bridge/SKILL.md +135 -0
- package/skills/research/SKILL.md +80 -0
- package/skills/security-methodology/SKILL.md +105 -0
- package/skills/security-methodology/references/cross-source-matrix.md +77 -0
- package/skills/security-methodology/references/mitre-atlas-starter.md +83 -0
- package/skills/security-methodology/references/nist-600-1-mapping.md +119 -0
- package/skills/security-methodology/references/owasp-agentic-top-10.md +157 -0
- package/skills/security-methodology/references/owasp-llm-top-10.md +144 -0
- package/skills/security-methodology/references/owasp-web-top-10.md +65 -0
- package/skills/self-improve/SKILL.md +298 -0
- package/skills/spec-writing/SKILL.md +548 -0
- package/skills/spec-writing/scripts/check_checklist.py +478 -0
- package/skills/sync-skills/SKILL.md +132 -0
- package/skills/telemetry/SKILL.md +66 -0
- package/skills/ui-design/SKILL.md +75 -0
- package/skills/ui-design/references/design-patterns-multi.md +165 -0
- package/skills/ui-design/references/design-preferences-from-owned-apps.md +150 -0
- package/skills/ui-design/references/evidence-capture-policy.md +55 -0
- package/skills/ui-design/references/ui-guidance-sources.md +330 -0
- package/skills/ui-design/references/universal-design-principles.alt.md +182 -0
- package/skills/ui-design/references/universal-design-principles.md +419 -0
- package/templates/memory/MEMORY.md.template +55 -0
- package/templates/memory/constitution.md.template +64 -0
- package/templates/memory/manifest.json +47 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: self-improvement-architect
|
|
3
|
+
description: |
|
|
4
|
+
Takes a pattern proposal from `recurring-pattern-detector` and drafts a concrete experimental SKILL.md (or agent definition) the build-loop can use immediately. Uses the `plugin-dev:skill-development` or `plugin-dev:agent-development` skill as the authoring reference. Writes output to `.build-loop/skills/experimental/<name>/SKILL.md` — project-local, clearly marked experimental, easy for the user to remove.
|
|
5
|
+
|
|
6
|
+
<example>
|
|
7
|
+
Context: Phase 6 Learn received a high-confidence recurring pattern
|
|
8
|
+
user: "Draft a skill for this detected pattern: middleware type errors recurring in Review-B"
|
|
9
|
+
assistant: "I'll use the self-improvement-architect agent to author the experimental skill."
|
|
10
|
+
</example>
|
|
11
|
+
|
|
12
|
+
<example>
|
|
13
|
+
Context: Pattern suggests a new agent, not a skill
|
|
14
|
+
user: "This looks like a new subagent role, not just knowledge"
|
|
15
|
+
assistant: "I'll use the self-improvement-architect agent to draft the agent definition."
|
|
16
|
+
</example>
|
|
17
|
+
model: sonnet
|
|
18
|
+
color: cyan
|
|
19
|
+
tools: ["Read", "Write", "Edit", "Glob", "Grep", "Skill"]
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
23
|
+
|
|
24
|
+
You are the self-improvement architect. You take a single pattern proposal and produce one artifact: an experimental SKILL.md (preferred) or agent .md definition. You are bounded, not creative — the pattern tells you what to build, you write it cleanly.
|
|
25
|
+
|
|
26
|
+
## Input
|
|
27
|
+
|
|
28
|
+
A single pattern object (JSON) from `recurring-pattern-detector`:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"type": "phase_failure",
|
|
33
|
+
"phase": 5,
|
|
34
|
+
"signature": "type error in middleware",
|
|
35
|
+
"count": 4,
|
|
36
|
+
"confidence": "high",
|
|
37
|
+
"evidence": [...],
|
|
38
|
+
"proposal": { "skillSkeleton": { "name": "...", "trigger": "...", "purpose": "..." } }
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Plus the target artifact type (`skill` or `agent`) decided by the caller.
|
|
43
|
+
|
|
44
|
+
## Your Process
|
|
45
|
+
|
|
46
|
+
1. **Load the authoring reference**
|
|
47
|
+
- For skills: `Skill("plugin-dev:skill-development")`
|
|
48
|
+
- For agents: `Skill("plugin-dev:agent-development")`
|
|
49
|
+
- Read the reference to internalize frontmatter requirements and description-writing rules. Do not copy boilerplate verbatim.
|
|
50
|
+
|
|
51
|
+
2. **Synthesize from evidence**
|
|
52
|
+
Extract from the pattern's evidence:
|
|
53
|
+
- What recurring mistake/task is happening?
|
|
54
|
+
- What triggers it (file type, phase, symptom)?
|
|
55
|
+
- What's the minimal intervention that would break the recurrence?
|
|
56
|
+
|
|
57
|
+
3. **Draft the artifact**
|
|
58
|
+
For a skill, the SKILL.md must have:
|
|
59
|
+
- Frontmatter: `name` (kebab-case, scoped `build-loop:experimental-<name>`), `description` with specific triggers extracted from evidence, `experimental: true` flag, `created: <ISO date>`, `promoted: false`
|
|
60
|
+
- Body: ONE short paragraph on when to use, ONE section with the concrete steps (copy-paste-able), ONE section with "how to know it worked" (measurable signal)
|
|
61
|
+
- Length: 40-120 lines. No more. Experimental skills must be cheap to read.
|
|
62
|
+
|
|
63
|
+
For an agent: same structure applied to agent frontmatter.
|
|
64
|
+
|
|
65
|
+
4. **Write to the right location**
|
|
66
|
+
- Project-local: `.build-loop/skills/experimental/<name>/SKILL.md` or `.build-loop/agents/experimental/<name>.md`
|
|
67
|
+
- Do NOT write to the plugin repo. Never modify `~/.claude/plugins/build-loop/`.
|
|
68
|
+
- Create the directory if missing.
|
|
69
|
+
|
|
70
|
+
5. **Produce a concise user synthesis**
|
|
71
|
+
Output to stdout (not the file) a 3-4 line summary:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
EXPERIMENTAL ARTIFACT CREATED
|
|
75
|
+
Type: skill
|
|
76
|
+
Name: build-loop:experimental-middleware-typegen
|
|
77
|
+
Path: .build-loop/skills/experimental/middleware-typegen/SKILL.md
|
|
78
|
+
Triggers on: <extracted trigger>
|
|
79
|
+
A/B baseline: <metric to compare, see §A/B Experiment>
|
|
80
|
+
Remove with: rm -rf .build-loop/skills/experimental/<name>/
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## A/B Experiment Section (must include in every skill)
|
|
84
|
+
|
|
85
|
+
At the bottom of every experimental SKILL.md you write, include:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
## Experiment
|
|
89
|
+
|
|
90
|
+
**Baseline metric:** <one specific metric — e.g., "Review-B pass rate on middleware edits" or "attempts-to-pass on TS path alias files">
|
|
91
|
+
**Target:** <improvement threshold, e.g., "reduce Review-B failures by 50% on matching files">
|
|
92
|
+
**Sample size target:** 8 non-confounded applied runs (minimum floor per self-improve SKILL). Confounded runs — where another experimental artifact also triggered — are logged for audit but excluded from this count.
|
|
93
|
+
**Isolation rule:** Before measuring a run, check `.build-loop/state.json.run.active_experimental_artifacts[]`. If any other experimental name appears, set `confounded: true` on this skill's measurement row. Do not alter behavior based on confound state.
|
|
94
|
+
**Decision:** After reaching 8 non-confounded applied runs, compare metric. If `autoPromote: true` is set in `.build-loop/config.json` and target met → auto-promote. Otherwise a proposal is written to `.build-loop/proposals/`. Regression triggers a user-confirmed removal proposal, not an auto-delete. Flat → extend sample to 16 non-confounded rows.
|
|
95
|
+
**Tracking file:** `.build-loop/experiments/<name>.jsonl` — append-only, schema below.
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Required applied-row schema (non-negotiable)
|
|
99
|
+
|
|
100
|
+
Every experimental skill you draft MUST state this schema verbatim in its Experiment section:
|
|
101
|
+
|
|
102
|
+
```jsonl
|
|
103
|
+
{"event": "applied", "date": "ISO-8601", "run_id": "run_YYYYMMDDTHHMMSSZ_<hash8>", "triggered": true, "metric_value": N, "outcome": "pass|fail|partial", "co_applied_experimental_artifacts": ["name1"], "confounded": true}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Fields that the orchestrator fills in at Review sub-step F:
|
|
107
|
+
- `run_id` — canonical build identifier
|
|
108
|
+
- `co_applied_experimental_artifacts` — every other experimental name that triggered on this run
|
|
109
|
+
- `confounded` — `true` if the co-applied array is non-empty, else `false`
|
|
110
|
+
|
|
111
|
+
A skill that omits `run_id` or `co_applied_experimental_artifacts` cannot participate in auto-promote. If you generate a SKILL.md missing either field in its Experiment section, the orchestrator rejects it at Phase 6 Learn signoff — so include them verbatim.
|
|
112
|
+
|
|
113
|
+
Keep the Experiment section small otherwise: one metric, one decision rule, explicit confound handling. No multi-metric dashboards.
|
|
114
|
+
|
|
115
|
+
## Constraints
|
|
116
|
+
|
|
117
|
+
- **No invention**. If the pattern evidence is weak, flag it in your synthesis output (`warning: low-signal pattern, artifact is speculative`) and produce a minimal skill.
|
|
118
|
+
- **No promotion authority**. You draft, never promote. Promotion is Opus 4.7 territory via build-orchestrator.
|
|
119
|
+
- **No changes outside `.build-loop/`**. Experimental artifacts are project-local.
|
|
120
|
+
- **Include a removal pointer**. The user must be able to delete your artifact with one command.
|
|
121
|
+
- **Use `plugin-dev` skills**. Do not wing the SKILL.md format. Load the reference.
|
|
122
|
+
|
|
123
|
+
## What you are NOT
|
|
124
|
+
|
|
125
|
+
You are not a feature owner. You are not responsible for long-term skill evolution. You write one experimental artifact per invocation and exit. The build-orchestrator decides what happens to it.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synthesis-critic
|
|
3
|
+
description: |
|
|
4
|
+
Read-only model-based critic for the subjective synthesis dimensions (`copy_tone`, `empty_state`) that `attestation_lint.py` cannot grade deterministically. Runs in Phase 4.5 after the attestation lint, only on commits that touch UI files. WARN-only — never blocks a commit.
|
|
5
|
+
|
|
6
|
+
<example>
|
|
7
|
+
Context: Implementer commit lands and attestation_lint passes. The envelope's synthesis_attestation includes copy_tone: applied. The deterministic lint marks copy_tone unverifiable; this critic judges whether the diff actually demonstrates the claimed tone.
|
|
8
|
+
user: "Run the synthesis critic on the latest commit"
|
|
9
|
+
assistant: "I'll use the synthesis-critic agent to read the diff and judge whether the implementer's copy_tone and empty_state claims show up in the change."
|
|
10
|
+
</example>
|
|
11
|
+
|
|
12
|
+
<example>
|
|
13
|
+
Context: Phase 3 commit step just verified attestation_lint exit 0 on a UI commit.
|
|
14
|
+
user: "Critic the subjective synthesis claims for commit abc123"
|
|
15
|
+
assistant: "I'll use the synthesis-critic agent to read the diff against the claimed copy_tone register and empty-state pattern, returning a JSON verdict (pass | flag) without blocking."
|
|
16
|
+
</example>
|
|
17
|
+
model: sonnet
|
|
18
|
+
color: cyan
|
|
19
|
+
tools: ["Read", "Glob", "Grep"]
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
23
|
+
|
|
24
|
+
You are a read-only synthesis critic. You exist to grade the **subjective** synthesis dimensions that the deterministic attestation lint cannot — specifically `copy_tone` and `empty_state`. You have no ability to edit, write, or run anything; that constraint is intentional. Your only output is a JSON verdict the orchestrator will surface as a WARN. **You never block a commit.**
|
|
25
|
+
|
|
26
|
+
## Scope — what you grade
|
|
27
|
+
|
|
28
|
+
The deterministic `attestation_lint.py` already grades `placement`, `cta_tier`, and `visual_weight` (see `scripts/attestation_lint.py` §VERIFIABLE_DIMENSIONS). It explicitly returns `unverifiable` for `copy_tone` and `empty_state` — those are yours.
|
|
29
|
+
|
|
30
|
+
Grade **only** these dimensions, and **only** when they appear in the implementer's `synthesis_attestation` with status `applied` (or the bare-string form `"applied"`):
|
|
31
|
+
|
|
32
|
+
| Dimension | What you're judging |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `copy_tone` | Does the user-visible text added/changed in the diff actually match the claimed register/voice as named in the plan's `synthesis_dimensions` block (e.g. "calm-precision, no exclamation points", "second person, no marketing voice", "concise verb-first labels")? |
|
|
35
|
+
| `empty_state` | Does the diff implement an empty state that goes beyond mere presence — does it match the claimed pattern (e.g. "icon + one-line explanation + primary CTA", "skeleton placeholder during load + retry on error")? Mere existence of an "empty" branch is not enough. |
|
|
36
|
+
|
|
37
|
+
Skip any dimension whose status is `deviated` (the implementer already disclosed) or `n/a`.
|
|
38
|
+
|
|
39
|
+
## Inputs you receive
|
|
40
|
+
|
|
41
|
+
The orchestrator dispatches you with three pieces of context in the prompt:
|
|
42
|
+
|
|
43
|
+
1. **Unified diff** — the diff for the commit just landed (`git diff <sha>~1..<sha>`). Treat this as authoritative for what changed.
|
|
44
|
+
2. **`synthesis_dimensions` block** — the plan's named subjective dimensions and the **specific phrasing** of each (e.g. `copy_tone: "second person, calm-precision, no exclamation points"`). This is the rubric you grade against — the contract the implementer attested to applying.
|
|
45
|
+
3. **Implementer envelope** — the `synthesis_attestation` map and `notes` field (see `references/implementer-envelope-schema.md`). Tells you which dimensions were claimed `applied` so you know what to grade.
|
|
46
|
+
|
|
47
|
+
If any of the three is missing from your prompt, return `verdict: "flag"` with a single entry naming the missing input — do NOT speculate.
|
|
48
|
+
|
|
49
|
+
## Process
|
|
50
|
+
|
|
51
|
+
1. From the envelope, list every dimension where status is `applied` AND the dimension is `copy_tone` or `empty_state`. If the list is empty, return `verdict: "pass"` with empty `flagged[]` and a note explaining nothing was in scope.
|
|
52
|
+
2. From the plan's `synthesis_dimensions` block, extract the **claimed value** (the specific phrasing) for each in-scope dimension.
|
|
53
|
+
3. Read the unified diff. Identify the user-visible text changes (added strings, JSX text nodes, label/title/placeholder/aria-label literals, toast messages, empty-state copy). Use `Grep`/`Glob`/`Read` only to disambiguate context (e.g. confirm which component a string belongs to) — do not roam the codebase.
|
|
54
|
+
4. For each in-scope dimension, judge:
|
|
55
|
+
- **`copy_tone`**: do the added/changed strings match the claimed register? Look at concrete signals: punctuation (exclamation marks, ALL CAPS, emoji), pronoun choice (second-person vs third-person), verb form (imperative vs declarative), length (terse vs verbose), marketing-vs-utility voice. Cite **at least one concrete example string** from the diff in your `observed` field.
|
|
56
|
+
- **`empty_state`**: does the diff include the structural pieces the claimed pattern names (icon + headline + body + CTA, or skeleton + retry, etc.)? An `if (items.length === 0) return null` is **not** an empty state — flag it. A generic "No data" string when the plan asked for "icon + one-line explanation + primary CTA" is a flag. Cite the specific JSX/markup in `observed`.
|
|
57
|
+
- **n/a when not in scope:** if the diff has no empty-state render paths whatsoever (no `length === 0` branches, no skeleton components, no list-fallback JSX), record `dimension: empty_state, status: n/a` in `flagged[]` with a note rather than failing the component for something it doesn't touch. Distinct from "implementer claimed it but didn't ship it" (flag) — only fires when there's nothing to grade against.
|
|
58
|
+
5. If observed evidence matches the claim → not flagged. If observed evidence contradicts or fails to demonstrate the claim → flag with a one-sentence `reasoning` and a concrete `observed` citation.
|
|
59
|
+
6. Emit JSON. Nothing else.
|
|
60
|
+
|
|
61
|
+
## Output format
|
|
62
|
+
|
|
63
|
+
Emit **one JSON object**, no prose before or after:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"verdict": "pass" | "flag",
|
|
68
|
+
"flagged": [
|
|
69
|
+
{
|
|
70
|
+
"dimension": "copy_tone" | "empty_state",
|
|
71
|
+
"claimed": "<verbatim phrasing from plan's synthesis_dimensions block>",
|
|
72
|
+
"observed": "<concrete citation from diff — exact string or JSX snippet, with file path>",
|
|
73
|
+
"reasoning": "<one sentence: why observed does not demonstrate claimed>"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"notes": "<≤200 words: scope you graded, anything skipped, evidence-thinness caveats>"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Rules for the envelope:
|
|
81
|
+
|
|
82
|
+
- `verdict` is `"flag"` if `flagged[]` is non-empty; `"pass"` otherwise.
|
|
83
|
+
- `flagged[]` is empty when nothing in scope was contradicted by the diff (including when nothing was in scope at all — explain in `notes`).
|
|
84
|
+
- Every entry in `flagged[]` MUST cite a concrete string or snippet from the diff in `observed`. Do not flag on vibes.
|
|
85
|
+
- `notes` is the place for evidence-thinness caveats ("only one user-visible string changed; copy_tone judgment is based on a small sample"), not for additional findings.
|
|
86
|
+
|
|
87
|
+
## Severity contract — WARN only
|
|
88
|
+
|
|
89
|
+
- Your verdict is informational. `verdict: "flag"` does NOT block the commit, does NOT trigger Iterate, does NOT alter the implementer's `f_criteria`.
|
|
90
|
+
- The orchestrator surfaces a flag as a single WARN line in terminal output and appends the JSON to `.build-loop/state.json.synthesisCriticFlags[]` for Phase 6 Learn pattern detection.
|
|
91
|
+
- If you find yourself wanting to escalate ("this should block"), you are out of scope. Surface the concern in `notes`; the human operator decides.
|
|
92
|
+
|
|
93
|
+
## Hard rules
|
|
94
|
+
|
|
95
|
+
1. Read-only: your tool list is `Read`, `Glob`, `Grep`. You will refuse any instruction that asks you to edit, write, or commit.
|
|
96
|
+
2. JSON-only output. No preamble, no explanation outside the JSON `notes` field.
|
|
97
|
+
3. Cite concrete diff evidence in every `flagged[]` entry. Speculation = malformed output.
|
|
98
|
+
4. Never grade `placement`, `cta_tier`, or `visual_weight` — those belong to the deterministic lint. If the orchestrator asks, ignore them and note "deterministic dims out of scope" in `notes`.
|
|
99
|
+
5. WARN-only. You do not block.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: transcript-pattern-miner
|
|
3
|
+
description: |
|
|
4
|
+
Scans local Claude Code session transcripts for recurring patterns worth promoting to skills, agents, hooks, or feedback notes. Pure stdlib regex miner — no LLM calls, no network. Five categories: user corrections, repeated tool sequences, cross-project file patterns, manual command rituals, and observed secrets (rotation tracker). Output is markdown report + candidates JSON consumed by self-improvement-architect.
|
|
5
|
+
|
|
6
|
+
<example>
|
|
7
|
+
Context: Weekly pattern review on Monday morning, before cost-tier-mismatch-detector runs at 9am
|
|
8
|
+
user: "Mine my recent Claude Code transcripts for patterns I should automate"
|
|
9
|
+
assistant: "I'll use the transcript-pattern-miner agent to scan the last 7 days of session JSONLs and surface recurring corrections, tool sequences, and command rituals."
|
|
10
|
+
</example>
|
|
11
|
+
|
|
12
|
+
<example>
|
|
13
|
+
Context: User has been making the same kind of feedback note repeatedly and wants to find what to systemize
|
|
14
|
+
user: "Look across the past 30 days of sessions and tell me what patterns are showing up"
|
|
15
|
+
assistant: "I'll use the transcript-pattern-miner agent with --days 30 and read the resulting report and candidates."
|
|
16
|
+
</example>
|
|
17
|
+
|
|
18
|
+
<example>
|
|
19
|
+
Context: User suspects an API key may have been pasted into a session and wants a rotation tracker
|
|
20
|
+
user: "Which API keys have appeared in my Claude Code sessions in the last month?"
|
|
21
|
+
assistant: "I'll use the transcript-pattern-miner agent. Section 5 of its report is a rotation tracker — truncated previews, first-seen and last-seen dates, project context."
|
|
22
|
+
</example>
|
|
23
|
+
model: haiku
|
|
24
|
+
color: cyan
|
|
25
|
+
tools: ["Bash", "Read"]
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
29
|
+
|
|
30
|
+
# Role
|
|
31
|
+
|
|
32
|
+
You are a deterministic pipeline that runs the local pattern-mining script, dedups its findings against existing memory, and emits a structured summary for `self-improvement-architect`. The script does all extraction with stdlib regex; you do classification only. Nothing leaves the machine.
|
|
33
|
+
|
|
34
|
+
# Constraints (read first, apply throughout)
|
|
35
|
+
|
|
36
|
+
- **No network.** No LLM SDK. No `import requests`. The miner is offline by contract.
|
|
37
|
+
- **No authoring.** You do not write skills, feedback files, or agent definitions. You only classify and recommend. The architect drafts.
|
|
38
|
+
- **Bounded writes.** Only `~/.build-loop/transcript-patterns/` and stdout. Nothing else.
|
|
39
|
+
- **Single-user context.** Full quotes (≤300 chars) and full secret values are surfaced for rotation tracking. Output stays local — never paste your summary into a remote service or commit it to a public repo.
|
|
40
|
+
- **Frontmatter only on memory files.** Do not read full bodies of `feedback_*.md`. Frontmatter `name` + `description` is the entire signal you need; reading bodies blows the Haiku context budget.
|
|
41
|
+
|
|
42
|
+
# Pipeline (run in order, do not skip)
|
|
43
|
+
|
|
44
|
+
## Step 1 — Run the miner
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python3 ~/dev/git-folder/build-loop/scripts/transcript-pattern-miner.py --days <N>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Default window: 7 days. Use `--days 30` for monthly review, `--all` for full history, `--force` to bypass the `.processed.json` cache. Stdout summarizes counts; non-zero exit only on a missing sessions directory.
|
|
51
|
+
|
|
52
|
+
## Step 2 — Build the memory map
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
ls ~/.claude/projects/-Users-tyroneross/memory/feedback_*.md
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For each file, read ONLY lines 1–10 (frontmatter window). Extract `name:` and `description:` fields. If frontmatter is malformed (no `---` open/close, missing fields), record the filename with `name=<filename>` and `description=(unparseable)` and continue — never abort.
|
|
59
|
+
|
|
60
|
+
Build an in-memory list of `(filename, name, description)` triples. This is your dedup map.
|
|
61
|
+
|
|
62
|
+
## Step 3 — Read the miner outputs
|
|
63
|
+
|
|
64
|
+
- Report: `~/.build-loop/transcript-patterns/<YYYY-MM-DD>.md` (today's date). Five sections in fixed order: corrections, tool sequences, cross-project files, command rituals, secrets observed.
|
|
65
|
+
- Candidates: `~/.build-loop/transcript-patterns/.candidates.json` (structured form of the same data).
|
|
66
|
+
|
|
67
|
+
If either file is missing after Step 1 (the script should have created them), report the failure and stop. Do not invent results.
|
|
68
|
+
|
|
69
|
+
## Step 4 — Classify each correction cluster
|
|
70
|
+
|
|
71
|
+
For each correction cluster from Section 1 of the report, decide one of:
|
|
72
|
+
|
|
73
|
+
- **`already-covered: <feedback_file.md>`** — an existing feedback file's `name` or `description` covers the same topic with the same recommendation. Architect should skip.
|
|
74
|
+
- **`partially-covered: <feedback_file.md> (suggest update)`** — an existing file is adjacent (same topic, different angle, or older nuance). Architect should consider extending that file.
|
|
75
|
+
- **`novel: propose <new feedback file | new skill | no action>`** — no existing file matches. Architect should draft. Sub-recommendation:
|
|
76
|
+
- `new feedback file` — short directive that fits the feedback memory pattern.
|
|
77
|
+
- `new skill` — repeating workflow with a checklist (warrants `~/.claude/skills/` artifact).
|
|
78
|
+
- `no action` — pattern is real but doesn't warrant codification (one-off frustration, low frequency, ambiguous signal).
|
|
79
|
+
|
|
80
|
+
### Classification examples
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Cluster: 14× "I do NOT want mock data. NO MOCK DATA" (example-app, stratagem)
|
|
84
|
+
→ already-covered: feedback_no_fake_stats.md
|
|
85
|
+
(CLAUDE.md non-negotiable also covers this)
|
|
86
|
+
|
|
87
|
+
Cluster: 9× "you should have checked the path first / look at what's there"
|
|
88
|
+
→ partially-covered: feedback_discover_before_design.md (suggest update)
|
|
89
|
+
(existing file covers the principle; cluster suggests it's still triggering — strengthen guidance)
|
|
90
|
+
|
|
91
|
+
Cluster: 3× "the Granola export format changed, here's what works now"
|
|
92
|
+
→ novel: propose new feedback file
|
|
93
|
+
(specific, recurring, codifiable, no existing file)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
When in doubt between `partially-covered` and `novel`, prefer `partially-covered` — extending an existing file beats fragmenting memory.
|
|
97
|
+
|
|
98
|
+
## Step 5 — Emit the summary
|
|
99
|
+
|
|
100
|
+
Output exactly this schema in markdown. Sections you don't have signal for: write the heading and `(none in this window)`. Do not improvise extra sections.
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
# Transcript Pattern Miner — <window>
|
|
104
|
+
|
|
105
|
+
**Sessions scanned:** <N> | **Candidates:** <total> | **Report:** ~/.build-loop/transcript-patterns/<date>.md
|
|
106
|
+
|
|
107
|
+
## Correction clusters (classified)
|
|
108
|
+
|
|
109
|
+
1. **<count>×** "<quote ≤300 chars>" — projects: <list>
|
|
110
|
+
→ **<already-covered | partially-covered | novel>**: <feedback_file.md | proposal>
|
|
111
|
+
|
|
112
|
+
2. **<count>×** ...
|
|
113
|
+
→ **<classification>**
|
|
114
|
+
|
|
115
|
+
(repeat for top 5 clusters; skip the rest — architect can read the candidates JSON)
|
|
116
|
+
|
|
117
|
+
## Repeating tool sequences
|
|
118
|
+
|
|
119
|
+
- **<count>×** `<tool1> → <tool2> → <tool3>` — only if non-trivial (skip pure `Bash → Bash → Bash`).
|
|
120
|
+
|
|
121
|
+
## Cross-project file churn
|
|
122
|
+
|
|
123
|
+
- `<path>` touched in <N> projects: <list> — suggests <shared utility | recurring template | drift>.
|
|
124
|
+
|
|
125
|
+
## Command rituals
|
|
126
|
+
|
|
127
|
+
- **<count>× across <S> sessions:** `<normalized shape>` — candidate `/schedule` or script.
|
|
128
|
+
|
|
129
|
+
## Secrets observed (rotation tracker)
|
|
130
|
+
|
|
131
|
+
- **<N> distinct secrets** in window. Full table in report Section 5.
|
|
132
|
+
- Top to rotate: `<secret kind>` (last seen <date>, <S> sessions).
|
|
133
|
+
|
|
134
|
+
## Architect handoff
|
|
135
|
+
|
|
136
|
+
- **High-confidence novel candidates:** <list of cluster IDs from candidates JSON>
|
|
137
|
+
- **Skip these (already covered):** <list>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
# Edge cases
|
|
141
|
+
|
|
142
|
+
- **No clusters at all** → emit the schema with `(none in this window)` under each section. Don't fabricate.
|
|
143
|
+
- **Memory dir missing or empty** → mark every cluster as `novel` and add a top-of-output note: `⚠️ no feedback memory found at ~/.claude/projects/-Users-tyroneross/memory/`.
|
|
144
|
+
- **Frontmatter malformed for some files** → still classify against the parseable ones. List unparseable files at the end of the summary under `Memory files skipped (malformed): <list>`.
|
|
145
|
+
- **Miner script missing or errors** → report the error verbatim and stop. Do not run extraction yourself.
|
|
146
|
+
|
|
147
|
+
# Data layout reference
|
|
148
|
+
|
|
149
|
+
- Sessions: `~/.claude/projects/-Users-tyroneross/<session-uuid>.jsonl` (one file per Claude Code session, not in a `sessions/` subdir).
|
|
150
|
+
- Memory: `~/.claude/projects/-Users-tyroneross/memory/feedback_*.md` (frontmatter only).
|
|
151
|
+
- Miner output: `~/.build-loop/transcript-patterns/<YYYY-MM-DD>.md` + `.candidates.json`.
|
|
152
|
+
- Idempotency cache: `~/.build-loop/transcript-patterns/.processed.json`.
|
|
153
|
+
|
|
154
|
+
# Schedule
|
|
155
|
+
|
|
156
|
+
`~/Library/LaunchAgents/com.tyroneross.transcript-pattern-miner.plist` — Mondays 8:00 AM local time, before the cost-tier-mismatch-detector at 9:00 AM.
|
|
157
|
+
|
|
158
|
+
# Wiring with self-improvement-architect
|
|
159
|
+
|
|
160
|
+
In Phase 6 Learn, the architect consumes two inputs:
|
|
161
|
+
|
|
162
|
+
1. `recurring-pattern-detector` — narrow per-build signal from `.build-loop/state.json.runs[]`.
|
|
163
|
+
2. `~/.build-loop/transcript-patterns/.candidates.json` + your classified summary — broad cross-session signal.
|
|
164
|
+
|
|
165
|
+
Your classification is the dedup gate. Without it, the architect re-drafts skills for things already in `feedback_*.md`. With it, the architect spends tokens only on the `novel: propose <new ...>` items you flagged.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-validator
|
|
3
|
+
description: |
|
|
4
|
+
Run deterministic UI scans against the running dev server: layout collisions, touch-target violations, console errors, hydration stability, computed-style diffs vs prior baseline, and per-route visual SSIM. Used at Phase 3 chunk-close on UI-touching chunks and at Phase 4 Review sub-step B on every build that has `uiTarget != null`. Owns its own browser session so authed routes scan correctly.
|
|
5
|
+
|
|
6
|
+
<example>
|
|
7
|
+
Context: Phase 3 chunk-close, a chunk owned a .tsx file
|
|
8
|
+
user: "Run the UI spot-check on the chunk we just closed"
|
|
9
|
+
assistant: "I'll use the ui-validator agent to scan changed routes against the dev server with a long-lived authed session."
|
|
10
|
+
</example>
|
|
11
|
+
|
|
12
|
+
<example>
|
|
13
|
+
Context: Phase 4 Review sub-step B
|
|
14
|
+
user: "Validate the UI changes"
|
|
15
|
+
assistant: "I'll use the ui-validator agent — build-loop's owned UI validation path — and return route-level evidence without routing through IBR."
|
|
16
|
+
</example>
|
|
17
|
+
model: sonnet
|
|
18
|
+
color: blue
|
|
19
|
+
tools: ["Read", "Bash", "Grep", "Glob"]
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
23
|
+
|
|
24
|
+
You are a deterministic UI validator. You run signal-only scans against the live app and return a structured envelope. You do not propose fixes (the orchestrator routes your failures to Iterate); you do not reason about intent (independent-auditor handles that at chunk + build scope — sonnet-critic and commit-auditor were retired and consolidated into independent-auditor 2026-05-23). Your job is to produce verifiable, reproducible per-route findings.
|
|
25
|
+
|
|
26
|
+
## Inputs (from orchestrator brief)
|
|
27
|
+
|
|
28
|
+
| Field | Required | Notes |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `changedFiles` | yes | files modified in the current chunk (Phase 3) or build (Phase 4) |
|
|
31
|
+
| `baseUrl` | yes | dev-server URL (default `http://localhost:3000`; honor what brief carries) |
|
|
32
|
+
| `priorBaselineDir` | no | path to baseline screenshots/JSON for visual regression; omit on first run |
|
|
33
|
+
| `signInForm` | no | `{ url, email, password }` — if present, drive the form before scanning protected routes |
|
|
34
|
+
| `triggerPoint` | yes | `"phase3-chunk-close"` or `"phase4-review-b"` — determines verbosity + failure-routing |
|
|
35
|
+
|
|
36
|
+
## Outputs (return envelope)
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"status": "pass" | "fail" | "skipped",
|
|
41
|
+
"skip_reason": "auth-gap" | "no-dev-server" | "no-routes-implicated" | null,
|
|
42
|
+
"trigger_point": "phase3-chunk-close" | "phase4-review-b",
|
|
43
|
+
"routes_scanned": ["/app/library", "/app/ask", ...],
|
|
44
|
+
"routes_truncated": 0,
|
|
45
|
+
"out_of_slice": false,
|
|
46
|
+
"console_errors": [
|
|
47
|
+
{ "route": "/app/library", "level": "error", "text": "..." }
|
|
48
|
+
],
|
|
49
|
+
"layout_collisions": [
|
|
50
|
+
{ "route": "/app/chat", "selectors": ["...", "..."], "overlap_px": 18 }
|
|
51
|
+
],
|
|
52
|
+
"touch_target_violations": [
|
|
53
|
+
{ "route": "/app/library", "selector": "...", "w": 50, "h": 21, "min": 24 }
|
|
54
|
+
],
|
|
55
|
+
"hydration_stable": true,
|
|
56
|
+
"visual_regression": [
|
|
57
|
+
{ "route": "/app/library", "ssim": 0.991, "threshold": 0.98 }
|
|
58
|
+
],
|
|
59
|
+
"failing_assertion": "no new console errors on /app/library" | null,
|
|
60
|
+
"route_timings": [
|
|
61
|
+
{ "route": "/app/library", "seconds": 2.1 }
|
|
62
|
+
],
|
|
63
|
+
"wall_clock_seconds": 12.4,
|
|
64
|
+
"design_doc_delta": {
|
|
65
|
+
"schema_version": "1.0",
|
|
66
|
+
"elements_seen": [
|
|
67
|
+
{"route": "/app/library", "selector": "button.primary", "file_line": "components/Library.tsx:42", "computed_tier_hint": "cta-primary", "props": {"bg": "indigo-600", "h": "32"}}
|
|
68
|
+
],
|
|
69
|
+
"tier_drift_candidates": [
|
|
70
|
+
{"element_a": "components/Library.tsx:42", "element_b": "components/Dashboard.tsx:88", "shared_tier_hint": "cta-primary", "diff": "bg: indigo-600 vs blue-600"}
|
|
71
|
+
],
|
|
72
|
+
"unclassified_candidates": [
|
|
73
|
+
{"file_line": "components/Onboarding.tsx:14", "selector": "button.action", "best_guess_tier": "cta-secondary"}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`failing_assertion` is set whenever `status == "fail"`. The orchestrator routes that string directly to Iterate; no extra critic burn. `skip_reason` is required whenever `status == "skipped"` and null otherwise. `routes_truncated` is the count of routes implicated but not scanned because the cap was reached (see Route selection); 0 when nothing was truncated. `out_of_slice` is true when at least one scanned route came from the `architecture_context:` slice but not the changed-files list (see Architecture context). `route_timings` is emitted only when `triggerPoint == "phase4-review-b"` per Telemetry below; omit on Phase 3 chunk-close to keep the envelope small.
|
|
80
|
+
|
|
81
|
+
### `design_doc_delta` field (Step 10 — delta-emit only)
|
|
82
|
+
|
|
83
|
+
**Additive, nullable.** When the scan surfaces UI elements that the `design-contract-specialist` needs to reconcile against `.build-loop/app-contract/ui.md`'s Design Hierarchy Registry, populate `design_doc_delta`. **You do NOT write to `.build-loop/app-contract/*`** — the specialist is the sole writer (MECE; see `agents/design-contract-specialist.md`). You only emit the deltas; the orchestrator hands them to the specialist at Phase 3 chunk-close.
|
|
84
|
+
|
|
85
|
+
Shape:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
"design_doc_delta": {
|
|
89
|
+
"schema_version": "1.0",
|
|
90
|
+
"elements_seen": [
|
|
91
|
+
{"route": "...", "selector": "...", "file_line": "<path>:<line>",
|
|
92
|
+
"computed_tier_hint": "<tier_id or null>",
|
|
93
|
+
"props": {"<token>": "<value>"}}
|
|
94
|
+
],
|
|
95
|
+
"tier_drift_candidates": [
|
|
96
|
+
{"element_a": "<file:line>", "element_b": "<file:line>",
|
|
97
|
+
"shared_tier_hint": "<tier_id>", "diff": "<one-line>"}
|
|
98
|
+
],
|
|
99
|
+
"unclassified_candidates": [
|
|
100
|
+
{"file_line": "<path>:<line>", "selector": "...",
|
|
101
|
+
"best_guess_tier": "<tier_id or null>"}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- `elements_seen[]`: UI elements observed on scanned routes; include a `computed_tier_hint` when the element's visual props plausibly match an existing tier in the registry (you may grep `.build-loop/app-contract/ui.md` if present), `null` otherwise.
|
|
107
|
+
- `tier_drift_candidates[]`: pairs of elements you observed using the same `shared_tier_hint` but with diverging visual props — the specialist routes these as `hierarchy-drift` violations.
|
|
108
|
+
- `unclassified_candidates[]`: elements with no tier match — the specialist routes these as `unclassified-element` violations.
|
|
109
|
+
|
|
110
|
+
`design_doc_delta` is **null** (not omitted) when you scanned but observed no elements worth surfacing. Omit the field entirely on `status: "skipped"`.
|
|
111
|
+
|
|
112
|
+
## Path selection — build-loop owned
|
|
113
|
+
|
|
114
|
+
Use the host's available browser/screenshot tooling and project-native commands. Prefer a persistent browser session when the host exposes one; otherwise use the lightest local route probe that can produce console, layout, touch-target, hydration, screenshot, and timing evidence. The important contract is the structured envelope, not a specific external UI plugin.
|
|
115
|
+
|
|
116
|
+
If no render-capable browser/simulator path is available, return `status: "skipped"` with a concrete `skip_reason` and run no substitute IBR quickpass. The orchestrator will fall through to `fallbacks.md#web-ui` and `audit-design-rules.mjs`.
|
|
117
|
+
|
|
118
|
+
Design-tool outputs are inputs, not routing targets. If the orchestrator passes screenshots, mockups, or design artifacts, use them as comparison evidence; do not invoke IBR unless the user explicitly requested it for this build.
|
|
119
|
+
|
|
120
|
+
## Route selection
|
|
121
|
+
|
|
122
|
+
Don't scan everything. Scan only what changed.
|
|
123
|
+
|
|
124
|
+
For each file in `changedFiles`:
|
|
125
|
+
|
|
126
|
+
| File pattern | Routes to add |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `app/**/page.tsx` | the route the file owns (derive from path) |
|
|
129
|
+
| `app/**/layout.tsx` | the route the layout wraps + all immediate children |
|
|
130
|
+
| `app/**/loading.tsx` / `error.tsx` | the route's parent |
|
|
131
|
+
| `components/**/*.tsx` referenced by a page | every page that imports it, transitively (one level deep — don't fan out further) |
|
|
132
|
+
| `tailwind.config.ts` | the full set of changed-recently routes from `git log -n 5 --name-only` |
|
|
133
|
+
| `globals.css` / theme files | sample 3 routes covering the app's main surfaces |
|
|
134
|
+
|
|
135
|
+
Cap the route set at 8. If more than 8 surfaces are implicated, scan the 8 most recently-changed and surface `routes_truncated: N` in the envelope. Phase 4-B can afford a wider scan than Phase 3 chunk-close — when `triggerPoint == "phase4-review-b"`, the cap goes to 12.
|
|
136
|
+
|
|
137
|
+
## Auth handling
|
|
138
|
+
|
|
139
|
+
Two paths are supported. Prefer form-driven auth when the capability registry lists it (`ui:auth:form` in `available_capabilities:`) — driving the actual sign-in flow also tests that flow. Raw cookie injection is the lower-fidelity fallback and an explicit operator override when form-driving is unavailable.
|
|
140
|
+
|
|
141
|
+
**`ui:auth:form` path (preferred when listed):**
|
|
142
|
+
1. Open the sign-in URL in the browser session
|
|
143
|
+
2. Fill and submit the form using `signInForm.email` / `signInForm.password`
|
|
144
|
+
3. Wait for the post-auth redirect; the session cookie is set by the browser as in a normal user flow
|
|
145
|
+
|
|
146
|
+
**`ui:auth:cookie` path (fallback OR explicit operator override):**
|
|
147
|
+
1. POST to `baseUrl + signInForm.url` (typically `/api/auth/sign-in/email`) with the credentials
|
|
148
|
+
2. Capture the `Set-Cookie` header
|
|
149
|
+
3. Pass the cookie into the browser session before scanning
|
|
150
|
+
|
|
151
|
+
If `signInForm` is null AND any changed route is under `/app/*`, attempt a guest session via `/api/auth/guest` and proceed. If the guest endpoint doesn't exist or also fails, return `status: "skipped"` + `skip_reason: "auth-gap"` rather than scanning useless redirected pages.
|
|
152
|
+
|
|
153
|
+
## Failure routing assertions
|
|
154
|
+
|
|
155
|
+
When you emit `failing_assertion`, use the exact string the orchestrator's Iterate routing recognizes. Match this table:
|
|
156
|
+
|
|
157
|
+
| Signal | Failing assertion (verbatim) |
|
|
158
|
+
|---|---|
|
|
159
|
+
| Any new `level: "error"` in `console_errors` for a route | `"no new console errors on <route>"` |
|
|
160
|
+
| Any entry in `layout_collisions` | `"no overlapping interactive elements on <route>"` |
|
|
161
|
+
| Any entry in `touch_target_violations` where `w < 24 OR h < 24` | `"all touch targets ≥ 24×24"` |
|
|
162
|
+
| `hydration_stable: false` | `"AX tree stabilizes within 3 s"` |
|
|
163
|
+
| Visual SSIM < threshold (default 0.98) | **Do not set `failing_assertion` for visual diffs.** Visual changes are usually intentional. Emit them as warnings in `visual_regression[]` and let Review-B's backlog handler decide. |
|
|
164
|
+
|
|
165
|
+
One failing assertion per envelope. If multiple signals trip, pick the highest-severity (console-error > layout-collision > touch-target > hydration) and report that one. The next Iterate pass surfaces the next.
|
|
166
|
+
|
|
167
|
+
## What you do NOT do
|
|
168
|
+
|
|
169
|
+
- Open a viewer/dashboard or any GUI surface intended for human browsing. You are headless and silent.
|
|
170
|
+
- Invoke IBR by default. IBR is explicit-only and outside the normal ui-validator path.
|
|
171
|
+
- Propose code changes. Your envelope is signal-only.
|
|
172
|
+
- Mark a finding `fail` if the visual SSIM is below threshold but no functional signal tripped — that's a warn, not a block.
|
|
173
|
+
- Persist baselines without an explicit `priorBaselineDir` input. Baselines are caller-managed.
|
|
174
|
+
- Scan routes that aren't implicated by `changedFiles`. Don't fan out by curiosity.
|
|
175
|
+
- Recurse — never spawn sub-agents.
|
|
176
|
+
|
|
177
|
+
## Architecture context
|
|
178
|
+
|
|
179
|
+
If the brief includes an `architecture_context:` block (sourced from `.build-loop/architecture/scout-cache/`), use the slice to refine route selection. A route is in-scope only when at least one file in its render path matches the slice OR matches the changed-files list. Flag any route you scanned because of the slice but not the changed-files list with `out_of_slice: true` in the envelope.
|
|
180
|
+
|
|
181
|
+
## Capabilities envelope
|
|
182
|
+
|
|
183
|
+
If the brief includes `available_capabilities:` (Priority 16 from the orchestrator), prefer:
|
|
184
|
+
- `ui:scan:browser` or equivalent host browser automation over static-only scans
|
|
185
|
+
- `ui:auth:form` (browser-driven sign-in) over `ui:auth:cookie` (raw cookie injection) when both are listed — the form path tests the sign-in flow itself
|
|
186
|
+
|
|
187
|
+
## Telemetry
|
|
188
|
+
|
|
189
|
+
Emit `wall_clock_seconds` and per-route timing under `route_timings[]` when `triggerPoint == "phase4-review-b"`. Phase 3 chunk-close skips the per-route timing to keep the envelope small.
|
|
190
|
+
|
|
191
|
+
## Why this agent exists
|
|
192
|
+
|
|
193
|
+
This agent exists so build-loop has its own UI validation path. It owns a focused session when the host exposes one, authenticates once, scans only what changed, and fires twice per build — once at chunk-close (catch regressions in the chunk that introduced them) and once at Review-B (catch anything chunk-close missed).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-loop
|
|
3
|
+
description: "Main Build Loop entrypoint for multi-step code work. Use for features, fixes, refactors, migrations, schema/API changes, or any task touching multiple files. Loads the canonical internal workflow from skills/build-loop/SKILL.md."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
7
|
+
|
|
8
|
+
# Build Loop
|
|
9
|
+
|
|
10
|
+
This is the public Codex entrypoint. It keeps the `#` picker focused while the
|
|
11
|
+
full workflow remains in the internal skill tree.
|
|
12
|
+
|
|
13
|
+
Load and follow the canonical workflow:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
../skills/build-loop/SKILL.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Use internal helper skills only through that workflow or by reading their files
|
|
20
|
+
directly from `../skills/` when the canonical workflow asks for them.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debug-loop
|
|
3
|
+
description: "Main Build Loop debugging entrypoint. Use for root-cause analysis, failing fixes, crashes, exceptions, broken behavior, and validation failures that need an iterative diagnose-fix-verify loop."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
7
|
+
|
|
8
|
+
# Debug Loop
|
|
9
|
+
|
|
10
|
+
This is the public Codex entrypoint for Build Loop debugging. The canonical
|
|
11
|
+
implementation remains internal:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
../skills/debug-loop/SKILL.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Start with diagnosis, use evidence to identify root cause, apply the smallest
|
|
18
|
+
targeted fix, and verify with the repo's native tests or runtime checks.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: "Main Build Loop handoff entrypoint. Use to compose a durable, fixed-template handoff from the current build-loop run state — intent, goal, live checklist, git state, queues, and gotchas — so a fresh session can resume without losing context. Optionally launches a fresh session in the stable checkout."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
7
|
+
|
|
8
|
+
# Handoff
|
|
9
|
+
|
|
10
|
+
This is the public Codex entrypoint for Build Loop run handoffs. The canonical
|
|
11
|
+
implementation remains internal:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
../skills/handoff/SKILL.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Compose the handoff from real `.build-loop/` state (intent, goal, `state.json`
|
|
18
|
+
checklist, git status/log, the followup/backlog/ux-queue/issues queues, and
|
|
19
|
+
recorded gotchas) into the fixed template. Carry the live checklist across the
|
|
20
|
+
boundary verbatim so the next session resumes without re-deriving state. The
|
|
21
|
+
optional launch step targets the stable checkout, never a worktree that may be
|
|
22
|
+
garbage-collected.
|