@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,65 @@
|
|
|
1
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
2
|
+
|
|
3
|
+
# LLM Eval Reference
|
|
4
|
+
|
|
5
|
+
Loaded on demand during Phase 2 (grader design) and Phase 5 (validation).
|
|
6
|
+
|
|
7
|
+
## Grading Hierarchy
|
|
8
|
+
|
|
9
|
+
1. **Code-based** (preferred): fast, deterministic, cheap. Test pass/fail, lint clean, build succeeds, schema validation.
|
|
10
|
+
2. **LLM-as-judge**: for nuanced criteria code can't check. Binary pass/fail only.
|
|
11
|
+
3. **Human**: last resort. Only for calibrating automated graders.
|
|
12
|
+
|
|
13
|
+
## LLM-as-Judge Rules
|
|
14
|
+
|
|
15
|
+
- **Binary pass/fail only**. No Likert scales. Categorical decisions are more reliable.
|
|
16
|
+
- **One evaluator per dimension**. No multi-dimension God Evaluator.
|
|
17
|
+
- **Judge reasons, then decides**. Think in thinking tags, output only pass/fail.
|
|
18
|
+
- **Use the running Claude instance as judge**. No external API calls.
|
|
19
|
+
|
|
20
|
+
## Judge Prompt Template
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
You are evaluating whether code meets a specific criterion.
|
|
24
|
+
|
|
25
|
+
<criterion>
|
|
26
|
+
{criterion_description}
|
|
27
|
+
</criterion>
|
|
28
|
+
|
|
29
|
+
<pass_condition>
|
|
30
|
+
{what_constitutes_a_pass}
|
|
31
|
+
</pass_condition>
|
|
32
|
+
|
|
33
|
+
<evidence>
|
|
34
|
+
{code_output_or_screenshot_or_test_result}
|
|
35
|
+
</evidence>
|
|
36
|
+
|
|
37
|
+
Think through your evaluation in <thinking> tags.
|
|
38
|
+
Then output exactly one word: PASS or FAIL.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Code-Based Grader Patterns
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm test 2>&1; echo "EXIT:$?" # pass if EXIT:0
|
|
45
|
+
npm run lint 2>&1; echo "EXIT:$?" # pass if EXIT:0
|
|
46
|
+
npx tsc --noEmit 2>&1; echo "EXIT:$?" # pass if EXIT:0
|
|
47
|
+
npm run build 2>&1; echo "EXIT:$?" # pass if EXIT:0
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Scorecard Format
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## Scorecard: [feature] — [date]
|
|
54
|
+
|
|
55
|
+
| # | Criterion | Method | Result | Evidence |
|
|
56
|
+
|---|-----------|--------|--------|----------|
|
|
57
|
+
| 1 | Tests pass | code | ✅ PASS | exit 0, 47/47 passing |
|
|
58
|
+
| 2 | Goal met | llm-judge | ❌ FAIL | Judge: missing X |
|
|
59
|
+
|
|
60
|
+
**Overall**: N/M PASS | **Iteration**: 1 of 5 | **Action**: Fix criterion 2
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Designing Good Criteria
|
|
64
|
+
|
|
65
|
+
Bad: "Code quality is good" → Good: "No lint errors, all types resolve, no `any` types outside explicit escape hatches"
|
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
2
|
+
|
|
3
|
+
# Capability Fallbacks
|
|
4
|
+
|
|
5
|
+
Inline guidance the orchestrator embeds in subagent prompts when a preferred plugin is absent. Subagents do not inherit parent Skill context — only text in the prompt survives the dispatch boundary. Copy the relevant section verbatim into the subagent prompt.
|
|
6
|
+
|
|
7
|
+
Each section is self-contained. Keep prose tight: the goal is "capture the concept" for new users without the full toolkit, not to replicate the plugin.
|
|
8
|
+
|
|
9
|
+
**Design principle**: fallbacks are degraded-but-useful, not skip-silently. Build-loop should carry knowledge of *what to look for* even when it can't run the deep validation. Every section below names specific files, grep patterns, or commands — not just "investigate carefully."
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## web-ui — Web UI build / validation
|
|
14
|
+
|
|
15
|
+
**Build-loop-owned static fallback.** When no browser/simulator/native-AX path is available, build-loop cannot compute every rendered style value, but it CAN grep the code for specific UI contract and design-rule violations. The checks below are the minimum-viable static-analysis subset.
|
|
16
|
+
|
|
17
|
+
> **Precedence note**: IBR is explicit-only. Do not route web UI builds, Review-B validation, coverage-gap generation, or Iterate re-validation through `build-loop:ibr-bridge` unless the user specifically asks for IBR / Interface Built Right / `.ibr-test.json`. The default path is `design-contract-specialist` for direction, `ui-validator` for rendered checks, and this static matrix when rendered evidence is unavailable.
|
|
18
|
+
|
|
19
|
+
### Design principles (Calm Precision, condensed from global `CLAUDE.md`)
|
|
20
|
+
|
|
21
|
+
- **Intent**: every visible element must help the user act, understand, decide, or recover. Remove controls, nav items, filters, charts, and options that do not work or do not serve the current workflow.
|
|
22
|
+
- **Grouping**: single border around related items; dividers between rows. Never individual borders on list items.
|
|
23
|
+
- **Hierarchy**: Title 14–16px bold → Description 12–14px → Metadata 11–12px muted.
|
|
24
|
+
- **Touch / size**: ≥24px desktop, ≥44px mobile tap targets. Button size reflects intent weight.
|
|
25
|
+
- **Contrast**: ≥4.5:1 for text against background. Use WebAIM checker if uncertain.
|
|
26
|
+
- **Spacing**: 8pt grid. Use 4/8/16/24/32/48/64 px increments.
|
|
27
|
+
- **Signal**: Status = text color only, no background badges. Color + weight for hierarchy, not boxes.
|
|
28
|
+
- **Content ≥ Chrome**: ≥70% content ratio on any page.
|
|
29
|
+
- **Disclosure (Hick's Law)**: show less, reveal on demand. Advanced options behind expand/more.
|
|
30
|
+
- **Nav selected state**: text-gray-900, font-medium, 2px bottom border. Never background pills.
|
|
31
|
+
- **Integrity**: no fake/placeholder buttons. Backend exists before UI.
|
|
32
|
+
- **Primary action**: one core hero/primary action by default. Add multiple primary actions only when users genuinely need parallel choices.
|
|
33
|
+
- **Beauty in the basics**: loading, empty, error, disabled, success, and permission states must be useful and polished.
|
|
34
|
+
|
|
35
|
+
### UI input/output contract fallback
|
|
36
|
+
|
|
37
|
+
When no specialized UI planning tool is available, require a `## UI Input/Output Contract` section before implementation. For each changed screen/component, fill:
|
|
38
|
+
|
|
39
|
+
| Field | Required answer |
|
|
40
|
+
|---|---|
|
|
41
|
+
| Surface | Screen/component + file path |
|
|
42
|
+
| Inputs | Every user-provided value |
|
|
43
|
+
| Outputs | Every system-returned value users see or decide from |
|
|
44
|
+
| Data taxonomy | Scalar/object/binary/stream; plain text/Markdown/rich text/JSON/chart/audio/etc.; persisted/transient/streaming/computed |
|
|
45
|
+
| Operation | CRUD method and any domain verb such as submit, approve, publish, reorder, export |
|
|
46
|
+
| Component mapping | Exact input control and output renderer |
|
|
47
|
+
| States | Empty, populated, focused, disabled, loading, success, error, empty result, streaming/abort when relevant |
|
|
48
|
+
| Modality | Text, voice, file, image, chart, map, AI/generated, streaming, plus fallback |
|
|
49
|
+
| Validation/security | Presentation, application, domain validation; sanitization; auth/authz denied-state behavior |
|
|
50
|
+
| Traceability | Schema/source, API endpoint/method, design-system component, rationale |
|
|
51
|
+
|
|
52
|
+
Fail Review-B if a changed UI surface lacks this contract, unless the change is copy-only and explicitly states no data surface changed.
|
|
53
|
+
|
|
54
|
+
### Static grep checks (run these at Review-D Fact-Check when rendered evidence is unavailable)
|
|
55
|
+
|
|
56
|
+
Each check returns matches = potential violation. Not all matches are real violations — some are false positives. Review output manually; flag when confidence is high.
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
# 1. Gestalt — individual borders on items inside a list/map
|
|
60
|
+
# Look for .map() returning elements with border styles
|
|
61
|
+
grep -rn "\.map(" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -B1 -A5 "border\|rounded-" | head -20
|
|
62
|
+
|
|
63
|
+
# 2. Touch targets — buttons/links narrower than 44px
|
|
64
|
+
# Catches explicit width props. Won't catch Tailwind classes without a second pass.
|
|
65
|
+
grep -rnE "<(button|a)\s[^>]*(width|w-[0-9])" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -vE "w-(full|auto|screen|[4-9][0-9]|1[0-9]{2,})" | head -20
|
|
66
|
+
|
|
67
|
+
# 3. Interactive elements missing handlers
|
|
68
|
+
# <button> without onClick or type="submit" is suspicious
|
|
69
|
+
grep -rnE "<button[^>]*>" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "onClick\|type=.submit.\|type=.reset." | head -20
|
|
70
|
+
|
|
71
|
+
# 4. <a> without href or onClick
|
|
72
|
+
grep -rnE "<a\s[^>]*>" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "href=\|onClick=" | head -20
|
|
73
|
+
|
|
74
|
+
# 5. Missing aria-label on icon-only buttons
|
|
75
|
+
grep -rnE "<button[^>]*>\s*<(svg|Icon|[A-Z][a-zA-Z]*Icon)" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "aria-label" | head -20
|
|
76
|
+
|
|
77
|
+
# 6. Status rendered as background pill (signal-to-noise violation)
|
|
78
|
+
# Common classes: bg-red-*, bg-green-*, bg-amber-* on small text
|
|
79
|
+
grep -rnE "bg-(red|green|amber|yellow|orange)-[0-9]{3}.*text-[a-z]+-[0-9]{3}" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | head -20
|
|
80
|
+
|
|
81
|
+
# 7. Hardcoded color hexes (should use tokens)
|
|
82
|
+
grep -rnE "#[0-9a-fA-F]{3,8}\b" --include="*.tsx" --include="*.jsx" --include="*.css" src/ app/ 2>/dev/null | grep -v "^[^:]*:[0-9]*:\s*//\|^[^:]*:[0-9]*:\s*/\*" | head -20
|
|
83
|
+
|
|
84
|
+
# 8. Non-8pt spacing (odd pixel values)
|
|
85
|
+
grep -rnE "(padding|margin|gap|top|right|bottom|left):\s*([0-9]+)px" --include="*.css" --include="*.scss" src/ app/ 2>/dev/null | awk -F'[:p]' '{if($4 && $4!~/^(0|4|8|12|16|20|24|32|40|48|56|64)$/) print $0}' | head -20
|
|
86
|
+
|
|
87
|
+
# 9. Console errors / warnings left in code
|
|
88
|
+
grep -rnE "console\.(log|error|warn|debug)" --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/" | head -20
|
|
89
|
+
|
|
90
|
+
# 10. Mock data / faker / placeholder in production paths
|
|
91
|
+
grep -rnE "(faker|@faker-js|lorem ipsum|PLACEHOLDER|TODO:.*REAL_DATA|Math\.random\(\))" --include="*.ts" --include="*.tsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/\|fixtures/" | head -20
|
|
92
|
+
|
|
93
|
+
# 11. Dead or decorative UI promises
|
|
94
|
+
grep -rnE "(coming soon|not implemented|TODO|href=\"#\"|onClick=\\{\\(\\) => \\{\\}\\}|disabled)" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/" | head -20
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### File-check matrix
|
|
98
|
+
|
|
99
|
+
After greps, verify these files exist and have the right shape:
|
|
100
|
+
|
|
101
|
+
| Check | File pattern | What it needs |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| Accessible landmarks | `app/layout.tsx` or `src/App.tsx` | `<main>`, `<nav>`, `<header>`, `<footer>` present |
|
|
104
|
+
| Skip-to-content link | Same | `<a href="#main">Skip</a>` before nav |
|
|
105
|
+
| Focus styles | global CSS | Explicit `:focus-visible` rule, not `outline: none` without replacement |
|
|
106
|
+
| Keyboard shortcuts | Anywhere | `onKeyDown` handlers on non-button interactive elements (divs, spans with roles) |
|
|
107
|
+
|
|
108
|
+
### Runtime validation
|
|
109
|
+
|
|
110
|
+
If the dev server is running, also do:
|
|
111
|
+
|
|
112
|
+
1. `curl -s -o /dev/null -w "%{http_code}" <url>` — page loads
|
|
113
|
+
2. `curl -s <url> | grep -c '<meta name="viewport"'` — must be 1 (viewport tag present, mobile-responsive)
|
|
114
|
+
3. User explicit manual check: tab through interactive elements, watch console, screenshot
|
|
115
|
+
|
|
116
|
+
Report any failures in Review-D with file path + line number. Flag with `⚠️ static-analysis only — browser/simulator evidence unavailable`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## mobile-ui — Mobile UI build / validation
|
|
121
|
+
|
|
122
|
+
Mobile-specific additions:
|
|
123
|
+
|
|
124
|
+
- **iOS (HIG)**: 44pt tap targets; use SF Symbols; respect safe-area insets (`safeAreaInset`, `UIEdgeInsets`); Dynamic Type support; minimum font 11pt.
|
|
125
|
+
- **Android (Material)**: 48dp tap targets; respect system back; elevation + shadows per Material guidelines; support gesture nav + 3-button nav.
|
|
126
|
+
- **React Native**: use `SafeAreaView` on every screen; test on both notched and non-notched devices.
|
|
127
|
+
- **Expo**: `useSafeAreaInsets()` from `react-native-safe-area-context`.
|
|
128
|
+
- **Keyboard**: inputs scroll into view; dismiss on outside tap; `returnKeyType` matches action.
|
|
129
|
+
- **Offline**: assume it; show cached state with staleness indicator.
|
|
130
|
+
- **Performance**: defer images until in viewport; avoid re-renders during scroll.
|
|
131
|
+
|
|
132
|
+
Validation without rendered tooling:
|
|
133
|
+
|
|
134
|
+
1. Run on smallest supported device (iPhone SE / small Android).
|
|
135
|
+
2. Run on largest (iPad Pro / tablet).
|
|
136
|
+
3. Toggle Dark Mode, Dynamic Type (iOS), font-scale (Android) — layout still works.
|
|
137
|
+
4. Put airplane mode on — app degrades gracefully.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## design-tokens — Design system tokens
|
|
142
|
+
|
|
143
|
+
**Do not hardcode the user's design system.** Tokens are project-specific.
|
|
144
|
+
|
|
145
|
+
Source-of-truth check order:
|
|
146
|
+
|
|
147
|
+
1. `.build-loop/app-contract/ui.md` — build-loop design direction and hierarchy registry
|
|
148
|
+
2. `tailwind.config.{ts,js,mjs}` → `theme.extend` → colors/spacing/typography
|
|
149
|
+
3. `tokens.json` or `design-tokens.json` at project root
|
|
150
|
+
4. `src/styles/tokens.css` or `globals.css` — `:root { --color-*: ... }`
|
|
151
|
+
5. iOS: `Assets.xcassets/Colors/*.colorset` + `Assets.xcassets/*.appiconset`
|
|
152
|
+
6. Figma/design-tool export files, if present and project-approved (`design/tokens.json`, `figma/tokens.json`, etc.)
|
|
153
|
+
7. `.ibr/design-system.json` only when the user explicitly requested IBR for this build
|
|
154
|
+
|
|
155
|
+
If none exist: ask the user. Do not invent a palette.
|
|
156
|
+
|
|
157
|
+
When adding a new component: reuse existing tokens. Never introduce a new hex literal without confirming with the user.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## architecture — Blast-radius and impact analysis
|
|
162
|
+
|
|
163
|
+
**Standalone mode when NavGator is not installed.** Build-loop cannot build a full dependency graph, but it CAN produce a useful approximation from git history, filesystem layout, and import greps. Less accurate than NavGator's AST-aware scan; good enough to scope Plan correctly.
|
|
164
|
+
|
|
165
|
+
### Assess step (before Plan)
|
|
166
|
+
|
|
167
|
+
Run these in order. Output goes to `.build-loop/state.json.architecture.standalone`.
|
|
168
|
+
|
|
169
|
+
```sh
|
|
170
|
+
# 1. Changed files (from the goal's scope or current diff)
|
|
171
|
+
CHANGED=$(git diff --name-only origin/main..HEAD 2>/dev/null || git diff --name-only HEAD 2>/dev/null)
|
|
172
|
+
echo "$CHANGED"
|
|
173
|
+
|
|
174
|
+
# 2. Layer classification by conventional directories
|
|
175
|
+
# Map each changed file to a layer heuristic
|
|
176
|
+
echo "$CHANGED" | while read f; do
|
|
177
|
+
case "$f" in
|
|
178
|
+
src/db/*|src/models/*|prisma/*|*migrations*) echo "db: $f" ;;
|
|
179
|
+
src/api/*|app/api/*|pages/api/*|src/routes/*) echo "backend: $f" ;;
|
|
180
|
+
src/components/*|app/*/page.tsx|app/*/layout.tsx|pages/*) echo "frontend: $f" ;;
|
|
181
|
+
src/workers/*|*queue*|*job*) echo "queue: $f" ;;
|
|
182
|
+
src/lib/*|src/utils/*|src/shared/*) echo "shared: $f" ;;
|
|
183
|
+
*.test.*|*.spec.*|__tests__/*) echo "test: $f" ;;
|
|
184
|
+
*) echo "other: $f" ;;
|
|
185
|
+
esac
|
|
186
|
+
done
|
|
187
|
+
|
|
188
|
+
# 3. 1-hop dependents — who imports these files?
|
|
189
|
+
# For each changed file, grep for its module specifier across the repo
|
|
190
|
+
echo "$CHANGED" | while read f; do
|
|
191
|
+
MODULE=$(echo "$f" | sed 's|^src/||; s|\.tsx\?$||; s|\.jsx\?$||; s|/index$||')
|
|
192
|
+
IMPORTERS=$(grep -rlE "from ['\"][@~/]*${MODULE}(/|'|\")" src/ app/ 2>/dev/null | grep -v "^$f$" | head -10)
|
|
193
|
+
echo "$f → imported by: $(echo $IMPORTERS | tr '\n' ' ')"
|
|
194
|
+
done
|
|
195
|
+
|
|
196
|
+
# 4. Hotspot detection — files with high git churn (proxy for high fan-in)
|
|
197
|
+
# Top 10 most-changed files in the last 100 commits
|
|
198
|
+
git log --pretty=format: --name-only -100 2>/dev/null | sort | uniq -c | sort -rn | head -10
|
|
199
|
+
|
|
200
|
+
# 5. Circular-import smell — TypeScript compiler already catches these on `tsc --noEmit`
|
|
201
|
+
# Run the type check and look for "Cannot find module" or "circular" in output
|
|
202
|
+
# (Delegate to Review-B's type check grader; just note this is where cycles surface.)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Risk flags
|
|
206
|
+
|
|
207
|
+
Emit a risk flag when:
|
|
208
|
+
- Changed files cross ≥3 layer classifications (e.g. frontend + backend + db in one build) — high blast radius
|
|
209
|
+
- Any changed file appears in the top-5 hotspots from check #4 — concentration risk
|
|
210
|
+
- 1-hop dependent count > 10 for any single changed file — fan-out concern
|
|
211
|
+
- Changed files include both `src/db/` and `src/components/` without going through `src/api/` — possible frontend-direct-db layer violation
|
|
212
|
+
|
|
213
|
+
### What this fallback cannot do (flag these as gaps)
|
|
214
|
+
|
|
215
|
+
- Transitive (2-hop+) dependency tracing — NavGator's `graph.json` required
|
|
216
|
+
- LLM prompt mapping (`navgator llm-map`) — needs the AST-aware scanner
|
|
217
|
+
- Lessons/recurrence matching (`.navgator/lessons/`) — this is NavGator-specific storage
|
|
218
|
+
- Post-change architectural rule enforcement (`navgator rules`) — requires full component classification
|
|
219
|
+
|
|
220
|
+
When any of the above would materially affect the build (e.g. large refactor touching 20+ files, or a build that edits product LLM prompts), recommend installing NavGator rather than pushing forward with the fallback. Note this in the Review-F report as `⚠️ NavGator would improve confidence here`.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## screenshot — Visual evidence
|
|
225
|
+
|
|
226
|
+
Preferred tools (in order of availability):
|
|
227
|
+
|
|
228
|
+
1. Host browser/screenshot tooling, when the host exposes it
|
|
229
|
+
2. `showcase:capture` slash command, when available
|
|
230
|
+
3. `npx playwright screenshot <url> <output.png>` — if Playwright installed
|
|
231
|
+
4. Native surfaces: `xcrun simctl io booted screenshot <output.png>` for iOS or `screencapture -i <output.png>` for desktop apps
|
|
232
|
+
5. Explicit IBR screenshot command only when the user requested IBR for this build
|
|
233
|
+
6. Ask the user to attach a screenshot — never fabricate one
|
|
234
|
+
|
|
235
|
+
Save to `.build-loop/evals/screenshots/YYYY-MM-DD-<label>.png`. Reference paths in the scorecard.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## web-fetch — External content fetching
|
|
240
|
+
|
|
241
|
+
Inline minimal fetch for when `scraper-app` SDK is absent. Still cheaper than having the LLM read raw HTML:
|
|
242
|
+
|
|
243
|
+
```js
|
|
244
|
+
// Strip chrome, keep article content. Zero deps.
|
|
245
|
+
const html = await (await fetch(url)).text();
|
|
246
|
+
const body = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i)?.[1] ?? html;
|
|
247
|
+
const text = body
|
|
248
|
+
.replace(/<script[\s\S]*?<\/script>/gi, "")
|
|
249
|
+
.replace(/<style[\s\S]*?<\/style>/gi, "")
|
|
250
|
+
.replace(/<[^>]+>/g, " ")
|
|
251
|
+
.replace(/\s+/g, " ")
|
|
252
|
+
.trim();
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Always note LLM cost** in the Review-F report when this fallback runs. Flag that installing `scraper-app` would eliminate the token spend.
|
|
256
|
+
|
|
257
|
+
Do not fetch URLs the user did not explicitly provide or that aren't core to the task. Never fetch from private networks.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## debug — Root-cause investigation
|
|
262
|
+
|
|
263
|
+
The `build-loop:debug-loop` skill is bundled with build-loop. Use this fallback only if the skill fails to load:
|
|
264
|
+
|
|
265
|
+
1. **Reproduce** — minimal case that fails every time. Write the command/steps down.
|
|
266
|
+
2. **Isolate** — binary-search the diff / commits / inputs until you find the smallest change that flips pass ↔ fail.
|
|
267
|
+
3. **Hypothesize** — one specific claim about cause. Write it as a statement, not a question.
|
|
268
|
+
4. **Test** — make the smallest possible change that would confirm or refute the hypothesis. Run it. Observe.
|
|
269
|
+
5. **Record** — append one line to `.build-loop/issues/YYYY-MM-DD-<slug>.md` with: symptom, root cause, fix, prevention.
|
|
270
|
+
|
|
271
|
+
Stop after 3 failed hypotheses and escalate to the user with what was tried.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## bug-memory — Prior-bug lookup
|
|
276
|
+
|
|
277
|
+
The `build-loop:debugging-memory` skill is bundled with build-loop. Use this fallback only if the skill cannot provide structured recall. No cross-project training — just a file-grep of this project's prior builds.
|
|
278
|
+
|
|
279
|
+
### Query procedure
|
|
280
|
+
|
|
281
|
+
Extract key tokens from the current failure (error class, function name, file path, distinctive noun). Then:
|
|
282
|
+
|
|
283
|
+
```sh
|
|
284
|
+
SYMPTOM="<your symptom string>"
|
|
285
|
+
# Pull the 3-5 most distinctive words from SYMPTOM
|
|
286
|
+
TOKENS=$(echo "$SYMPTOM" | tr ' ' '\n' | grep -E '^[A-Z][a-zA-Z]+$|^[a-z_]+[A-Z][a-zA-Z]+$|Error|Exception|timeout|undefined' | head -5)
|
|
287
|
+
|
|
288
|
+
# Search local project history
|
|
289
|
+
for T in $TOKENS; do
|
|
290
|
+
grep -R -l "$T" .build-loop/issues/ 2>/dev/null
|
|
291
|
+
grep -R -l "$T" .build-loop/feedback.md 2>/dev/null
|
|
292
|
+
grep -R -l "$T" .bookmark/ 2>/dev/null
|
|
293
|
+
done | sort -u
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Degraded verdict (4 states, same shape as the debugging-memory verdict gate)
|
|
297
|
+
|
|
298
|
+
| State | Match rule | Action |
|
|
299
|
+
|---|---|---|
|
|
300
|
+
| `LOCAL_HIT_EXACT` | At least one file contains the full symptom string (case-insensitive substring match) | Read that file; adapt its recorded fix as the Iterate plan. Not direct-apply. |
|
|
301
|
+
| `LOCAL_HIT_PARTIAL` | ≥2 tokens co-occur in the same file | Reference the file in the Iterate plan; investigate normally |
|
|
302
|
+
| `LOCAL_WEAK` | 1 token match only | Note reference, investigate normally |
|
|
303
|
+
| `LOCAL_NO_MATCH` | No files contain any tokens | Standard Iterate; write a new `.build-loop/issues/<slug>.md` after resolution |
|
|
304
|
+
|
|
305
|
+
No confidence score (no classifier). No cross-project lookup. No automatic training signal back to the source — this is strictly read-only memory for one project.
|
|
306
|
+
|
|
307
|
+
### Storage (write side)
|
|
308
|
+
|
|
309
|
+
After resolving a failure, append to `.build-loop/issues/YYYY-MM-DD-<slug>.md`:
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
# <one-line title>
|
|
313
|
+
|
|
314
|
+
**Symptom**: <error string as it appeared>
|
|
315
|
+
**Root cause**: <what was actually wrong>
|
|
316
|
+
**Fix**: <diff summary or description>
|
|
317
|
+
**Files**: <paths touched>
|
|
318
|
+
**Tags**: <layer>, <component>, <pattern>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Future builds will grep this file. The bundled `build-loop:debugging-memory` skill promotes this to native build-loop recall; standalone Coding Debugger can mirror it into cross-project ranked memory when installed separately.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## logging-fallback — Observability when logging-tracer skill fails
|
|
326
|
+
|
|
327
|
+
The `build-loop:logging-tracer` skill is bundled with build-loop (v0.6.0+). Use this fallback only if the skill fails to load. Minimum-viable Tier-1 structured logging per language: see `skills/logging-tracer/SKILL.md` and `skills/logging-tracer/references/stack-templates.md` for the 5-8 line helpers (Node, Python, Go, Rust) that write to stderr and respect a `DEBUG_TRACE=1` env gate.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## agent-authoring — Writing new agents
|
|
332
|
+
|
|
333
|
+
Checklist when `agent-builder` / `plugin-dev:agent-development` is unavailable:
|
|
334
|
+
|
|
335
|
+
Required frontmatter:
|
|
336
|
+
|
|
337
|
+
```yaml
|
|
338
|
+
---
|
|
339
|
+
name: agent-slug # kebab-case, matches filename
|
|
340
|
+
description: |
|
|
341
|
+
One-sentence trigger condition.
|
|
342
|
+
<example>
|
|
343
|
+
Context: ...
|
|
344
|
+
user: "..."
|
|
345
|
+
assistant: "I'll use the <agent-slug> agent to ..."
|
|
346
|
+
</example>
|
|
347
|
+
model: inherit # or sonnet / haiku / opus
|
|
348
|
+
color: blue # used in the UI
|
|
349
|
+
tools: ["Read", "Grep", "Glob"] # least-privilege; don't default to all
|
|
350
|
+
---
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Body: second-person instructions (`You are ...`). Single focused responsibility. No "also handles …" scope creep. ≤150 lines.
|
|
354
|
+
|
|
355
|
+
Invocation from the orchestrator: pass complete context in the prompt — agents do not inherit parent Skill or file-read context.
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## structured-writing — Reports, summaries, handoffs
|
|
360
|
+
|
|
361
|
+
When `pyramid-principle:*` is unavailable, use the SCQA-to-key-line format:
|
|
362
|
+
|
|
363
|
+
1. **Situation** — one sentence on the status quo.
|
|
364
|
+
2. **Complication** — one sentence on what changed or what's at stake.
|
|
365
|
+
3. **Question** — the implicit question the reader is now asking.
|
|
366
|
+
4. **Answer (the governing thought)** — one sentence, top of the document.
|
|
367
|
+
5. **Key lines (3–7)** — MECE arguments that support the governing thought. Each is a claim, not a topic.
|
|
368
|
+
6. **Support** — evidence under each key line.
|
|
369
|
+
|
|
370
|
+
For the Review-F scorecard: governing thought = did the build meet the goal; key lines = the scoring criteria; support = evidence rows.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## migration — Hosted-IDE → production migration
|
|
375
|
+
|
|
376
|
+
When `replit-migrate:*` is unavailable. Applies to Replit, Lovable, Bolt.new, v0, CodeSandbox, StackBlitz exports.
|
|
377
|
+
|
|
378
|
+
Inventory pass — what does the source have?
|
|
379
|
+
|
|
380
|
+
- Routes and endpoints (file + verb + params + response shape)
|
|
381
|
+
- Auth mechanism (session cookie? JWT? OAuth? custom?)
|
|
382
|
+
- Database (SQLite? Postgres? JSON files? LocalStorage?)
|
|
383
|
+
- File storage (local? S3-like? CDN?)
|
|
384
|
+
- Environment variables (list them all with intended values)
|
|
385
|
+
- External API calls (with keys — flag any that need rotation)
|
|
386
|
+
- Assets (images, fonts, icons — source and license)
|
|
387
|
+
- Build scripts (package.json scripts, Makefile, replit.nix)
|
|
388
|
+
- Hosted-IDE lock-in (platform-specific APIs, proprietary secrets store, always-on URLs)
|
|
389
|
+
|
|
390
|
+
Translation guide — pick stacks that fit the target:
|
|
391
|
+
|
|
392
|
+
| Source | Web target | Native target |
|
|
393
|
+
|---|---|---|
|
|
394
|
+
| Express / Koa | Next.js API routes or Hono | N/A |
|
|
395
|
+
| Prisma | Drizzle (Vercel/Cloudflare) or Prisma | SwiftData |
|
|
396
|
+
| Replit DB / Redis | Upstash Redis / Neon / Turso | SwiftData |
|
|
397
|
+
| Replit Auth | Better Auth / NextAuth / Clerk | Sign in with Apple |
|
|
398
|
+
| LocalStorage | cookies or DB | UserDefaults |
|
|
399
|
+
| `.replit` runner | `vercel.json` / `wrangler.toml` | Xcode scheme |
|
|
400
|
+
|
|
401
|
+
Parity verification — every route/feature needs a smoke test against the migrated version before cut-over. Write these tests first.
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## prompt — Prompt authoring / review / audit
|
|
406
|
+
|
|
407
|
+
When the `prompt-builder:prompt-builder` plugin skill is unavailable. If the personal `prompt-builder` skill is available (same name, loaded via Skill tool), load it first. It covers technique selection (CoT, SoT, few-shot, self-consistency) in more depth than this fallback.
|
|
408
|
+
|
|
409
|
+
Use the **6-Part Stack** for any system prompt or agent prompt:
|
|
410
|
+
|
|
411
|
+
1. **Role** — who the model is. One sentence, specific. "You are a triage agent for customer support tickets that classifies urgency."
|
|
412
|
+
2. **Task** — the specific action. Verbs. No hedging. "Classify each ticket as P0/P1/P2."
|
|
413
|
+
3. **Constraints** — hard limits: length, forbidden behaviors, tools it can/cannot use, response time, data it must not output.
|
|
414
|
+
4. **Context** — what the model needs to know: schema of inputs, definitions of ambiguous terms, org-specific conventions.
|
|
415
|
+
5. **Output format** — exact structure: JSON schema, markdown template, or free text with labeled sections. Specify escape behavior for ambiguous inputs.
|
|
416
|
+
6. **Acceptance criteria** — how success is judged. If deterministic, what makes it wrong. If LLM-judged, what the judge looks for.
|
|
417
|
+
|
|
418
|
+
Calibrate to model tier:
|
|
419
|
+
|
|
420
|
+
- **Frontier (T1 — Opus 4.6, GPT-5)**: can handle longer instructions, implicit reasoning, self-correction. Prefer clarity over verbosity.
|
|
421
|
+
- **Mid (T2 — Sonnet 4.6, GPT-4)**: explicit instructions; show, don't tell; 1-2 few-shot examples help.
|
|
422
|
+
- **Small/fast (T3 — Haiku 4.5, gpt-4-mini)**: keep prompts short; single task only; deterministic output format; more examples (3-5).
|
|
423
|
+
|
|
424
|
+
Review checklist — when auditing an existing prompt:
|
|
425
|
+
|
|
426
|
+
1. Does it leak system implementation details the user shouldn't see?
|
|
427
|
+
2. Are there [ASSUMED] values (thresholds, formats, user intent) that should be surfaced as parameters?
|
|
428
|
+
3. Are there contradictions between constraints and examples?
|
|
429
|
+
4. Would two reasonable readers interpret the task the same way?
|
|
430
|
+
5. Is the output format machine-parseable if it's downstream of code?
|
|
431
|
+
6. What happens on edge inputs — empty string, very long string, non-English, adversarial?
|
|
432
|
+
7. Is the role specific enough to constrain behavior, or vague enough to be ignored?
|
|
433
|
+
|
|
434
|
+
Temperature hints:
|
|
435
|
+
|
|
436
|
+
- 0.0-0.2 — classification, extraction, deterministic tasks
|
|
437
|
+
- 0.3-0.5 — structured generation (summaries, rewrites)
|
|
438
|
+
- 0.7-1.0 — open-ended creative work
|
|
439
|
+
- Rarely above 1.0 — only for diversification across multiple samples
|
|
440
|
+
|
|
441
|
+
Save iterated prompts to `.build-loop/prompts/` with a version suffix so regressions are detectable.
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## apple-dev — iOS / watchOS / macOS
|
|
446
|
+
|
|
447
|
+
When the personal `apple-dev` skill is unavailable (new user, no `~/.claude/skills/apple-dev/`):
|
|
448
|
+
|
|
449
|
+
Minimal SwiftUI scaffold:
|
|
450
|
+
|
|
451
|
+
```swift
|
|
452
|
+
import SwiftUI
|
|
453
|
+
import SwiftData
|
|
454
|
+
|
|
455
|
+
@main
|
|
456
|
+
struct App: App {
|
|
457
|
+
var body: some Scene {
|
|
458
|
+
WindowGroup {
|
|
459
|
+
ContentView()
|
|
460
|
+
}
|
|
461
|
+
.modelContainer(for: [Item.self])
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
@Model
|
|
466
|
+
final class Item {
|
|
467
|
+
var timestamp: Date
|
|
468
|
+
init(timestamp: Date = .now) { self.timestamp = timestamp }
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Build via XcodeGen (`project.yml`) rather than hand-editing `.pbxproj`:
|
|
473
|
+
|
|
474
|
+
```yaml
|
|
475
|
+
name: MyApp
|
|
476
|
+
options:
|
|
477
|
+
bundleIdPrefix: com.example
|
|
478
|
+
targets:
|
|
479
|
+
MyApp:
|
|
480
|
+
type: application
|
|
481
|
+
platform: iOS
|
|
482
|
+
deploymentTarget: "17.0"
|
|
483
|
+
sources: [MyApp]
|
|
484
|
+
settings:
|
|
485
|
+
base:
|
|
486
|
+
DEVELOPMENT_TEAM: ABCDE12345
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
Deployment to TestFlight — App Store Connect API key:
|
|
490
|
+
|
|
491
|
+
```sh
|
|
492
|
+
xcrun altool --upload-app \
|
|
493
|
+
-f build/MyApp.ipa \
|
|
494
|
+
-t ios \
|
|
495
|
+
--apiKey $ASC_KEY_ID \
|
|
496
|
+
--apiIssuer $ASC_ISSUER_ID
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
Notes:
|
|
500
|
+
|
|
501
|
+
- Use API key auth (`--apiKey`), not username/password. Keys in `~/.appstoreconnect/private_keys/AuthKey_<ID>.p8`.
|
|
502
|
+
- 44pt tap targets (HIG). Dynamic Type at every font size. VoiceOver labels on every tappable view.
|
|
503
|
+
- Watch connectivity: use `WCSession` with `transferUserInfo` for background sync, `sendMessage` only when reachable.
|
|
504
|
+
- Do not copy Apple Developer Program credentials into the repo. Read from Keychain or environment.
|
|
505
|
+
|
|
506
|
+
## web-deploy-verify — Vercel post-deploy verification
|
|
507
|
+
|
|
508
|
+
When `scripts/verify_deploy.py` is unavailable (older plugin checkout) AND the
|
|
509
|
+
Vercel MCP is not configured in `.mcp.json`, run this degraded procedure by hand
|
|
510
|
+
after a deploy/push that triggered a Vercel build.
|
|
511
|
+
|
|
512
|
+
Preconditions: the consumer project is Vercel-linked (`.vercel/project.json` or
|
|
513
|
+
`vercel.json` present) and the `vercel` CLI is authed. If either is missing,
|
|
514
|
+
record `deploy_verify: skipped (<reason>)` and proceed — never block the build
|
|
515
|
+
on infra.
|
|
516
|
+
|
|
517
|
+
Procedure:
|
|
518
|
+
|
|
519
|
+
1. Resolve the latest production deployment URL:
|
|
520
|
+
|
|
521
|
+
```sh
|
|
522
|
+
vercel ls --environment production --format json --yes
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
Take the newest entry's `url` (prefix `https://` if bare).
|
|
526
|
+
|
|
527
|
+
2. Poll the deployment to a terminal state — `vercel inspect <url> --format json`
|
|
528
|
+
every ~20s, capped at ~10min. Read `readyState` (or `state`/`status`):
|
|
529
|
+
- `READY` → continue to step 3.
|
|
530
|
+
- `ERROR` or `CANCELED` → **Iterate**. Build/function error. Pull logs with
|
|
531
|
+
`vercel inspect <url> --logs`.
|
|
532
|
+
|
|
533
|
+
3. Probe the production root and each changed endpoint:
|
|
534
|
+
- Prod root (`GET /`) must return **200**. A `READY` deployment whose root is
|
|
535
|
+
not 200 is a render/runtime failure → Iterate.
|
|
536
|
+
- Each changed route is **healthy** when it returns `200`, a `3xx`
|
|
537
|
+
redirect, or **`401` / `403`**.
|
|
538
|
+
|
|
539
|
+
**`401`/`403` on a protected route is a HEALTHY auth gate, NOT a failure.**
|
|
540
|
+
It proves the serverless function deployed and is running; it simply (and
|
|
541
|
+
correctly) refused an unauthenticated probe. Treating it as a failure would
|
|
542
|
+
make every authenticated app fail its own deploy gate.
|
|
543
|
+
|
|
544
|
+
Only a `5xx` (function crash) or an unreachable changed route is a real
|
|
545
|
+
failure → Iterate, using the offending route + status as the rubric.
|
|
546
|
+
|
|
547
|
+
4. Outcome: deployment `READY` + root `200` + every changed endpoint in
|
|
548
|
+
`{200, 3xx, 401, 403}` ⇒ healthy, proceed. Otherwise Iterate. Infra trouble
|
|
549
|
+
(CLI missing, auth, network) ⇒ `skipped`, proceed.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
|
|
2
|
+
|
|
3
|
+
# Phase 7: Fact Check & Mock Scan — Detailed Guidance
|
|
4
|
+
|
|
5
|
+
Loaded on demand when entering Phase 7.
|
|
6
|
+
|
|
7
|
+
## Gate A: Fact Checker
|
|
8
|
+
|
|
9
|
+
| Check | What to Do |
|
|
10
|
+
|-------|-----------|
|
|
11
|
+
| **Rendered data** | Any %, $, score, count, assessment in UI — trace to data source. If a number appears on screen, where does it come from? |
|
|
12
|
+
| **Claims in code/comments** | Assertions about performance, accuracy, coverage — verified or marked ⚠️ UNVERIFIED |
|
|
13
|
+
| **Plan/spec claims** | What was "achieved" — cross-check against actual eval results from Phase 5 |
|
|
14
|
+
| **Extreme language** | Flag "always", "never", "100%", "guaranteed", "impossible", "all", "none" in code, UI copy, error messages, docs. Replace with accurate qualified language unless genuinely absolute |
|
|
15
|
+
| **Assessment integrity** | App displays quality scores, risk levels, health indicators? Verify scoring logic exists and produces the displayed value. No hardcoded "95%" without backing logic |
|
|
16
|
+
| **Source traceability** | Every rendered metric: data source → transformation → display. Missing link = flag it |
|
|
17
|
+
|
|
18
|
+
## Gate B: Mock And Privacy Data Scanner
|
|
19
|
+
|
|
20
|
+
Run this as the `mock-scanner` pass in the Review-D parallel dispatch.
|
|
21
|
+
|
|
22
|
+
Scan production code paths for:
|
|
23
|
+
- Hardcoded fake data in display paths (names, emails, addresses, phone numbers, prices)
|
|
24
|
+
- Placeholder text (lorem ipsum, "TODO", "FIXME") in rendered output
|
|
25
|
+
- Fake metrics: hardcoded percentages, scores, or counts not derived from real computation
|
|
26
|
+
- Mock API responses left in production code (not test files)
|
|
27
|
+
- Fake semantic search, recommendation, chart, metric, summary, or comparison responses where users expect real data to make decisions
|
|
28
|
+
- `faker` library or `Math.random()` generating user-facing data
|
|
29
|
+
- Seed/fixture data rendering outside dev/test environments
|
|
30
|
+
- Commented-out real implementations replaced by stubs
|
|
31
|
+
- API keys, private keys, bearer/OAuth tokens, connection strings, passwords, `.env` values, and credential assignments in public surfaces
|
|
32
|
+
- Absolute local path references such as `/Users/<name>/`, `/home/<name>/`, `C:\Users\<name>\`, plugin cache paths, local session paths, private vault/wiki paths, and machine-specific temp/build paths
|
|
33
|
+
- Persona/profile exports, customer/user lists, resumes, calendars, private notes, transcripts, hostnames, session IDs, Rally runtime logs, worktree bundles, and other personal or machine-specific data that should not ship publicly
|
|
34
|
+
|
|
35
|
+
**Scope**: Production code paths and public release/package surfaces. Test files, fixtures, dev-only code, and clearly synthetic documentation examples are excluded.
|
|
36
|
+
|
|
37
|
+
## Resolution
|
|
38
|
+
|
|
39
|
+
- Blocking issues (fake data rendered to users, data supporting user decisions, or private data shipping in public surfaces) -> route back to Phase 5 (Iterate). Do not halt the run; the orchestrator should invoke the appropriate implementer, auditor, or specialist agent to fix the issue and then re-run validation.
|
|
40
|
+
- Warnings (TODO in comments, minor language issues) → include in Review-F report
|
|
41
|
+
|
|
42
|
+
Prefer `.gitignore` plus untracking for runtime/generated files, archive or private-store relocation over deletion for useful evidence, and redaction/scrubbing over removing useful public documentation.
|