@kontourai/flow-agents 0.1.1
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/.githooks/pre-push +11 -0
- package/.github/workflows/ci.yml +210 -0
- package/.github/workflows/docs-pages.yml +52 -0
- package/.github/workflows/publish-npm.yml +104 -0
- package/AGENTS.md +26 -0
- package/CHANGELOG.md +66 -0
- package/CODE_OF_CONDUCT.md +25 -0
- package/CONTEXT.md +300 -0
- package/CONTRIBUTING.md +44 -0
- package/LICENSE +201 -0
- package/README.md +129 -0
- package/SECURITY.md +33 -0
- package/agent-cards/dev.json +19 -0
- package/agents/dev.json +127 -0
- package/agents/tool-code-reviewer.json +61 -0
- package/agents/tool-dependencies-updater.json +118 -0
- package/agents/tool-explore-config.json +92 -0
- package/agents/tool-explore-deps.json +92 -0
- package/agents/tool-explore-entry.json +92 -0
- package/agents/tool-explore-patterns.json +92 -0
- package/agents/tool-explore-structure.json +92 -0
- package/agents/tool-explore-tests.json +92 -0
- package/agents/tool-planner.json +57 -0
- package/agents/tool-playwright.json +145 -0
- package/agents/tool-security-reviewer.json +56 -0
- package/agents/tool-verifier.json +61 -0
- package/agents/tool-worker.json +58 -0
- package/build/src/cli/console-learning-projection.js +123 -0
- package/build/src/cli/docs-preview.js +39 -0
- package/build/src/cli/effective-backlog-settings.js +102 -0
- package/build/src/cli/export-bookmarks.js +38 -0
- package/build/src/cli/fixture-retirement-audit.js +140 -0
- package/build/src/cli/flow-kit.js +138 -0
- package/build/src/cli/import-bookmarks.js +50 -0
- package/build/src/cli/init.js +239 -0
- package/build/src/cli/instinct-cli.js +93 -0
- package/build/src/cli/promote-workflow-artifact.js +63 -0
- package/build/src/cli/publish-change-helper.js +154 -0
- package/build/src/cli/pull-work-provider.js +469 -0
- package/build/src/cli/runtime-adapter.js +23 -0
- package/build/src/cli/telemetry-doctor.js +221 -0
- package/build/src/cli/usage-feedback.js +443 -0
- package/build/src/cli/validate-hook-influence.js +152 -0
- package/build/src/cli/validate-source-tree.js +31 -0
- package/build/src/cli/validate-workflow-artifacts.js +486 -0
- package/build/src/cli/veritas-governance.js +262 -0
- package/build/src/cli/workflow-artifact-cleanup-audit.js +272 -0
- package/build/src/cli/workflow-sidecar.js +816 -0
- package/build/src/cli.js +89 -0
- package/build/src/flow-kit/validate.js +75 -0
- package/build/src/lib/args.js +45 -0
- package/build/src/lib/fs.js +62 -0
- package/build/src/lib/workflow-learning-projection.js +334 -0
- package/build/src/runtime-adapters.js +146 -0
- package/build/src/tools/build-universal-bundles.js +397 -0
- package/build/src/tools/common.js +56 -0
- package/build/src/tools/filter-installed-packs.js +132 -0
- package/build/src/tools/generate-context-map.js +198 -0
- package/build/src/tools/validate-package.js +64 -0
- package/build/src/tools/validate-source-tree.js +622 -0
- package/console.telemetry.json +176 -0
- package/context/base-rules.md +17 -0
- package/context/code-review-standards.md +62 -0
- package/context/coding-standards.md +42 -0
- package/context/common/orchestrators.md +12 -0
- package/context/common/subagents.md +28 -0
- package/context/contracts/artifact-contract.md +182 -0
- package/context/contracts/builder-kit-workflow-state-contract.md +319 -0
- package/context/contracts/delivery-contract.md +69 -0
- package/context/contracts/execution-contract.md +53 -0
- package/context/contracts/governance-adapter-contract.md +67 -0
- package/context/contracts/planning-contract.md +85 -0
- package/context/contracts/review-contract.md +104 -0
- package/context/contracts/sandbox-policy.md +52 -0
- package/context/contracts/verification-contract.md +134 -0
- package/context/contracts/work-item-contract.md +215 -0
- package/context/deferred/demo-mode.md +33 -0
- package/context/deferred/languages/go.md +31 -0
- package/context/deferred/languages/python.md +31 -0
- package/context/deferred/languages/typescript.md +34 -0
- package/context/deferred/parallelization.md +35 -0
- package/context/deferred/worktree-isolation.md +24 -0
- package/context/development-workflow.md +50 -0
- package/context/scripts/context-budget/budget-scan.sh +166 -0
- package/context/scripts/detect-tools.sh +3 -0
- package/context/scripts/discover-agents.sh +28 -0
- package/context/scripts/git-status.sh +49 -0
- package/context/scripts/hooks/config-protection.js +79 -0
- package/context/scripts/hooks/desktop-notify.sh +39 -0
- package/context/scripts/hooks/governance-audit.sh +135 -0
- package/context/scripts/hooks/lib/audit-transport.sh +40 -0
- package/context/scripts/hooks/lib/hook-flags.js +49 -0
- package/context/scripts/hooks/lib/patterns.sh +57 -0
- package/context/scripts/hooks/lib/resolve-formatter.js +80 -0
- package/context/scripts/hooks/post-edit-accumulator.js +66 -0
- package/context/scripts/hooks/pre-commit-quality.js +194 -0
- package/context/scripts/hooks/quality-gate.js +93 -0
- package/context/scripts/hooks/report-only-guard.js +21 -0
- package/context/scripts/hooks/run-hook.js +136 -0
- package/context/scripts/hooks/stop-format-typecheck.js +141 -0
- package/context/scripts/hooks/stop-goal-fit.js +337 -0
- package/context/scripts/hooks/workflow-steering.js +250 -0
- package/context/scripts/telemetry/console-presets.sh +14 -0
- package/context/scripts/telemetry/install-console-config.sh +214 -0
- package/context/scripts/telemetry/lib/config.sh +85 -0
- package/context/scripts/telemetry/lib/enrich.sh +115 -0
- package/context/scripts/telemetry/lib/redact.sh +22 -0
- package/context/scripts/telemetry/lib/session.sh +63 -0
- package/context/scripts/telemetry/lib/transport.sh +183 -0
- package/context/scripts/telemetry/lib/usage.sh +29 -0
- package/context/scripts/telemetry/sync-agents.sh +173 -0
- package/context/scripts/telemetry/telemetry.conf +23 -0
- package/context/scripts/telemetry/telemetry.sh +387 -0
- package/context/scripts/validate-package.sh +89 -0
- package/context/settings/backlog-provider-settings.json +54 -0
- package/context/templates/core/identity.md +26 -0
- package/context/templates/core/user.md +15 -0
- package/docs/_config.yml +15 -0
- package/docs/_layouts/default.html +87 -0
- package/docs/adr/0001-flow-agents-consumes-flow.md +77 -0
- package/docs/adr/0002-flow-kits-as-extension-unit.md +13 -0
- package/docs/adr/0003-flow-agents-coordinates-kits-and-adapters.md +13 -0
- package/docs/adr/0004-gates-expect-surface-claims.md +15 -0
- package/docs/adr/0005-kubernetes-inspired-resource-contracts.md +48 -0
- package/docs/adr/0006-typescript-first-source-policy.md +98 -0
- package/docs/agent-system-guidebook.md +391 -0
- package/docs/agent-usage-feedback-loop.md +351 -0
- package/docs/assets/favicon.svg +13 -0
- package/docs/assets/og-image.png +0 -0
- package/docs/assets/site.css +774 -0
- package/docs/assets/site.js +139 -0
- package/docs/configurable-workflow-routing.md +174 -0
- package/docs/context-map.md +145 -0
- package/docs/developer-architecture.md +145 -0
- package/docs/developer-hook-setup.md +61 -0
- package/docs/fixture-ownership.md +44 -0
- package/docs/flow-kit-repository-contract.md +180 -0
- package/docs/index.md +129 -0
- package/docs/kontour-resource-contract.md +358 -0
- package/docs/migrations.md +64 -0
- package/docs/north-star.md +322 -0
- package/docs/operating-layers.md +110 -0
- package/docs/repository-structure.md +132 -0
- package/docs/sandbox-policy.md +56 -0
- package/docs/skills-map.md +203 -0
- package/docs/standards-register.md +96 -0
- package/docs/veritas-integration.md +165 -0
- package/docs/work-item-adapters.md +72 -0
- package/docs/workflow-artifact-lifecycle.md +141 -0
- package/docs/workflow-eval-strategy.md +295 -0
- package/docs/workflow-shared-contracts.md +51 -0
- package/docs/workflow-usage-guide.md +443 -0
- package/evals/ARCHITECTURE.md +143 -0
- package/evals/CONVENTIONS.md +58 -0
- package/evals/README.md +128 -0
- package/evals/acceptance/run.sh +29 -0
- package/evals/acceptance/test_claude_harness.sh +242 -0
- package/evals/acceptance/test_codex_harness.sh +108 -0
- package/evals/acceptance/test_kiro_harness.sh +128 -0
- package/evals/cases/dev/404.html +97 -0
- package/evals/cases/dev/code-review.yaml +44 -0
- package/evals/cases/dev/dashboard.html +300 -0
- package/evals/cases/dev/deliver.yaml +66 -0
- package/evals/cases/dev/dependency-update.yaml +16 -0
- package/evals/cases/dev/explore.yaml +20 -0
- package/evals/cases/dev/index.html +370 -0
- package/evals/cases/dev/package-lock.json +28 -0
- package/evals/cases/dev/package.json +16 -0
- package/evals/cases/dev/plan-work.yaml +20 -0
- package/evals/cases/dev/promptfooconfig.yaml +666 -0
- package/evals/cases/dev/search-first.yaml +20 -0
- package/evals/cases/dev/tdd-workflow.yaml +48 -0
- package/evals/cases/dev/verify-work.yaml +44 -0
- package/evals/cases/dev/workflow.yaml +34 -0
- package/evals/ci/run-baseline.sh +283 -0
- package/evals/fixtures/backlog-provider-settings/global-default.json +44 -0
- package/evals/fixtures/backlog-provider-settings/project-override.json +53 -0
- package/evals/fixtures/builder-kit-workflow-state/baseline-freshness-resolution-hint.json +139 -0
- package/evals/fixtures/builder-kit-workflow-state/direct-primitive-stop.json +59 -0
- package/evals/fixtures/builder-kit-workflow-state/empty-board-route-shape.json +55 -0
- package/evals/fixtures/builder-kit-workflow-state/happy-path.json +71 -0
- package/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json +80 -0
- package/evals/fixtures/builder-kit-workflow-state/missing-prestep-recovery.json +65 -0
- package/evals/fixtures/builder-kit-workflow-state/product-build-chaining.json +60 -0
- package/evals/fixtures/builder-kit-workflow-state/stale-continuation-requires-new-probe.json +57 -0
- package/evals/fixtures/console-learning-projection/artifacts/console-learning-correction/learning.json +50 -0
- package/evals/fixtures/console-learning-projection/artifacts/console-learning-open-route/learning.json +41 -0
- package/evals/fixtures/flow-kit-repository/invalid-absolute-path/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-asset-section/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-asset-section/kit.json +11 -0
- package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/kit.json +9 -0
- package/evals/fixtures/flow-kit-repository/invalid-id/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-id/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-malformed-json/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-flow/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-id/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-id/kit.json +7 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/kit.json +7 -0
- package/evals/fixtures/flow-kit-repository/invalid-name/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-name/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-schema-version/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-schema-version/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-traversal/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/adapters/example.json +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/assets/example.txt +1 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/docs/README.md +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/flows/runtime.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-evals/example.json +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-skills/mixed/SKILL.md +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit.json +44 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/docs/README.md +3 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/kit.json +20 -0
- package/evals/fixtures/hook-influence/cases.json +336 -0
- package/evals/fixtures/pull-work-provider/github-issues.json +170 -0
- package/evals/fixtures/pull-work-wip-shepherding/global-wip-informs.json +43 -0
- package/evals/fixtures/pull-work-wip-shepherding/personal-wip-blocks.json +42 -0
- package/evals/fixtures/surface-trust/accepted-claim-trust-report.json +31 -0
- package/evals/fixtures/surface-trust/artifact-absent.json +19 -0
- package/evals/fixtures/surface-trust/integrity-mismatch-trust-report.json +32 -0
- package/evals/fixtures/surface-trust/missing-authority-trust-report.json +27 -0
- package/evals/fixtures/surface-trust/provider-absent.json +19 -0
- package/evals/fixtures/surface-trust/rejected-claim-trust-report.json +30 -0
- package/evals/fixtures/surface-trust/stale-claim-trust-snapshot.json +31 -0
- package/evals/fixtures/usage-feedback/sample-full.jsonl +11 -0
- package/evals/fixtures/usage-feedback/sample-outcomes.jsonl +1 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-pass.sh +18 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-secret-fail.sh +10 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-unconfigured.sh +4 -0
- package/evals/integration/test_bundle_install.sh +541 -0
- package/evals/integration/test_console_learning_projection.sh +192 -0
- package/evals/integration/test_context_map.sh +65 -0
- package/evals/integration/test_effective_backlog_settings.sh +58 -0
- package/evals/integration/test_fixture_retirement_audit.sh +58 -0
- package/evals/integration/test_flow_agents_statusline.sh +93 -0
- package/evals/integration/test_flow_kit_repository.sh +90 -0
- package/evals/integration/test_goal_fit_hook.sh +482 -0
- package/evals/integration/test_hook_category_behaviors.sh +190 -0
- package/evals/integration/test_hook_influence_cases.sh +69 -0
- package/evals/integration/test_local_flow_kit_install.sh +145 -0
- package/evals/integration/test_publish_change_helper.sh +176 -0
- package/evals/integration/test_pull_work_provider.sh +140 -0
- package/evals/integration/test_runtime_adapter_activation.sh +106 -0
- package/evals/integration/test_telemetry.sh +485 -0
- package/evals/integration/test_telemetry_doctor.sh +193 -0
- package/evals/integration/test_usage_feedback_dashboard.sh +169 -0
- package/evals/integration/test_usage_feedback_global.sh +117 -0
- package/evals/integration/test_usage_feedback_import.sh +227 -0
- package/evals/integration/test_usage_feedback_outcomes.sh +165 -0
- package/evals/integration/test_usage_feedback_report.sh +263 -0
- package/evals/integration/test_veritas_governance_adapter.sh +235 -0
- package/evals/integration/test_workflow_artifact_cleanup_audit.sh +287 -0
- package/evals/integration/test_workflow_artifacts.sh +1247 -0
- package/evals/integration/test_workflow_sidecar_writer.sh +2112 -0
- package/evals/integration/test_workflow_steering_hook.sh +337 -0
- package/evals/lib/assertions/delegated-to.js +40 -0
- package/evals/lib/assertions/max-tool-calls.js +15 -0
- package/evals/lib/assertions/no-write-tools.js +27 -0
- package/evals/lib/assertions/pass-at-k.js +39 -0
- package/evals/lib/assertions/telemetry-utils.js +105 -0
- package/evals/lib/assertions/tool-called.js +39 -0
- package/evals/lib/assertions/verify-after-fix.js +61 -0
- package/evals/lib/claude-judge.sh +40 -0
- package/evals/lib/claude-provider.sh +74 -0
- package/evals/lib/codex-judge.sh +39 -0
- package/evals/lib/codex-provider.sh +81 -0
- package/evals/lib/eval-dev.sh +5 -0
- package/evals/lib/eval-judge.sh +22 -0
- package/evals/lib/eval-provider.sh +26 -0
- package/evals/lib/eval-report.sh +73 -0
- package/evals/lib/kiro-dev.sh +4 -0
- package/evals/lib/kiro-judge.sh +17 -0
- package/evals/lib/kiro-provider.sh +62 -0
- package/evals/lib/node.sh +111 -0
- package/evals/promptfooconfig.yaml +70 -0
- package/evals/run.sh +309 -0
- package/evals/static/test_evidence_refs.sh +141 -0
- package/evals/static/test_package.sh +407 -0
- package/evals/static/test_repo_hooks.sh +68 -0
- package/evals/static/test_universal_bundles.sh +274 -0
- package/evals/static/test_workflow_skills.sh +1207 -0
- package/install.sh +64 -0
- package/integrations/veritas/flow-agents.adapter.json +138 -0
- package/integrations/veritas/flow-agents.authority-settings.json +26 -0
- package/integrations/veritas/flow-agents.repo-standards.json +82 -0
- package/kits/builder/flows/build.flow.json +218 -0
- package/kits/builder/flows/shape.flow.json +127 -0
- package/kits/builder/kit.json +19 -0
- package/kits/catalog.json +11 -0
- package/package.json +130 -0
- package/packaging/README.md +60 -0
- package/packaging/manifest.json +173 -0
- package/packaging/packs.json +69 -0
- package/powers/dependency-checker/POWER.md +20 -0
- package/powers/dependency-checker/mcp.json +20 -0
- package/powers/playwright/POWER.md +25 -0
- package/powers/playwright/mcp.json +12 -0
- package/prompts/code-audit.md +123 -0
- package/prompts/kcommit.md +88 -0
- package/schemas/backlog-provider-settings.schema.json +138 -0
- package/schemas/workflow-acceptance.schema.json +216 -0
- package/schemas/workflow-critique.schema.json +113 -0
- package/schemas/workflow-evidence.schema.json +357 -0
- package/schemas/workflow-handoff.schema.json +52 -0
- package/schemas/workflow-learning.schema.json +223 -0
- package/schemas/workflow-release.schema.json +172 -0
- package/schemas/workflow-state.schema.json +80 -0
- package/scripts/README.md +111 -0
- package/scripts/build-universal-bundles.js +3 -0
- package/scripts/check-content-boundary.cjs +99 -0
- package/scripts/context-budget/budget-scan.sh +166 -0
- package/scripts/detect-tools.sh +3 -0
- package/scripts/discover-agents.sh +28 -0
- package/scripts/effective-backlog-settings.js +2 -0
- package/scripts/filter-installed-packs.js +2 -0
- package/scripts/flow-kit.js +2 -0
- package/scripts/generate-context-map.js +2 -0
- package/scripts/git-status.sh +49 -0
- package/scripts/hooks/claude-hook-adapter.js +174 -0
- package/scripts/hooks/claude-telemetry-hook.js +115 -0
- package/scripts/hooks/codex-hook-adapter.js +176 -0
- package/scripts/hooks/codex-telemetry-hook.js +95 -0
- package/scripts/hooks/config-protection.js +79 -0
- package/scripts/hooks/desktop-notify.sh +39 -0
- package/scripts/hooks/governance-audit.sh +135 -0
- package/scripts/hooks/lib/audit-transport.sh +40 -0
- package/scripts/hooks/lib/hook-flags.js +49 -0
- package/scripts/hooks/lib/patterns.sh +57 -0
- package/scripts/hooks/lib/resolve-formatter.js +80 -0
- package/scripts/hooks/post-edit-accumulator.js +66 -0
- package/scripts/hooks/pre-commit-quality.js +194 -0
- package/scripts/hooks/quality-gate.js +93 -0
- package/scripts/hooks/report-only-guard.js +21 -0
- package/scripts/hooks/run-hook.js +136 -0
- package/scripts/hooks/stop-format-typecheck.js +141 -0
- package/scripts/hooks/stop-goal-fit.js +337 -0
- package/scripts/hooks/workflow-steering.js +250 -0
- package/scripts/install-codex-home.sh +106 -0
- package/scripts/package.json +3 -0
- package/scripts/promote-workflow-artifact.js +2 -0
- package/scripts/publish-change-helper.js +2 -0
- package/scripts/pull-work-provider.js +2 -0
- package/scripts/setup-repo-hooks.sh +8 -0
- package/scripts/statusline/flow-agents-statusline.js +157 -0
- package/scripts/telemetry/console-presets.sh +14 -0
- package/scripts/telemetry/install-console-config.sh +214 -0
- package/scripts/telemetry/lib/config.sh +85 -0
- package/scripts/telemetry/lib/enrich.sh +115 -0
- package/scripts/telemetry/lib/redact.sh +22 -0
- package/scripts/telemetry/lib/session.sh +63 -0
- package/scripts/telemetry/lib/transport.sh +183 -0
- package/scripts/telemetry/lib/usage.sh +29 -0
- package/scripts/telemetry/sync-agents.sh +173 -0
- package/scripts/telemetry/telemetry.conf +23 -0
- package/scripts/telemetry/telemetry.sh +387 -0
- package/scripts/usage-feedback.js +2 -0
- package/scripts/validate-hook-influence-cases.js +2 -0
- package/scripts/validate-package.sh +89 -0
- package/scripts/validate-source-tree.js +9 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/browser-test/SKILL.md +51 -0
- package/skills/builder-shape/SKILL.md +76 -0
- package/skills/context-budget/SKILL.md +40 -0
- package/skills/deliver/SKILL.md +241 -0
- package/skills/dependency-update/SKILL.md +68 -0
- package/skills/design-probe/SKILL.md +107 -0
- package/skills/eval-rebuild/SKILL.md +39 -0
- package/skills/evidence-gate/SKILL.md +186 -0
- package/skills/execute-plan/SKILL.md +110 -0
- package/skills/explore/SKILL.md +137 -0
- package/skills/feedback-loop/SKILL.md +87 -0
- package/skills/fix-bug/SKILL.md +133 -0
- package/skills/frontend-design/SKILL.md +80 -0
- package/skills/github-cli/SKILL.md +63 -0
- package/skills/idea-to-backlog/SKILL.md +267 -0
- package/skills/knowledge-capture/SKILL.md +55 -0
- package/skills/learning-review/SKILL.md +115 -0
- package/skills/pickup-probe/SKILL.md +114 -0
- package/skills/plan-work/SKILL.md +176 -0
- package/skills/pull-work/SKILL.md +309 -0
- package/skills/release-readiness/SKILL.md +121 -0
- package/skills/review-work/SKILL.md +161 -0
- package/skills/search-first/SKILL.md +66 -0
- package/skills/tdd-workflow/SKILL.md +140 -0
- package/skills/verify-work/SKILL.md +109 -0
- package/src/cli/console-learning-projection.ts +140 -0
- package/src/cli/effective-backlog-settings.ts +99 -0
- package/src/cli/fixture-retirement-audit.ts +154 -0
- package/src/cli/flow-kit.ts +139 -0
- package/src/cli/init.ts +248 -0
- package/src/cli/promote-workflow-artifact.ts +64 -0
- package/src/cli/publish-change-helper.ts +143 -0
- package/src/cli/pull-work-provider.ts +481 -0
- package/src/cli/runtime-adapter.ts +24 -0
- package/src/cli/telemetry-doctor.ts +243 -0
- package/src/cli/usage-feedback.ts +418 -0
- package/src/cli/validate-hook-influence.ts +119 -0
- package/src/cli/validate-source-tree.ts +30 -0
- package/src/cli/validate-workflow-artifacts.ts +411 -0
- package/src/cli/veritas-governance.ts +322 -0
- package/src/cli/workflow-artifact-cleanup-audit.ts +281 -0
- package/src/cli/workflow-sidecar.ts +676 -0
- package/src/cli.ts +95 -0
- package/src/flow-kit/validate.ts +74 -0
- package/src/lib/args.ts +43 -0
- package/src/lib/fs.ts +62 -0
- package/src/lib/workflow-learning-projection.ts +491 -0
- package/src/runtime-adapters.ts +154 -0
- package/src/tools/build-universal-bundles.ts +366 -0
- package/src/tools/common.ts +61 -0
- package/src/tools/filter-installed-packs.ts +129 -0
- package/src/tools/generate-context-map.ts +199 -0
- package/src/tools/validate-package.ts +57 -0
- package/src/tools/validate-source-tree.ts +488 -0
- package/tsconfig.json +19 -0
- package/veritas.claims.json +6 -0
|
@@ -0,0 +1,1207 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test_workflow_skills.sh — Contract checks for workflow-system skills
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
6
|
+
errors=0
|
|
7
|
+
|
|
8
|
+
pass() { echo " ✓ $1"; }
|
|
9
|
+
fail() { echo " ✗ $1"; errors=$((errors + 1)); }
|
|
10
|
+
|
|
11
|
+
require_file() {
|
|
12
|
+
local path="$1"
|
|
13
|
+
local label="$2"
|
|
14
|
+
if [[ -f "$path" ]]; then pass "$label exists"; else fail "$label missing"; fi
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
require_text() {
|
|
18
|
+
local path="$1"
|
|
19
|
+
local pattern="$2"
|
|
20
|
+
local label="$3"
|
|
21
|
+
if rg -q -- "$pattern" "$path"; then pass "$label"; else fail "$label"; fi
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
reject_text() {
|
|
25
|
+
local path="$1"
|
|
26
|
+
local pattern="$2"
|
|
27
|
+
local label="$3"
|
|
28
|
+
if rg -q -- "$pattern" "$path"; then fail "$label"; else pass "$label"; fi
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
reject_text_many() {
|
|
32
|
+
local pattern="$1"
|
|
33
|
+
local label="$2"
|
|
34
|
+
shift 2
|
|
35
|
+
if rg -q -- "$pattern" "$@"; then fail "$label"; else pass "$label"; fi
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
require_status() {
|
|
39
|
+
local expected="$1"
|
|
40
|
+
local label="$2"
|
|
41
|
+
shift 2
|
|
42
|
+
local output status
|
|
43
|
+
set +e
|
|
44
|
+
output="$("$@" 2>&1)"
|
|
45
|
+
status=$?
|
|
46
|
+
if [[ "$status" -eq "$expected" ]]; then
|
|
47
|
+
pass "$label"
|
|
48
|
+
else
|
|
49
|
+
fail "$label (expected exit $expected, got $status: $output)"
|
|
50
|
+
fi
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
echo "=== Workflow Skill Contract Checks ==="
|
|
54
|
+
|
|
55
|
+
IDEA="$ROOT/skills/idea-to-backlog/SKILL.md"
|
|
56
|
+
BUILDER_SHAPE="$ROOT/skills/builder-shape/SKILL.md"
|
|
57
|
+
PULL="$ROOT/skills/pull-work/SKILL.md"
|
|
58
|
+
DESIGN_PROBE="$ROOT/skills/design-probe/SKILL.md"
|
|
59
|
+
PICKUP_PROBE="$ROOT/skills/pickup-probe/SKILL.md"
|
|
60
|
+
EVIDENCE="$ROOT/skills/evidence-gate/SKILL.md"
|
|
61
|
+
RELEASE="$ROOT/skills/release-readiness/SKILL.md"
|
|
62
|
+
LEARNING="$ROOT/skills/learning-review/SKILL.md"
|
|
63
|
+
DELIVER="$ROOT/skills/deliver/SKILL.md"
|
|
64
|
+
PLAN_WORK="$ROOT/skills/plan-work/SKILL.md"
|
|
65
|
+
EXECUTE_PLAN="$ROOT/skills/execute-plan/SKILL.md"
|
|
66
|
+
REVIEW_WORK="$ROOT/skills/review-work/SKILL.md"
|
|
67
|
+
VERIFY_WORK="$ROOT/skills/verify-work/SKILL.md"
|
|
68
|
+
MAP="$ROOT/docs/skills-map.md"
|
|
69
|
+
ROOT_CONTEXT="$ROOT/CONTEXT.md"
|
|
70
|
+
CONTEXT_MAP="$ROOT/docs/context-map.md"
|
|
71
|
+
USAGE_GUIDE="$ROOT/docs/workflow-usage-guide.md"
|
|
72
|
+
EVAL_STRATEGY="$ROOT/docs/workflow-eval-strategy.md"
|
|
73
|
+
SHARED_CONTRACTS_DOC="$ROOT/docs/workflow-shared-contracts.md"
|
|
74
|
+
ARTIFACT_LIFECYCLE_DOC="$ROOT/docs/workflow-artifact-lifecycle.md"
|
|
75
|
+
OPERATING_LAYERS_DOC="$ROOT/docs/operating-layers.md"
|
|
76
|
+
DEVELOPER_ARCHITECTURE_DOC="$ROOT/docs/developer-architecture.md"
|
|
77
|
+
GITIGNORE="$ROOT/.gitignore"
|
|
78
|
+
BUILDER_BUILD_FLOW="$ROOT/kits/builder/flows/build.flow.json"
|
|
79
|
+
FLOW_AGENTS_FLOW_ADR="$ROOT/docs/adr/0001-flow-agents-consumes-flow.md"
|
|
80
|
+
ARTIFACT_CONTRACT="$ROOT/context/contracts/artifact-contract.md"
|
|
81
|
+
PLANNING_CONTRACT="$ROOT/context/contracts/planning-contract.md"
|
|
82
|
+
EXECUTION_CONTRACT="$ROOT/context/contracts/execution-contract.md"
|
|
83
|
+
SANDBOX_CONTRACT="$ROOT/context/contracts/sandbox-policy.md"
|
|
84
|
+
GOVERNANCE_ADAPTER_CONTRACT="$ROOT/context/contracts/governance-adapter-contract.md"
|
|
85
|
+
WORK_ITEM_CONTRACT="$ROOT/context/contracts/work-item-contract.md"
|
|
86
|
+
BUILDER_KIT_STATE_CONTRACT="$ROOT/context/contracts/builder-kit-workflow-state-contract.md"
|
|
87
|
+
BUILDER_KIT_HAPPY_PATH_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/happy-path.json"
|
|
88
|
+
BUILDER_KIT_RESUME_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json"
|
|
89
|
+
BUILDER_KIT_PRODUCT_CHAIN_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/product-build-chaining.json"
|
|
90
|
+
BUILDER_KIT_DIRECT_PRIMITIVE_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/direct-primitive-stop.json"
|
|
91
|
+
BUILDER_KIT_MISSING_PRESTEP_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/missing-prestep-recovery.json"
|
|
92
|
+
BUILDER_KIT_STALE_CONTINUATION_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/stale-continuation-requires-new-probe.json"
|
|
93
|
+
BUILDER_KIT_EMPTY_BOARD_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/empty-board-route-shape.json"
|
|
94
|
+
BUILDER_KIT_BASELINE_FRESHNESS_HINT_FIXTURE="$ROOT/evals/fixtures/builder-kit-workflow-state/baseline-freshness-resolution-hint.json"
|
|
95
|
+
PULL_WORK_PERSONAL_WIP_FIXTURE="$ROOT/evals/fixtures/pull-work-wip-shepherding/personal-wip-blocks.json"
|
|
96
|
+
PULL_WORK_GLOBAL_WIP_FIXTURE="$ROOT/evals/fixtures/pull-work-wip-shepherding/global-wip-informs.json"
|
|
97
|
+
BACKLOG_PROVIDER_SETTINGS="$ROOT/context/settings/backlog-provider-settings.json"
|
|
98
|
+
BACKLOG_PROVIDER_SETTINGS_SCHEMA="$ROOT/schemas/backlog-provider-settings.schema.json"
|
|
99
|
+
VERIFICATION_CONTRACT="$ROOT/context/contracts/verification-contract.md"
|
|
100
|
+
REVIEW_CONTRACT="$ROOT/context/contracts/review-contract.md"
|
|
101
|
+
DELIVERY_CONTRACT="$ROOT/context/contracts/delivery-contract.md"
|
|
102
|
+
EFFECTIVE_BACKLOG_SETTINGS="$ROOT/src/cli/effective-backlog-settings.ts"
|
|
103
|
+
PULL_WORK_PROVIDER="$ROOT/src/cli/pull-work-provider.ts"
|
|
104
|
+
PULL_WORK_PROVIDER_INTEGRATION="$ROOT/evals/integration/test_pull_work_provider.sh"
|
|
105
|
+
PACKAGE_MANIFEST="$ROOT/packaging/manifest.json"
|
|
106
|
+
PACKS_MANIFEST="$ROOT/packaging/packs.json"
|
|
107
|
+
TOOL_PLANNER="$ROOT/agents/tool-planner.json"
|
|
108
|
+
TOOL_WORKER="$ROOT/agents/tool-worker.json"
|
|
109
|
+
TOOL_CODE_REVIEWER="$ROOT/agents/tool-code-reviewer.json"
|
|
110
|
+
TOOL_SECURITY_REVIEWER="$ROOT/agents/tool-security-reviewer.json"
|
|
111
|
+
TOOL_DEPENDENCIES_UPDATER="$ROOT/agents/tool-dependencies-updater.json"
|
|
112
|
+
TOOL_VERIFIER="$ROOT/agents/tool-verifier.json"
|
|
113
|
+
DEV_PROMPTFOO="$ROOT/evals/cases/dev/promptfooconfig.yaml"
|
|
114
|
+
GOAL_FIT_HOOK="$ROOT/scripts/hooks/stop-goal-fit.js"
|
|
115
|
+
WORKFLOW_STEERING_HOOK="$ROOT/scripts/hooks/workflow-steering.js"
|
|
116
|
+
CONTEXT_MAP_GENERATOR="$ROOT/src/tools/generate-context-map.ts"
|
|
117
|
+
PACK_FILTER="$ROOT/src/tools/filter-installed-packs.ts"
|
|
118
|
+
PROMOTE_DOC="$ROOT/src/cli/promote-workflow-artifact.ts"
|
|
119
|
+
ARTIFACT_VALIDATOR="$ROOT/src/cli/validate-workflow-artifacts.ts"
|
|
120
|
+
SIDECAR_WRITER="$ROOT/src/cli/workflow-sidecar.ts"
|
|
121
|
+
RELEASE_SCHEMA="$ROOT/schemas/workflow-release.schema.json"
|
|
122
|
+
LEARNING_SCHEMA="$ROOT/schemas/workflow-learning.schema.json"
|
|
123
|
+
ARTIFACT_INTEGRATION="$ROOT/evals/integration/test_workflow_artifacts.sh"
|
|
124
|
+
SIDECAR_WRITER_INTEGRATION="$ROOT/evals/integration/test_workflow_sidecar_writer.sh"
|
|
125
|
+
WORKFLOW_STEERING_INTEGRATION="$ROOT/evals/integration/test_workflow_steering_hook.sh"
|
|
126
|
+
HOOK_INFLUENCE_INTEGRATION="$ROOT/evals/integration/test_hook_influence_cases.sh"
|
|
127
|
+
HOOK_INFLUENCE_CASES="$ROOT/evals/fixtures/hook-influence/cases.json"
|
|
128
|
+
HOOK_INFLUENCE_VALIDATOR="$ROOT/src/cli/validate-hook-influence.ts"
|
|
129
|
+
CONTEXT_MAP_INTEGRATION="$ROOT/evals/integration/test_context_map.sh"
|
|
130
|
+
PAGES_WORKFLOW="$ROOT/.github/workflows/docs-pages.yml"
|
|
131
|
+
CI_WORKFLOW="$ROOT/.github/workflows/ci.yml"
|
|
132
|
+
CI_BASELINE="$ROOT/evals/ci/run-baseline.sh"
|
|
133
|
+
PAGES_INDEX="$ROOT/docs/index.md"
|
|
134
|
+
KIT_REPOSITORY_DOC="$ROOT/docs/flow-kit-repository-contract.md"
|
|
135
|
+
KIT_REPOSITORY_INTEGRATION="$ROOT/evals/integration/test_flow_kit_repository.sh"
|
|
136
|
+
SANDBOX_DOC="$ROOT/docs/sandbox-policy.md"
|
|
137
|
+
VERITAS_DOC="$ROOT/docs/veritas-integration.md"
|
|
138
|
+
PAGES_CONFIG="$ROOT/docs/_config.yml"
|
|
139
|
+
PAGES_LAYOUT="$ROOT/docs/_layouts/default.html"
|
|
140
|
+
PAGES_CSS="$ROOT/docs/assets/site.css"
|
|
141
|
+
PAGES_JS="$ROOT/docs/assets/site.js"
|
|
142
|
+
|
|
143
|
+
ACTIVE_GUIDANCE_SURFACES=()
|
|
144
|
+
while IFS= read -r guidance_surface; do
|
|
145
|
+
ACTIVE_GUIDANCE_SURFACES+=("$guidance_surface")
|
|
146
|
+
done < <(
|
|
147
|
+
{
|
|
148
|
+
find "$ROOT/skills" -type f -name '*.md'
|
|
149
|
+
find "$ROOT/context/contracts" -maxdepth 1 -type f -name '*.md'
|
|
150
|
+
find "$ROOT/agents" -maxdepth 1 -type f -name '*.json'
|
|
151
|
+
printf '%s\n' "$ROOT/packaging/manifest.json"
|
|
152
|
+
find "$ROOT/docs" -maxdepth 1 -type f \( -name 'workflow-*.md' -o -name 'skills-map.md' \)
|
|
153
|
+
} | sort -u
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
require_file "$IDEA" "idea-to-backlog skill"
|
|
157
|
+
require_file "$BUILDER_SHAPE" "builder-shape skill"
|
|
158
|
+
require_file "$PULL" "pull-work skill"
|
|
159
|
+
require_file "$DESIGN_PROBE" "design-probe skill"
|
|
160
|
+
require_file "$PICKUP_PROBE" "pickup-probe skill"
|
|
161
|
+
require_file "$EVIDENCE" "evidence-gate skill"
|
|
162
|
+
require_file "$RELEASE" "release-readiness skill"
|
|
163
|
+
require_file "$LEARNING" "learning-review skill"
|
|
164
|
+
require_file "$DELIVER" "deliver skill"
|
|
165
|
+
require_file "$PLAN_WORK" "plan-work skill"
|
|
166
|
+
require_file "$EXECUTE_PLAN" "execute-plan skill"
|
|
167
|
+
require_file "$REVIEW_WORK" "review-work skill"
|
|
168
|
+
require_file "$VERIFY_WORK" "verify-work skill"
|
|
169
|
+
require_file "$MAP" "skills map"
|
|
170
|
+
require_file "$ROOT_CONTEXT" "Flow Agents context glossary"
|
|
171
|
+
require_file "$CONTEXT_MAP" "context map"
|
|
172
|
+
require_file "$USAGE_GUIDE" "workflow usage guide"
|
|
173
|
+
require_file "$EVAL_STRATEGY" "workflow eval strategy"
|
|
174
|
+
require_file "$SHARED_CONTRACTS_DOC" "shared workflow contracts doc"
|
|
175
|
+
require_file "$ARTIFACT_LIFECYCLE_DOC" "workflow artifact lifecycle doc"
|
|
176
|
+
require_file "$OPERATING_LAYERS_DOC" "operating layers doc"
|
|
177
|
+
require_file "$DEVELOPER_ARCHITECTURE_DOC" "developer architecture doc"
|
|
178
|
+
require_file "$BUILDER_BUILD_FLOW" "Builder Kit build Flow Definition"
|
|
179
|
+
require_file "$FLOW_AGENTS_FLOW_ADR" "Flow Agents Flow boundary ADR"
|
|
180
|
+
require_file "$ARTIFACT_CONTRACT" "artifact contract"
|
|
181
|
+
require_file "$PLANNING_CONTRACT" "planning contract"
|
|
182
|
+
require_file "$EXECUTION_CONTRACT" "execution contract"
|
|
183
|
+
require_file "$SANDBOX_CONTRACT" "sandbox policy contract"
|
|
184
|
+
require_file "$GOVERNANCE_ADAPTER_CONTRACT" "governance adapter contract"
|
|
185
|
+
require_file "$WORK_ITEM_CONTRACT" "work item contract"
|
|
186
|
+
require_file "$BACKLOG_PROVIDER_SETTINGS" "backlog provider settings"
|
|
187
|
+
require_file "$BACKLOG_PROVIDER_SETTINGS_SCHEMA" "backlog provider settings schema"
|
|
188
|
+
require_file "$VERIFICATION_CONTRACT" "verification contract"
|
|
189
|
+
require_file "$REVIEW_CONTRACT" "review contract"
|
|
190
|
+
require_file "$DELIVERY_CONTRACT" "delivery contract"
|
|
191
|
+
require_file "$PACKAGE_MANIFEST" "packaging manifest"
|
|
192
|
+
require_file "$PACKS_MANIFEST" "pack manifest"
|
|
193
|
+
require_file "$TOOL_PLANNER" "tool-planner agent"
|
|
194
|
+
require_file "$TOOL_WORKER" "tool-worker agent"
|
|
195
|
+
require_file "$TOOL_CODE_REVIEWER" "tool-code-reviewer agent"
|
|
196
|
+
require_file "$TOOL_SECURITY_REVIEWER" "tool-security-reviewer agent"
|
|
197
|
+
require_file "$TOOL_DEPENDENCIES_UPDATER" "tool-dependencies-updater agent"
|
|
198
|
+
require_file "$TOOL_VERIFIER" "tool-verifier agent"
|
|
199
|
+
require_file "$DEV_PROMPTFOO" "dev behavioral eval config"
|
|
200
|
+
require_file "$GOAL_FIT_HOOK" "goal-fit stop hook"
|
|
201
|
+
require_file "$WORKFLOW_STEERING_HOOK" "workflow steering hook"
|
|
202
|
+
require_file "$CONTEXT_MAP_GENERATOR" "context map generator"
|
|
203
|
+
require_file "$PACK_FILTER" "pack filter helper"
|
|
204
|
+
require_file "$EFFECTIVE_BACKLOG_SETTINGS" "effective backlog settings helper"
|
|
205
|
+
require_file "$PULL_WORK_PROVIDER" "pull-work provider normalizer"
|
|
206
|
+
require_file "$PULL_WORK_PROVIDER_INTEGRATION" "pull-work provider integration test"
|
|
207
|
+
require_file "$PROMOTE_DOC" "workflow artifact promotion helper"
|
|
208
|
+
require_file "$ARTIFACT_VALIDATOR" "workflow artifact validator"
|
|
209
|
+
require_file "$SIDECAR_WRITER" "workflow sidecar writer"
|
|
210
|
+
require_file "$RELEASE_SCHEMA" "workflow release schema"
|
|
211
|
+
require_file "$LEARNING_SCHEMA" "workflow learning schema"
|
|
212
|
+
require_file "$ARTIFACT_INTEGRATION" "workflow artifact integration test"
|
|
213
|
+
require_file "$SIDECAR_WRITER_INTEGRATION" "workflow sidecar writer integration test"
|
|
214
|
+
require_file "$WORKFLOW_STEERING_INTEGRATION" "workflow steering integration test"
|
|
215
|
+
require_file "$HOOK_INFLUENCE_INTEGRATION" "hook influence integration test"
|
|
216
|
+
require_file "$HOOK_INFLUENCE_CASES" "hook influence behavioral cases"
|
|
217
|
+
require_file "$HOOK_INFLUENCE_VALIDATOR" "hook influence case validator"
|
|
218
|
+
require_file "$CONTEXT_MAP_INTEGRATION" "context map integration test"
|
|
219
|
+
require_file "$PAGES_WORKFLOW" "GitHub Pages workflow"
|
|
220
|
+
require_file "$PAGES_INDEX" "docs index page"
|
|
221
|
+
require_file "$KIT_REPOSITORY_DOC" "Flow Kit repository contract doc"
|
|
222
|
+
require_file "$KIT_REPOSITORY_INTEGRATION" "Flow Kit repository integration test"
|
|
223
|
+
require_file "$SANDBOX_DOC" "sandbox policy doc"
|
|
224
|
+
require_file "$VERITAS_DOC" "Veritas integration boundary doc"
|
|
225
|
+
require_file "$PAGES_CONFIG" "docs Jekyll config"
|
|
226
|
+
require_file "$PAGES_LAYOUT" "docs Jekyll layout"
|
|
227
|
+
require_file "$PAGES_CSS" "docs shared CSS"
|
|
228
|
+
require_file "$PAGES_JS" "docs shared JS"
|
|
229
|
+
|
|
230
|
+
echo ""
|
|
231
|
+
echo "--- shared contracts ---"
|
|
232
|
+
require_text "$ARTIFACT_CONTRACT" 'Workflow Artifact Contract' "artifact contract has title"
|
|
233
|
+
require_text "$ARTIFACT_CONTRACT" 'role: plan' "artifact contract defines plan frontmatter"
|
|
234
|
+
require_text "$ARTIFACT_CONTRACT" 'verdict: PASS \| PARTIAL \| FAIL \| NOT_VERIFIED' "artifact contract defines review verdicts"
|
|
235
|
+
require_text "$ARTIFACT_CONTRACT" 'Legacy bare strings are not part of the schema contract' "artifact contract rejects legacy string evidence refs"
|
|
236
|
+
require_text "$ARTIFACT_CONTRACT" 'Acceptance Evidence' "artifact contract requires Acceptance Evidence table"
|
|
237
|
+
require_text "$ARTIFACT_CONTRACT" 'blob/<commit-sha>' "artifact contract requires immutable GitHub blob permalink guidance"
|
|
238
|
+
require_text "$PLANNING_CONTRACT" 'Definition Of Done' "planning contract defines Definition Of Done"
|
|
239
|
+
require_text "$PLANNING_CONTRACT" 'Stop-short risks' "planning contract defines stop-short risks"
|
|
240
|
+
require_text "$PLANNING_CONTRACT" 'Source Evidence / Permalinks' "planning contract requires source evidence permalink expectations"
|
|
241
|
+
require_text "$EXECUTION_CONTRACT" 'Parallel Wave Rules' "execution contract defines parallel wave rules"
|
|
242
|
+
require_text "$EXECUTION_CONTRACT" 'modified files are recorded' "execution contract requires modified files"
|
|
243
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'current-state dashboard' "artifact lifecycle defines local current-state role"
|
|
244
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Learning records are a routing surface' "artifact lifecycle defines learning routing semantics"
|
|
245
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" '14-30 days' "artifact lifecycle documents local retention window"
|
|
246
|
+
require_text "$USAGE_GUIDE" 'do not leave `state.status: verified`' "usage guide requires final acceptance to close verified state"
|
|
247
|
+
require_text "$USAGE_GUIDE" 'followup_required' "usage guide documents learning follow-up closeout"
|
|
248
|
+
require_text "$SANDBOX_CONTRACT" 'Sandbox Policy Contract' "sandbox policy contract has title"
|
|
249
|
+
require_text "$SANDBOX_CONTRACT" 'local-read-only' "sandbox contract defines local read-only mode"
|
|
250
|
+
require_text "$SANDBOX_CONTRACT" 'local-edit' "sandbox contract defines local edit mode"
|
|
251
|
+
require_text "$SANDBOX_CONTRACT" 'worktree' "sandbox contract defines worktree mode"
|
|
252
|
+
require_text "$SANDBOX_CONTRACT" 'container' "sandbox contract defines container mode"
|
|
253
|
+
require_text "$SANDBOX_CONTRACT" 'cloud-sandbox' "sandbox contract defines cloud sandbox mode"
|
|
254
|
+
require_text "$SANDBOX_CONTRACT" 'privileged-integration' "sandbox contract defines privileged integration mode"
|
|
255
|
+
require_text "$SANDBOX_CONTRACT" 'Stop for approval' "sandbox contract defines approval stop rule"
|
|
256
|
+
require_text "$GOVERNANCE_ADAPTER_CONTRACT" 'Governance Adapter Contract' "governance adapter contract has title"
|
|
257
|
+
require_text "$GOVERNANCE_ADAPTER_CONTRACT" 'Veritas Boundary' "governance adapter contract defines Veritas boundary"
|
|
258
|
+
require_text "$GOVERNANCE_ADAPTER_CONTRACT" 'standard_refs' "governance adapter contract maps to standard refs"
|
|
259
|
+
require_text "$WORK_ITEM_CONTRACT" 'Work Item Contract' "work item contract has title"
|
|
260
|
+
require_text "$WORK_ITEM_CONTRACT" '`id`' "work item contract defines id"
|
|
261
|
+
require_text "$WORK_ITEM_CONTRACT" '`title`' "work item contract defines title"
|
|
262
|
+
require_text "$WORK_ITEM_CONTRACT" '`body`' "work item contract defines body"
|
|
263
|
+
require_text "$WORK_ITEM_CONTRACT" '`status`' "work item contract defines status"
|
|
264
|
+
require_text "$WORK_ITEM_CONTRACT" 'labels.*tags' "work item contract defines labels/tags"
|
|
265
|
+
require_text "$WORK_ITEM_CONTRACT" '`priority`' "work item contract defines priority"
|
|
266
|
+
require_text "$WORK_ITEM_CONTRACT" '`size`' "work item contract defines size"
|
|
267
|
+
require_text "$WORK_ITEM_CONTRACT" '`risk`' "work item contract defines risk"
|
|
268
|
+
require_text "$WORK_ITEM_CONTRACT" '`blockers`' "work item contract defines blockers"
|
|
269
|
+
require_text "$WORK_ITEM_CONTRACT" 'related_links' "work item contract defines related links"
|
|
270
|
+
require_text "$WORK_ITEM_CONTRACT" 'source_provider' "work item contract defines source provider"
|
|
271
|
+
require_text "$WORK_ITEM_CONTRACT" 'project_membership.*board_membership' "work item contract defines project/board membership"
|
|
272
|
+
require_text "$WORK_ITEM_CONTRACT" 'pr_links' "work item contract defines PR links"
|
|
273
|
+
require_text "$WORK_ITEM_CONTRACT" 'artifact_refs' "work item contract defines artifact refs"
|
|
274
|
+
require_text "$WORK_ITEM_CONTRACT" '`issues`' "work item contract defines issues capability"
|
|
275
|
+
require_text "$WORK_ITEM_CONTRACT" '`projects_boards`' "work item contract defines projects/boards capability"
|
|
276
|
+
require_text "$WORK_ITEM_CONTRACT" '`status_fields`' "work item contract defines status fields capability"
|
|
277
|
+
require_text "$WORK_ITEM_CONTRACT" '`custom_fields`' "work item contract defines custom fields capability"
|
|
278
|
+
require_text "$WORK_ITEM_CONTRACT" '`dependencies`' "work item contract defines dependencies capability"
|
|
279
|
+
require_text "$WORK_ITEM_CONTRACT" '`milestones`' "work item contract defines milestones capability"
|
|
280
|
+
require_text "$WORK_ITEM_CONTRACT" '`assignees`' "work item contract defines assignees capability"
|
|
281
|
+
require_text "$WORK_ITEM_CONTRACT" '`comments`' "work item contract defines comments capability"
|
|
282
|
+
require_text "$WORK_ITEM_CONTRACT" 'GitHub Issues as `WorkItemProvider`' "work item contract maps GitHub Issues as WorkItemProvider"
|
|
283
|
+
require_text "$WORK_ITEM_CONTRACT" 'GitHub Projects as `BoardProvider`' "work item contract maps GitHub Projects as BoardProvider"
|
|
284
|
+
require_text "$WORK_ITEM_CONTRACT" 'planned_base_sha' "work item contract records planned base sha"
|
|
285
|
+
require_text "$WORK_ITEM_CONTRACT" 'scope_drift' "work item contract defines scope drift"
|
|
286
|
+
require_text "$WORK_ITEM_CONTRACT" 'contract_drift' "work item contract defines contract drift"
|
|
287
|
+
require_text "$VERIFICATION_CONTRACT" 'Report-Only Rule' "verification contract is report-only"
|
|
288
|
+
require_text "$VERIFICATION_CONTRACT" 'NOT_VERIFIED' "verification contract treats NOT_VERIFIED as first-class"
|
|
289
|
+
require_text "$VERIFICATION_CONTRACT" 'A technically green build is not enough' "verification contract preserves usefulness gate"
|
|
290
|
+
require_text "$DELIVERY_CONTRACT" 'Goal Fit Gate' "delivery contract defines Goal Fit Gate"
|
|
291
|
+
require_text "$DELIVERY_CONTRACT" 'Final Acceptance' "delivery contract defines Final Acceptance"
|
|
292
|
+
require_text "$DELIVERY_CONTRACT" 'Publish verified changes before release readiness' "delivery contract requires publish-change before release readiness"
|
|
293
|
+
require_text "$DELIVERY_CONTRACT" 'verified diff committed and pushed' "final acceptance requires committed and pushed diff"
|
|
294
|
+
require_text "$DELIVERY_CONTRACT" 'provider change record created or updated' "final acceptance requires provider change or explicit no-provider-change reason"
|
|
295
|
+
require_text "$DELIVERY_CONTRACT" 'local `\.flow-agents/` runtime artifacts remain untracked' "final acceptance requires runtime artifacts stay untracked"
|
|
296
|
+
require_text "$DELIVERY_CONTRACT" 'GitHub PRs are the first `ChangeProvider` adapter example' "delivery contract keeps GitHub PR as adapter example"
|
|
297
|
+
require_text "$DELIVERY_CONTRACT" 'Delegation Gates' "delivery contract defines delegation gates"
|
|
298
|
+
require_text "$DELIVERY_CONTRACT" 'Do not replace the delegate gate with a local summary' "delivery contract forbids local gate substitution"
|
|
299
|
+
require_text "$DELIVERY_CONTRACT" 'name the exact delegate ids' "delivery contract requires auditable delegate names"
|
|
300
|
+
require_text "$DELIVERY_CONTRACT" 'Codex, Kiro, Claude Code' "delivery contract is cross-distribution"
|
|
301
|
+
require_text "$SHARED_CONTRACTS_DOC" 'context/contracts/' "shared contracts doc names contract directory"
|
|
302
|
+
require_text "$SHARED_CONTRACTS_DOC" 'workflow-artifact-lifecycle.md' "shared contracts doc links artifact lifecycle"
|
|
303
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Workflow Artifact Lifecycle' "artifact lifecycle doc has title"
|
|
304
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Runtime state remains ignored' "artifact lifecycle doc keeps runtime artifacts local"
|
|
305
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Durable closeout content' "artifact lifecycle doc requires closeout"
|
|
306
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'durable planning, decisions, evidence pointers, and acceptance notes' "artifact lifecycle doc requires durable promotion"
|
|
307
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Promote by ownership' "artifact lifecycle doc defines promotion targets"
|
|
308
|
+
require_text "$ARTIFACT_CONTRACT" 'Do not commit local workflow runtime roots such as `\.flow-agents/<slug>/`' "artifact contract forbids committing runtime workspaces"
|
|
309
|
+
require_text "$OPERATING_LAYERS_DOC" 'workflow-artifact-lifecycle.md' "operating layers links artifact lifecycle"
|
|
310
|
+
require_text "$PAGES_INDEX" 'workflow-artifact-lifecycle.html' "docs index links artifact lifecycle"
|
|
311
|
+
require_text "$PAGES_INDEX" 'developer-architecture.html' "docs index links developer architecture"
|
|
312
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Flow Agents' "developer architecture names Flow Agents"
|
|
313
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Flow' "developer architecture names Flow"
|
|
314
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Surface' "developer architecture names Surface"
|
|
315
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Veritas' "developer architecture names Veritas"
|
|
316
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Builder Kit' "developer architecture names Builder Kit"
|
|
317
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Current state' "developer architecture labels current-state claims"
|
|
318
|
+
require_text "$DEVELOPER_ARCHITECTURE_DOC" 'Future direction' "developer architecture labels future-direction claims"
|
|
319
|
+
if [[ "$(rg -c '^```mermaid$' "$DEVELOPER_ARCHITECTURE_DOC")" -ge 2 ]]; then
|
|
320
|
+
pass "developer architecture includes at least two Mermaid diagrams"
|
|
321
|
+
else
|
|
322
|
+
fail "developer architecture includes at least two Mermaid diagrams"
|
|
323
|
+
fi
|
|
324
|
+
require_text "$GITIGNORE" '^\.flow-agents/\*' "gitignore ignores Flow Agents runtime artifacts"
|
|
325
|
+
require_text "$GITIGNORE" '^\.surface/$' "gitignore treats Surface runtime root as local state"
|
|
326
|
+
reject_text "$ROOT/scripts/README.md" 'transcript-to-oar.sh' "scripts README omits removed transcript helper"
|
|
327
|
+
require_text "$ROOT_CONTEXT" '### Flow' "Flow Agents glossary defines Flow"
|
|
328
|
+
require_text "$ROOT_CONTEXT" '### Workflow Enforcement' "Flow Agents glossary defines workflow enforcement"
|
|
329
|
+
require_text "$ROOT_CONTEXT" '### Runtime Portability' "Flow Agents glossary defines runtime portability"
|
|
330
|
+
require_text "$FLOW_AGENTS_FLOW_ADR" 'Flow Agents will consume Kontour Flow' "Flow Agents ADR consumes Flow"
|
|
331
|
+
require_text "$FLOW_AGENTS_FLOW_ADR" 'Veritas remains an optional development governance evidence provider' "Flow Agents ADR keeps Veritas provider boundary"
|
|
332
|
+
|
|
333
|
+
echo ""
|
|
334
|
+
echo "--- contract wiring ---"
|
|
335
|
+
require_text "$PLAN_WORK" 'context/contracts/planning-contract.md' "plan-work references planning contract"
|
|
336
|
+
require_text "$PLAN_WORK" 'context/contracts/artifact-contract.md' "plan-work references artifact contract"
|
|
337
|
+
require_text "$DELIVER" 'context/contracts/delivery-contract.md' "deliver references delivery contract"
|
|
338
|
+
require_text "$DELIVER" 'context/contracts/verification-contract.md' "deliver references verification contract"
|
|
339
|
+
require_text "$PULL" 'context/contracts/sandbox-policy.md' "pull-work references sandbox policy contract"
|
|
340
|
+
require_text "$PULL" 'context/contracts/work-item-contract.md' "pull-work references work item contract"
|
|
341
|
+
require_text "$PULL" 'WorkItemProvider' "pull-work uses work item provider role"
|
|
342
|
+
require_text "$PULL" 'BoardProvider' "pull-work uses board provider role"
|
|
343
|
+
require_text "$PULL" 'Do not implement provider settings, provider configuration, or configured-provider discovery' "pull-work avoids provider settings and discovery implementation"
|
|
344
|
+
require_text "$PULL" 'npm run effective-backlog-settings' "pull-work checks effective backlog settings"
|
|
345
|
+
require_text "$PULL" 'status: configured' "pull-work consumes configured provider settings"
|
|
346
|
+
require_text "$PULL" 'status: ask_user' "pull-work asks for providers when settings are absent"
|
|
347
|
+
require_text "$PULL" 'npm run pull-work-provider' "pull-work normalizes provider items"
|
|
348
|
+
require_text "$PULL" 'related-only' "pull-work classifies related-only items"
|
|
349
|
+
require_text "$PULL" 'flow validate-definition <path> --json' "pull-work delegates Flow Definition validation to Flow"
|
|
350
|
+
require_text "$PULL" 'fetch the latest target ref' "pull-work requires latest target ref fetch before freshness checks"
|
|
351
|
+
require_text "$PULL" 'compare the current target SHA to the work item.*planned_base_sha' "pull-work compares current target SHA to planned_base_sha"
|
|
352
|
+
require_text "$PULL" 'commits-since' "pull-work records commits-since"
|
|
353
|
+
require_text "$PULL" 'planned age' "pull-work records planned age"
|
|
354
|
+
require_text "$PULL" 'changed-file intersections with `planning_scope_refs`' "pull-work records planning scope intersections"
|
|
355
|
+
require_text "$PULL" 'Classify revision freshness as' "pull-work classifies revision freshness"
|
|
356
|
+
require_text "$PULL" '`fresh`' "pull-work documents fresh classification"
|
|
357
|
+
require_text "$PULL" '`drifted`' "pull-work documents drifted classification"
|
|
358
|
+
require_text "$PULL" '`stale`' "pull-work documents stale classification"
|
|
359
|
+
require_text "$PULL" '`stale`.*route back to `idea-to-backlog`' "pull-work routes stale freshness to idea-to-backlog"
|
|
360
|
+
require_text "$PULL" 'Missing `planned_base_sha` is not fresh' "pull-work preserves missing planned_base_sha gap"
|
|
361
|
+
require_text "$PULL" 'NOT_VERIFIED.*accepted-gap baseline' "pull-work records missing baseline as NOT_VERIFIED or accepted gap"
|
|
362
|
+
require_text "$PLAN_WORK" 'revision_freshness' "plan-work consumes upstream revision freshness"
|
|
363
|
+
require_text "$PLAN_WORK" 'current target ref/SHA' "plan-work requires latest target ref/SHA confirmation"
|
|
364
|
+
require_text "$PLAN_WORK" 'accepted-gap baseline for missing historical `planned_base_sha`' "plan-work allows accepted-gap missing planned_base_sha baseline"
|
|
365
|
+
require_text "$PLAN_WORK" 'Missing `planned_base_sha` is never fresh' "plan-work does not treat missing planned_base_sha as fresh"
|
|
366
|
+
require_text "$PLAN_WORK" 'baseline freshness is missing or `NOT_VERIFIED`, record the gap and stop planning unless it has been explicitly accepted as a fallback baseline naming the current target ref/SHA plus provider history or equivalent' "plan-work blocks unresolved baseline freshness"
|
|
367
|
+
require_text "$PLAN_WORK" '`stale`.*route.*`idea-to-backlog`' "plan-work routes stale provider-backed work back to idea-to-backlog"
|
|
368
|
+
require_text "$PLAN_WORK" 'structured evidence ref object' "plan-work requires structured evidence refs"
|
|
369
|
+
require_text "$PLAN_WORK" 'Acceptance Evidence' "plan-work requires Acceptance Evidence comments"
|
|
370
|
+
require_text "$PLAN_WORK" 'each upstream AC id revalidated against drift' "plan-work requires AC revalidation against drift"
|
|
371
|
+
require_text "$PLAN_WORK" 'stale assumptions' "plan-work requires stale assumption findings"
|
|
372
|
+
require_text "$PLANNING_CONTRACT" 'Baseline and AC revalidation' "planning contract defines baseline and AC revalidation section"
|
|
373
|
+
require_text "$PLANNING_CONTRACT" 'Current target.*latest target ref/SHA' "planning contract records latest target ref/SHA"
|
|
374
|
+
require_text "$PLANNING_CONTRACT" 'revision_freshness' "planning contract records source freshness"
|
|
375
|
+
require_text "$PLANNING_CONTRACT" 'missing historical `planned_base_sha`' "planning contract records accepted-gap missing planned_base_sha baseline"
|
|
376
|
+
require_text "$PLANNING_CONTRACT" 'AC revalidation against drift' "planning contract requires AC revalidation against drift"
|
|
377
|
+
require_text "$PLANNING_CONTRACT" 'Stale assumptions' "planning contract records stale assumptions"
|
|
378
|
+
require_text "$PLANNING_CONTRACT" 'route stale shaped work back to idea-to-backlog' "planning contract records stale route-back behavior"
|
|
379
|
+
require_text "$KIT_REPOSITORY_DOC" 'npm run validate:source -- --kit' "kit repository doc includes local validation command"
|
|
380
|
+
require_text "$KIT_REPOSITORY_DOC" 'Flow Agents validates the repository shape' "kit repository doc states Flow Agents boundary"
|
|
381
|
+
require_text "$KIT_REPOSITORY_DOC" 'Flow validates Flow Definition semantics' "kit repository doc states Flow boundary"
|
|
382
|
+
require_text "$KIT_REPOSITORY_DOC" 'schema_version' "kit repository doc defines schema version"
|
|
383
|
+
require_text "$KIT_REPOSITORY_DOC" 'flows' "kit repository doc defines declared Flow Definitions"
|
|
384
|
+
require_text "$KIT_REPOSITORY_DOC" '[Aa]bsolute paths are rejected' "kit repository doc defines path safety"
|
|
385
|
+
require_text "$KIT_REPOSITORY_DOC" 'does not install remote kits' "kit repository doc states remote install non-goal"
|
|
386
|
+
require_text "$PAGES_INDEX" 'Quick Start' "docs index presents product quick start"
|
|
387
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'valid-local-kit' "kit repository integration covers valid fixture"
|
|
388
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-schema-version' "kit repository integration covers invalid schema version"
|
|
389
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-missing-schema-version' "kit repository integration covers missing schema version"
|
|
390
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-missing-id' "kit repository integration covers missing id"
|
|
391
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-absolute-path' "kit repository integration covers absolute path"
|
|
392
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-traversal' "kit repository integration covers path traversal"
|
|
393
|
+
require_text "$KIT_REPOSITORY_INTEGRATION" 'invalid-duplicate-flow' "kit repository integration covers duplicate entries"
|
|
394
|
+
require_text "$EFFECTIVE_BACKLOG_SETTINGS" 'WorkItemProvider' "effective backlog settings helper reports WorkItemProvider"
|
|
395
|
+
require_text "$EFFECTIVE_BACKLOG_SETTINGS" 'BoardProvider' "effective backlog settings helper reports BoardProvider"
|
|
396
|
+
require_text "$PULL_WORK_PROVIDER" 'source_provider' "pull-work provider preserves source provider refs"
|
|
397
|
+
require_text "$PULL_WORK_PROVIDER" 'board_membership' "pull-work provider preserves board membership"
|
|
398
|
+
require_text "$PULL_WORK_PROVIDER" 'blockers' "pull-work provider preserves blockers"
|
|
399
|
+
require_text "$PULL_WORK_PROVIDER" 'pr_links' "pull-work provider preserves PR links"
|
|
400
|
+
require_text "$PULL_WORK_PROVIDER" 'artifact_refs' "pull-work provider preserves artifact refs"
|
|
401
|
+
require_text "$PULL_WORK_PROVIDER" 'related-only' "pull-work provider classifies related-only items"
|
|
402
|
+
require_text "$PULL_WORK_PROVIDER" 'in_progress' "pull-work provider classifies in-progress items"
|
|
403
|
+
require_text "$PULL_WORK_PROVIDER_INTEGRATION" '#22 ready when flow#2 is closed' "pull-work provider integration proves resolved dependency readiness"
|
|
404
|
+
require_text "$PULL_WORK_PROVIDER_INTEGRATION" '#22 blocked when flow#2 state is unknown' "pull-work provider integration proves unresolved dependency blocking"
|
|
405
|
+
require_text "$BACKLOG_PROVIDER_SETTINGS" '"owner": "kontourai"' "repo backlog settings use kontourai owner"
|
|
406
|
+
require_text "$BACKLOG_PROVIDER_SETTINGS" '"name": "flow-agents"' "repo backlog settings use flow-agents repo"
|
|
407
|
+
require_text "$BACKLOG_PROVIDER_SETTINGS" '"number": 1' "repo backlog settings use GitHub Project 1"
|
|
408
|
+
require_text "$BACKLOG_PROVIDER_SETTINGS" '"prefer_finishing_active_work": true' "repo backlog settings include WIP policy"
|
|
409
|
+
require_text "$PLAN_WORK" 'context/contracts/sandbox-policy.md' "plan-work references sandbox policy contract"
|
|
410
|
+
require_text "$EXECUTION_CONTRACT" 'context/contracts/sandbox-policy.md' "execution contract references sandbox policy contract"
|
|
411
|
+
require_text "$EVIDENCE" 'context/contracts/governance-adapter-contract.md' "evidence-gate references governance adapter contract"
|
|
412
|
+
require_text "$VERIFICATION_CONTRACT" 'context/contracts/governance-adapter-contract.md' "verification contract references governance adapter contract"
|
|
413
|
+
require_text "$SANDBOX_DOC" 'context/contracts/sandbox-policy.md' "sandbox doc links canonical contract"
|
|
414
|
+
require_text "$VERITAS_DOC" 'Veritas owns repo-local standards, authority, and evidence-check semantics' "Veritas doc defines ownership boundary"
|
|
415
|
+
require_text "$ROOT/docs/north-star.md" 'Flow owns generic process transparency' "north star defines Flow ownership"
|
|
416
|
+
require_text "$VERITAS_DOC" 'standard_refs' "Veritas doc maps output to evidence refs"
|
|
417
|
+
require_text "$VERIFY_WORK" 'context/contracts/verification-contract.md' "verify-work references verification contract"
|
|
418
|
+
require_text "$VERIFY_WORK" 'context/contracts/artifact-contract.md' "verify-work references artifact contract"
|
|
419
|
+
require_text "$TOOL_PLANNER" 'context/contracts/planning-contract.md' "tool-planner references planning contract"
|
|
420
|
+
require_text "$TOOL_WORKER" 'context/contracts/execution-contract.md' "tool-worker references execution contract"
|
|
421
|
+
require_text "$TOOL_VERIFIER" 'context/contracts/verification-contract.md' "tool-verifier references verification contract"
|
|
422
|
+
require_text "$TOOL_PLANNER" 'docs/context-map.md' "tool-planner uses context map"
|
|
423
|
+
require_text "$TOOL_WORKER" 'docs/context-map.md' "tool-worker uses context map"
|
|
424
|
+
require_text "$TOOL_VERIFIER" 'docs/context-map.md' "tool-verifier uses context map"
|
|
425
|
+
require_text "$TOOL_VERIFIER" 'Report only' "tool-verifier keeps report-only role"
|
|
426
|
+
require_text "$DEV_PROMPTFOO" 'deep-context contract persistence' "dev evals include deep-context contract persistence case"
|
|
427
|
+
require_text "$PACKAGE_MANIFEST" 'plan-work must delegate to tool-planner' "Codex kdev profile requires planner delegation"
|
|
428
|
+
require_text "$PACKAGE_MANIFEST" 'verify-work to tool-verifier' "Codex kdev profile requires verifier delegation"
|
|
429
|
+
require_text "$PACKAGE_MANIFEST" 'instead of replacing it with a local summary' "Codex kdev profile preserves blocked delegation gates"
|
|
430
|
+
require_text "$PACKAGE_MANIFEST" 'name exact delegate ids' "Codex kdev profile requires auditable delegate names"
|
|
431
|
+
|
|
432
|
+
echo ""
|
|
433
|
+
echo "--- delivery goal fit ---"
|
|
434
|
+
require_text "$PLAN_WORK" 'Definition Of Done' "plan-work requires Definition Of Done"
|
|
435
|
+
require_text "$PLAN_WORK" 'Stop-short risks' "plan-work captures stop-short risks"
|
|
436
|
+
require_text "$PLAN_WORK" 'Durable docs target' "plan-work captures durable docs target"
|
|
437
|
+
require_text "$DELIVER" 'Goal Fit Gate' "deliver requires Goal Fit Gate"
|
|
438
|
+
require_text "$DELIVER" 'Final Acceptance' "deliver requires Final Acceptance"
|
|
439
|
+
require_text "$DELIVER" 'Required Preflight' "deliver defines pull/pickup preflight"
|
|
440
|
+
require_text "$DELIVER" 'pull-work -> pickup-probe' "deliver routes missing pickup evidence through pull-work and pickup-probe"
|
|
441
|
+
require_text "$DELIVER" 'continue automatically to execution' "deliver can proceed autonomously after planning"
|
|
442
|
+
require_text "$DELIVER" '\.flow-agents/<slug>/archive' "deliver archives working artifacts"
|
|
443
|
+
require_text "$DELIVER" 'Sidecar Writer Adoption' "deliver owns sidecar writer adoption"
|
|
444
|
+
require_text "$DELIVER" 'record-critique|import-critique' "deliver records critique through sidecar writer"
|
|
445
|
+
require_text "$VERIFY_WORK" 'Goal Fit' "verify-work reports Goal Fit"
|
|
446
|
+
require_text "$VERIFY_WORK" 'A technically green build is not enough' "verify-work rejects task-only pass"
|
|
447
|
+
require_text "$VERIFY_WORK" 'criteria\[\]\.evidence_refs.*structured evidence refs' "verify-work requires structured acceptance evidence refs"
|
|
448
|
+
require_text "$VERIFY_WORK" 'checks\[\]\.artifact_refs.*structured evidence ref objects' "verify-work requires structured artifact refs"
|
|
449
|
+
require_text "$VERIFY_WORK" 'prose-only behavior claims' "verify-work rejects prose-only behavior evidence"
|
|
450
|
+
require_text "$PLAN_WORK" 'not optional ceremony' "plan-work treats sidecars as required when writer exists"
|
|
451
|
+
require_text "$EXECUTE_PLAN" 'do not mark execution as cleanly complete' "execute-plan records sidecar write blockers"
|
|
452
|
+
require_text "$VERIFY_WORK" 'Do not convert verifier output into `PASS` without structured evidence' "verify-work preserves structured evidence gate"
|
|
453
|
+
require_text "$RELEASE" 'keep the release decision as `HOLD`' "release-readiness preserves blocked release sidecars"
|
|
454
|
+
require_text "$RELEASE" 'record the sidecar-write or validation blocker as a `NOT_VERIFIED` evidence gap' "release-readiness records blocked writer as evidence gap"
|
|
455
|
+
require_text "$LEARNING" 'keep the learning verdict at `FOLLOWUP_REQUIRED` or `BLOCKED`' "learning-review preserves blocked learning sidecars"
|
|
456
|
+
require_text "$GOAL_FIT_HOOK" 'FLOW_AGENTS_GOAL_FIT_STRICT' "goal-fit hook supports strict mode"
|
|
457
|
+
require_text "$GOAL_FIT_HOOK" 'Definition Of Done' "goal-fit hook checks Definition Of Done"
|
|
458
|
+
require_text "$GOAL_FIT_HOOK" 'Goal Fit Gate' "goal-fit hook checks Goal Fit Gate"
|
|
459
|
+
require_text "$GOAL_FIT_HOOK" 'sidecarGuidance' "goal-fit hook reads sidecars for stop guidance"
|
|
460
|
+
require_text "$GOAL_FIT_HOOK" 'not_verified_gaps' "goal-fit hook reports not verified evidence gaps"
|
|
461
|
+
require_text "$GOAL_FIT_HOOK" 'critique open' "goal-fit hook reports open critique findings"
|
|
462
|
+
require_text "$WORKFLOW_STEERING_HOOK" 'state.json' "workflow steering hook reads state sidecars"
|
|
463
|
+
require_text "$WORKFLOW_STEERING_HOOK" 'critique.json' "workflow steering hook reads critique sidecars"
|
|
464
|
+
require_text "$WORKFLOW_STEERING_HOOK" 'docs/context-map.md' "workflow steering hook points to context map"
|
|
465
|
+
require_text "$WORKFLOW_STEERING_HOOK" 'next_action' "workflow steering hook uses next action"
|
|
466
|
+
require_text "$WORKFLOW_STEERING_HOOK" 'stateNeedsAmbientSteering' "workflow steering hook supports ambient state guidance"
|
|
467
|
+
require_text "$CONTEXT_MAP_GENERATOR" 'check' "context map generator supports drift check"
|
|
468
|
+
require_text "$PACK_FILTER" 'selected_packs' "pack filter records selected packs"
|
|
469
|
+
require_text "$PACK_FILTER" 'known.*keep' "pack filter prunes only known Flow Agents entries"
|
|
470
|
+
require_text "$PROMOTE_DOC" 'docs/delivery' "promotion helper writes long-lived delivery docs"
|
|
471
|
+
require_text "$PROMOTE_DOC" 'archived_artifact' "promotion helper links archived artifact"
|
|
472
|
+
require_text "$SIDECAR_WRITER" 'init-plan' "sidecar writer initializes planning sidecars"
|
|
473
|
+
require_text "$SIDECAR_WRITER" 'ensure-session' "sidecar writer ensures current session artifacts"
|
|
474
|
+
require_text "$SIDECAR_WRITER" 'advance-state' "sidecar writer advances workflow state"
|
|
475
|
+
require_text "$SIDECAR_WRITER" 'record-evidence' "sidecar writer records evidence sidecars"
|
|
476
|
+
require_text "$SIDECAR_WRITER" 'record-critique' "sidecar writer records critique sidecars"
|
|
477
|
+
require_text "$SIDECAR_WRITER" 'import-critique' "sidecar writer imports critique artifacts"
|
|
478
|
+
require_text "$SIDECAR_WRITER" 'record-release' "sidecar writer records release sidecars"
|
|
479
|
+
require_text "$SIDECAR_WRITER" 'record-learning' "sidecar writer records learning sidecars"
|
|
480
|
+
require_text "$SIDECAR_WRITER" 'dogfood-pass' "sidecar writer records dogfood passes"
|
|
481
|
+
require_text "$SIDECAR_WRITER" 'release-decision' "dogfood pass can record release readiness"
|
|
482
|
+
require_text "$SIDECAR_WRITER" 'lock' "sidecar writer serializes sidecar writes"
|
|
483
|
+
require_text "$ARTIFACT_CONTRACT" 'workflow-release.schema.json' "artifact contract defines release sidecar"
|
|
484
|
+
require_text "$ARTIFACT_CONTRACT" 'workflow-learning.schema.json' "artifact contract defines learning sidecar"
|
|
485
|
+
require_text "$ARTIFACT_VALIDATOR" 'release.json' "artifact validator recognizes release sidecars"
|
|
486
|
+
require_text "$ARTIFACT_VALIDATOR" 'learning.json' "artifact validator recognizes learning sidecars"
|
|
487
|
+
require_text "$ARTIFACT_VALIDATOR" 'green build is not enough' "artifact validator rejects green-build-only delivery"
|
|
488
|
+
require_text "$ARTIFACT_VALIDATOR" 'NOT_VERIFIED.*explicit acceptance' "artifact validator rejects hidden NOT_VERIFIED"
|
|
489
|
+
require_text "$RELEASE_SCHEMA" 'post_deploy_checks' "release schema defines post deploy checks"
|
|
490
|
+
require_text "$ROOT/schemas/workflow-evidence.schema.json" 'standard_refs' "evidence schema defines standard refs"
|
|
491
|
+
require_text "$ROOT/schemas/workflow-evidence.schema.json" 'opentelemetry-log' "evidence schema supports OpenTelemetry logs"
|
|
492
|
+
require_text "$ROOT/schemas/workflow-evidence.schema.json" 'sarif' "evidence schema supports SARIF"
|
|
493
|
+
require_text "$ROOT/schemas/workflow-evidence.schema.json" 'veritas' "evidence schema supports Veritas refs"
|
|
494
|
+
require_text "$SHARED_CONTRACTS_DOC" 'context/contracts/' "shared contracts doc names contract directory"
|
|
495
|
+
require_text "$ARTIFACT_INTEGRATION" 'valid plan/review/delivery artifact chain and sidecars pass' "artifact integration covers positive E2E chain"
|
|
496
|
+
require_text "$ARTIFACT_INTEGRATION" 'green-build-only artifact fails usefulness gate' "artifact integration covers usefulness negative case"
|
|
497
|
+
require_text "$ARTIFACT_INTEGRATION" 'hidden NOT_VERIFIED artifact requires explicit decision' "artifact integration covers NOT_VERIFIED negative case"
|
|
498
|
+
require_text "$ARTIFACT_INTEGRATION" 'missing Sandbox mode artifact fails with actionable message' "artifact integration covers missing sandbox mode"
|
|
499
|
+
require_text "$ARTIFACT_INTEGRATION" 'invalid Sandbox mode artifact fails with actionable message' "artifact integration covers invalid sandbox mode"
|
|
500
|
+
require_text "$ARTIFACT_INTEGRATION" 'evidence sidecar rejects unknown standard refs' "artifact integration covers evidence standard refs"
|
|
501
|
+
require_text "$ARTIFACT_INTEGRATION" 'learning sidecar requires traceable source refs' "artifact integration covers learning sidecar schema"
|
|
502
|
+
require_text "$ARTIFACT_INTEGRATION" 'learning sidecar requires at least one record' "artifact integration covers empty learning records"
|
|
503
|
+
require_text "$ARTIFACT_INTEGRATION" 'learning sidecar keeps open routing out of learned status' "artifact integration covers learning routing status"
|
|
504
|
+
require_text "$ARTIFACT_INTEGRATION" 'release sidecar blocks positive decisions with non-pass gates' "artifact integration covers release gate status"
|
|
505
|
+
require_text "$ARTIFACT_INTEGRATION" 'release sidecar requires deploy rollback and post-deploy checks' "artifact integration covers deploy readiness status"
|
|
506
|
+
require_text "$ARTIFACT_INTEGRATION" 'release sidecar requires matching gate for positive decisions' "artifact integration covers matching release gate"
|
|
507
|
+
require_text "$ARTIFACT_INTEGRATION" 'release sidecar rejects failed deploy checks' "artifact integration covers failed deploy checks"
|
|
508
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer advances workflow state' "sidecar writer integration covers phase transitions"
|
|
509
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer ensures current session artifact' "sidecar writer integration covers session creation"
|
|
510
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer selects existing session without overwrite' "sidecar writer integration covers session selection"
|
|
511
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'derives missing sidecars from existing session Markdown' "sidecar writer integration covers existing session sidecar derivation"
|
|
512
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer rejects invalid workflow states' "sidecar writer integration covers invalid state transitions"
|
|
513
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer rejects invalid target phases' "sidecar writer integration covers invalid target phases"
|
|
514
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer records release readiness' "sidecar writer integration covers release sidecars"
|
|
515
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer records learning feedback' "sidecar writer integration covers learning sidecars"
|
|
516
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass refuses clean completion without evidence' "sidecar writer integration covers dogfood pass evidence gate"
|
|
517
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects existing dirty evidence before state and handoff writes' "sidecar writer integration covers existing dirty evidence fail-closed behavior"
|
|
518
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects existing invalid evidence before state and handoff writes' "sidecar writer integration covers existing invalid evidence fail-closed behavior"
|
|
519
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects failed clean-pass checks before partial evidence writes' "sidecar writer integration covers clean-pass failed check fail-closed behavior"
|
|
520
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects not_verified clean-pass checks before partial evidence writes' "sidecar writer integration covers clean-pass not-verified fail-closed behavior"
|
|
521
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects invalid evidence metadata before partial sidecar writes' "sidecar writer integration covers invalid evidence metadata fail-closed behavior"
|
|
522
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects invalid learning before partial sidecar writes' "sidecar writer integration covers invalid learning fail-closed behavior"
|
|
523
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects invalid learning shape before partial sidecar writes' "sidecar writer integration covers invalid learning shape fail-closed behavior"
|
|
524
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects existing invalid learning before partial sidecar writes' "sidecar writer integration covers existing invalid learning fail-closed behavior"
|
|
525
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects invalid critique metadata before partial sidecar writes' "sidecar writer integration covers invalid critique metadata fail-closed behavior"
|
|
526
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects existing invalid critique before partial sidecar writes' "sidecar writer integration covers existing invalid critique fail-closed behavior"
|
|
527
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass requires critique when configured' "sidecar writer integration covers dogfood pass critique gate"
|
|
528
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects bad explicit artifact dirs' "sidecar writer integration covers dogfood artifact-dir validation"
|
|
529
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects invalid critique JSON before partial evidence writes' "sidecar writer integration covers dogfood parse fail-closed behavior"
|
|
530
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects failing required critique before partial evidence writes' "sidecar writer integration covers dogfood semantic fail-closed behavior"
|
|
531
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass rejects existing dirty critique before partial evidence writes' "sidecar writer integration covers existing critique fail-closed behavior"
|
|
532
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass records failed evidence and failing critique for routing' "sidecar writer integration covers honest failed dogfood records"
|
|
533
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass preserves NOT_VERIFIED evidence' "sidecar writer integration covers dogfood pass not verified routing"
|
|
534
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass release readiness requires clean critique' "sidecar writer integration covers release critique gate"
|
|
535
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'dogfood-pass records release readiness after clean pass' "sidecar writer integration covers dogfood release readiness"
|
|
536
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'sidecar writer serializes concurrent sidecar writes' "sidecar writer integration covers concurrent writes"
|
|
537
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'does not leave lock files for invalid new artifact commands' "sidecar writer integration covers invalid lock cleanup"
|
|
538
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'does not advance state after invalid release semantics' "sidecar writer integration guards release state ordering"
|
|
539
|
+
require_text "$SIDECAR_WRITER_INTEGRATION" 'does not archive state after invalid learning semantics' "sidecar writer integration guards learning state ordering"
|
|
540
|
+
require_text "$CONTEXT_MAP_INTEGRATION" 'context map is current' "context map integration covers drift"
|
|
541
|
+
require_text "$CONTEXT_MAP_INTEGRATION" 'context map generation is deterministic' "context map integration covers deterministic generation"
|
|
542
|
+
require_text "$WORKFLOW_STEERING_INTEGRATION" 'workflow steering hook neutralizes multiline critique findings' "workflow steering integration covers critique sanitization"
|
|
543
|
+
require_text "$WORKFLOW_STEERING_INTEGRATION" 'workflow steering hook appends context-map recovery guidance' "workflow steering integration covers context-map guidance"
|
|
544
|
+
require_text "$WORKFLOW_STEERING_INTEGRATION" 'workflow steering hook emits ambient state guidance at user prompt submit' "workflow steering integration covers ambient state guidance"
|
|
545
|
+
require_text "$ROOT/evals/integration/test_goal_fit_hook.sh" 'goal-fit hook reports actionable sidecar guidance' "goal-fit integration covers specific sidecar guidance"
|
|
546
|
+
require_text "$HOOK_INFLUENCE_CASES" 'agent_must_do' "hook influence cases define expected agent behavior"
|
|
547
|
+
require_text "$HOOK_INFLUENCE_CASES" 'live-acceptance' "hook influence cases include live acceptance evidence"
|
|
548
|
+
require_text "$HOOK_INFLUENCE_CASES" 'documented-runtime-gap' "hook influence cases capture runtime gaps honestly"
|
|
549
|
+
require_text "$HOOK_INFLUENCE_INTEGRATION" 'hook influence behavioral cases validate' "hook influence integration validates behavioral cases"
|
|
550
|
+
require_text "$HOOK_INFLUENCE_VALIDATOR" 'missing runtime coverage' "hook influence validator enforces runtime coverage"
|
|
551
|
+
|
|
552
|
+
echo ""
|
|
553
|
+
echo "--- builder-shape ---"
|
|
554
|
+
require_text "$BUILDER_SHAPE" '^name: "builder-shape"$' "frontmatter name"
|
|
555
|
+
require_text "$BUILDER_SHAPE" 'Builder Kit `shape` flow' "defines Builder Kit shape product surface"
|
|
556
|
+
require_text "$BUILDER_SHAPE" 'skills/idea-to-backlog/SKILL.md' "delegates to idea-to-backlog"
|
|
557
|
+
require_text "$BUILDER_SHAPE" 'kits/builder/flows/shape.flow.json' "links Builder Kit Flow Definition"
|
|
558
|
+
require_text "$BUILDER_SHAPE" 'raw idea.*current conversation context|current conversation context.*raw idea' "accepts raw idea or conversation context"
|
|
559
|
+
require_text "$BUILDER_SHAPE" 'Probe/alignment' "uses Probe alignment language"
|
|
560
|
+
require_text "$BUILDER_SHAPE" 'Proactive suggestion' "builder-shape is suggested for feature/product planning"
|
|
561
|
+
require_text "$BUILDER_SHAPE" 'design-probe.*idea-to-backlog|idea-to-backlog.*design-probe' "builder-shape chains design-probe and idea-to-backlog"
|
|
562
|
+
require_text "$BUILDER_SHAPE" 'stop at the backlog gate by default|Stop at `next_gate: Backlog Gate`' "stops at backlog gate by default"
|
|
563
|
+
require_text "$BUILDER_SHAPE" 'Issue sync is explicit-only' "requires explicit issue sync"
|
|
564
|
+
require_text "$BUILDER_SHAPE" 'Direct `idea-to-backlog` usage remains valid' "preserves direct idea-to-backlog use"
|
|
565
|
+
require_text "$BUILDER_SHAPE" 'source_ideas' "requires standard source ideas section"
|
|
566
|
+
require_text "$BUILDER_SHAPE" 'idea_inventory' "requires standard idea inventory section"
|
|
567
|
+
require_text "$BUILDER_SHAPE" 'slice_candidates' "requires standard slice candidates section"
|
|
568
|
+
require_text "$BUILDER_SHAPE" 'dependency_map' "requires standard dependency map section"
|
|
569
|
+
require_text "$BUILDER_SHAPE" 'shaped_work' "requires standard shaped work section"
|
|
570
|
+
require_text "$BUILDER_SHAPE" 'risk_release_notes' "requires standard risk release notes section"
|
|
571
|
+
require_text "$BUILDER_SHAPE" 'open_questions' "requires standard open questions section"
|
|
572
|
+
require_text "$BUILDER_SHAPE" 'next_gate' "requires standard next gate section"
|
|
573
|
+
|
|
574
|
+
echo ""
|
|
575
|
+
echo "--- idea-to-backlog ---"
|
|
576
|
+
require_text "$IDEA" '^name: "idea-to-backlog"$' "frontmatter name"
|
|
577
|
+
require_text "$IDEA" 'Do not write production code' "forbids production implementation"
|
|
578
|
+
require_text "$IDEA" 'Do not invoke downstream delivery skills' "keeps upstream separate from delivery"
|
|
579
|
+
require_text "$IDEA" 'After the backlog gate, hand off to `pull-work` only if the user explicitly asks to continue' "allows explicit gated handoff"
|
|
580
|
+
require_text "$IDEA" 'GitHub issues' "uses GitHub issues as executable backlog"
|
|
581
|
+
require_text "$IDEA" 'thinnest meaningful slice' "requires thinnest meaningful slice"
|
|
582
|
+
require_text "$IDEA" 'bundle justification' "requires bundle justification for grouped work"
|
|
583
|
+
require_text "$IDEA" 'dependency map' "requires dependency mapping"
|
|
584
|
+
require_text "$IDEA" 'Push back|push back' "pushes back on blended ideas"
|
|
585
|
+
require_text "$IDEA" 'Backlog Gate' "defines backlog gate"
|
|
586
|
+
require_text "$IDEA" 'flow-agents:work-item-metadata' "documents work-item metadata marker"
|
|
587
|
+
require_text "$IDEA" 'planned_base_ref' "documents planned_base_ref"
|
|
588
|
+
require_text "$IDEA" 'planned_base_sha' "documents planned_base_sha"
|
|
589
|
+
require_text "$IDEA" 'planned_at' "documents planned_at"
|
|
590
|
+
require_text "$IDEA" 'planning_artifact_ref' "documents planning_artifact_ref"
|
|
591
|
+
require_text "$IDEA" 'planning_scope_refs' "documents planning_scope_refs"
|
|
592
|
+
require_text "$IDEA" 'source_revisions' "documents repo-scoped source_revisions"
|
|
593
|
+
require_text "$IDEA" 'structured .*blockers\[\]' "documents structured blockers array"
|
|
594
|
+
require_text "$IDEA" 'Dependencies / Blockers' "preserves human-readable dependencies/blockers prose"
|
|
595
|
+
require_text "$IDEA" 'provider-neutral structured metadata marker' "keeps marker guidance provider-neutral"
|
|
596
|
+
require_text "$IDEA" 'outside the generic skill contract' "keeps native provider dependency APIs adapter-specific"
|
|
597
|
+
require_text "$IDEA" 'Acceptance Evidence' "idea-to-backlog requires Acceptance Evidence issue expectation"
|
|
598
|
+
require_text "$IDEA" 'immutable GitHub blob permalinks pinned to commit SHA' "idea-to-backlog expects immutable source permalinks"
|
|
599
|
+
|
|
600
|
+
echo ""
|
|
601
|
+
echo "--- pull-work ---"
|
|
602
|
+
require_text "$PULL" '^name: "pull-work"$' "frontmatter name"
|
|
603
|
+
require_text "$PULL" 'Do not implement code' "forbids implementation"
|
|
604
|
+
require_text "$PULL" 'WIP' "enforces WIP awareness"
|
|
605
|
+
require_text "$PULL" 'worktree' "records worktree isolation decision"
|
|
606
|
+
require_text "$PULL" 'thinnest meaningful slice' "checks selected slice size"
|
|
607
|
+
require_text "$PULL" 'bundle justification' "checks issue-group bundle justification"
|
|
608
|
+
require_text "$PULL" 'plan-work' "hands off to plan-work"
|
|
609
|
+
require_text "$PULL" 'Cross-Repo Ranking And Selection' "pull-work documents cross-repo ranking"
|
|
610
|
+
require_text "$PULL" 'provider-neutral cross-repo ranking' "pull-work ranks across repos provider-neutrally"
|
|
611
|
+
require_text "$PULL" '`selected_scope`' "pull-work output contract records selected scope"
|
|
612
|
+
require_text "$PULL" '`priority_rationale`' "pull-work output contract records priority rationale"
|
|
613
|
+
require_text "$PULL" '`dependencies`' "pull-work output contract records dependencies"
|
|
614
|
+
require_text "$PULL" '`wip_conflict_notes`' "pull-work output contract records WIP/conflict notes"
|
|
615
|
+
require_text "$PULL" '`alignment_questions`' "pull-work output contract records alignment questions"
|
|
616
|
+
require_text "$PULL" 'selected_item_ids' "pull-work records selected item correlation ids"
|
|
617
|
+
require_text "$PULL" 'shepherding_item_ids' "pull-work records shepherding item correlation ids"
|
|
618
|
+
require_text "$PULL" 'backlog_gap=true' "pull-work records backlog gaps explicitly"
|
|
619
|
+
require_text "$PULL" 'local backlog artifact' "pull-work supports local backlog artifact refs"
|
|
620
|
+
require_text "$PULL" 'route to `idea-to-backlog`' "pull-work routes backlog gaps to idea-to-backlog"
|
|
621
|
+
require_text "$PULL" 'Work Item Group selection requires explicit justification' "pull-work requires explicit Work Item Group justification"
|
|
622
|
+
require_text "$PULL" 'Do not implement code' "pull-work keeps implementation out of pickup"
|
|
623
|
+
require_text "$PULL" 'Hand selected work to `plan-work` only after the pickup gate is satisfied' "pull-work preserves plan-work gate"
|
|
624
|
+
require_text "$PULL" 'enforce the full pull-work selection, WIP/shepherding, dependency, grouping, and worktree logic' "pull-work enforces selection logic before planning"
|
|
625
|
+
require_text "$PULL" 'fresh pickup Probe record exists' "pull-work requires fresh pickup Probe before planning"
|
|
626
|
+
require_text "$PULL" 'independent docs work' "pull-work examples cover independent docs work"
|
|
627
|
+
require_text "$PULL" 'Resource Contract audit work' "pull-work examples cover Resource Contract audit work"
|
|
628
|
+
require_text "$PULL" 'dogfood-alpha implementation work' "pull-work examples cover dogfood-alpha implementation work"
|
|
629
|
+
require_text "$PULL" 'blocked cross-product dependency' "pull-work examples cover blocked cross-product dependency"
|
|
630
|
+
require_text "$PULL" 'Direct `pull-work` remains a standalone primitive' "pull-work preserves direct primitive use"
|
|
631
|
+
require_text "$PULL" 'Builder Kit `build` flow' "pull-work documents Builder Kit build-flow pickup Probe"
|
|
632
|
+
require_text "$PULL" 'goal fit and scope' "pickup Probe checks goal fit and scope"
|
|
633
|
+
require_text "$PULL" 'blockers and dependencies' "pickup Probe checks blockers and dependencies"
|
|
634
|
+
require_text "$PULL" 'dependency freshness' "pickup Probe checks dependency freshness"
|
|
635
|
+
require_text "$PULL" 'acceptance criteria quality' "pickup Probe checks acceptance criteria quality"
|
|
636
|
+
require_text "$PULL" 'provider state' "pickup Probe checks provider state"
|
|
637
|
+
require_text "$PULL" 'risk and stop-short risks' "pickup Probe checks risk and stop-short risks"
|
|
638
|
+
require_text "$PULL" 'expected modified files and conflict risks' "pickup Probe records expected files and conflict risks"
|
|
639
|
+
require_text "$PULL" 'accepted gap' "pickup Probe records accepted gaps"
|
|
640
|
+
require_text "$PULL" 'Ask one alignment question at a time only when repo/provider context leaves a genuine decision gap' "pickup Probe limits alignment questions to genuine gaps"
|
|
641
|
+
require_text "$PULL" 'route `decision_gap` back to `design-probe`' "pull-work routes decision gaps to pickup Probe"
|
|
642
|
+
require_text "$PULL" 'my_active_work' "pull-work records my active work"
|
|
643
|
+
require_text "$PULL" 'shepherding_candidates' "pull-work records shepherding candidates"
|
|
644
|
+
require_text "$PULL" 'stale_worktrees' "pull-work records stale worktrees"
|
|
645
|
+
require_text "$PULL" 'open_prs_by_me' "pull-work records PRs by me"
|
|
646
|
+
require_text "$PULL" 'global_conflicts' "pull-work records global conflicts"
|
|
647
|
+
require_text "$PULL" 'dependency_impacts' "pull-work records dependency impacts"
|
|
648
|
+
require_text "$PULL" 'start_new_work_decision' "pull-work records start-new-work decision"
|
|
649
|
+
require_text "$PULL" 'worktree_lifecycle' "pull-work records worktree lifecycle"
|
|
650
|
+
require_text "$PULL" 'Personal WIP may block new work' "pull-work lets personal WIP block pickup"
|
|
651
|
+
require_text "$PULL" "Other people's WIP blocks only when" "pull-work distinguishes global WIP blocking"
|
|
652
|
+
require_text "$PULL" 'Publishing a branch must retain the worktree' "pull-work retains worktree through publish"
|
|
653
|
+
require_text "$PULL" 'Final acceptance, release cleanup, or explicit abandonment owns worktree removal' "pull-work assigns cleanup to final acceptance"
|
|
654
|
+
require_file "$PULL_WORK_PERSONAL_WIP_FIXTURE" "pull-work personal WIP fixture"
|
|
655
|
+
require_file "$PULL_WORK_GLOBAL_WIP_FIXTURE" "pull-work global WIP fixture"
|
|
656
|
+
require_text "$USAGE_GUIDE" 'Before selecting new work, `pull-work` must separate your WIP from global conflict context' "usage guide separates personal and global WIP"
|
|
657
|
+
require_text "$USAGE_GUIDE" 'Your WIP can block starting new work' "usage guide documents personal WIP gate"
|
|
658
|
+
require_text "$USAGE_GUIDE" "Other people's WIP should block only when" "usage guide documents global WIP policy"
|
|
659
|
+
require_text "$USAGE_GUIDE" '`worktree_lifecycle`' "usage guide documents worktree lifecycle"
|
|
660
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Pull Work WIP And Worktree Lifecycle' "state contract documents WIP lifecycle"
|
|
661
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Personal WIP controls whether new work should start' "state contract defines personal WIP gate"
|
|
662
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Global work informs safety and priority' "state contract defines global WIP context"
|
|
663
|
+
if node - "$PULL_WORK_PERSONAL_WIP_FIXTURE" "$PULL_WORK_GLOBAL_WIP_FIXTURE" <<'NODE'; then
|
|
664
|
+
const fs = require("node:fs");
|
|
665
|
+
const requiredWip = ["my_active_work", "shepherding_candidates", "stale_worktrees", "open_prs_by_me", "global_conflicts", "dependency_impacts"];
|
|
666
|
+
const requiredLifecycle = ["path", "branch", "retain_until", "cleanup_owner", "cleanup_command", "cleanup_blocked_by"];
|
|
667
|
+
const personal = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
668
|
+
const globalCase = JSON.parse(fs.readFileSync(process.argv[3], "utf8"));
|
|
669
|
+
for (const [label, data] of [["personal", personal], ["global", globalCase]]) {
|
|
670
|
+
const wip = data.wip_assessment || {};
|
|
671
|
+
const missing = requiredWip.filter((field) => !(field in wip));
|
|
672
|
+
if (missing.length) throw new Error(`${label} fixture missing WIP fields: ${missing.join(", ")}`);
|
|
673
|
+
const lifecycle = data.worktree_lifecycle || {};
|
|
674
|
+
const missingLifecycle = requiredLifecycle.filter((field) => !(field in lifecycle));
|
|
675
|
+
if (missingLifecycle.length) throw new Error(`${label} fixture missing lifecycle fields: ${missingLifecycle.join(", ")}`);
|
|
676
|
+
const decision = data.start_new_work_decision || {};
|
|
677
|
+
if (!decision.decision || !decision.reason || !decision.next_action) throw new Error(`${label} fixture missing start_new_work_decision shape`);
|
|
678
|
+
}
|
|
679
|
+
if (personal.start_new_work_decision.decision !== "shepherd_existing") throw new Error("personal WIP fixture should shepherd existing work");
|
|
680
|
+
if (globalCase.start_new_work_decision.decision !== "proceed") throw new Error("global WIP fixture should proceed with recorded risk");
|
|
681
|
+
if (!globalCase.wip_assessment.global_conflicts?.length) throw new Error("global WIP fixture should include global conflicts");
|
|
682
|
+
NODE
|
|
683
|
+
pass "pull-work WIP shepherding fixtures distinguish personal block from global context"
|
|
684
|
+
else
|
|
685
|
+
fail "pull-work WIP shepherding fixtures distinguish personal block from global context"
|
|
686
|
+
fi
|
|
687
|
+
|
|
688
|
+
echo ""
|
|
689
|
+
echo "--- design-probe / pickup-probe ---"
|
|
690
|
+
require_file "$BUILDER_KIT_STATE_CONTRACT" "Builder Kit workflow state contract"
|
|
691
|
+
require_file "$BUILDER_KIT_HAPPY_PATH_FIXTURE" "Builder Kit happy-path fixture"
|
|
692
|
+
require_file "$BUILDER_KIT_RESUME_FIXTURE" "Builder Kit mid-work resume fixture"
|
|
693
|
+
require_file "$BUILDER_KIT_PRODUCT_CHAIN_FIXTURE" "Builder Kit product-chaining fixture"
|
|
694
|
+
require_file "$BUILDER_KIT_DIRECT_PRIMITIVE_FIXTURE" "Builder Kit direct primitive fixture"
|
|
695
|
+
require_file "$BUILDER_KIT_MISSING_PRESTEP_FIXTURE" "Builder Kit missing pre-step fixture"
|
|
696
|
+
require_file "$BUILDER_KIT_STALE_CONTINUATION_FIXTURE" "Builder Kit stale continuation fixture"
|
|
697
|
+
require_file "$BUILDER_KIT_EMPTY_BOARD_FIXTURE" "Builder Kit empty board fixture"
|
|
698
|
+
require_file "$BUILDER_KIT_BASELINE_FRESHNESS_HINT_FIXTURE" "Builder Kit baseline freshness resolution hint fixture"
|
|
699
|
+
require_text "$DESIGN_PROBE" 'This skill is generic' "design-probe is generic"
|
|
700
|
+
require_text "$DESIGN_PROBE" 'modeled after Matt Pocock.*grill-me' "design-probe models grill-me"
|
|
701
|
+
require_text "$DESIGN_PROBE" 'Be relentless about ambiguity' "design-probe grills ambiguous branches"
|
|
702
|
+
require_text "$DESIGN_PROBE" 'Ask exactly one alignment question at a time' "design-probe asks one question at a time"
|
|
703
|
+
require_text "$DESIGN_PROBE" 'Include a recommended answer with every question' "design-probe includes recommended answer"
|
|
704
|
+
require_text "$DESIGN_PROBE" 'Explore first' "design-probe explores local context before asking"
|
|
705
|
+
require_text "$DESIGN_PROBE" 'accepted gap' "design-probe records accepted gaps"
|
|
706
|
+
require_text "$PICKUP_PROBE" 'Selected work item' "pickup-probe requires selected work input"
|
|
707
|
+
require_text "$PICKUP_PROBE" 'modeled after Matt Pocock.*grill-with-docs' "pickup-probe models grill-with-docs"
|
|
708
|
+
require_text "$PICKUP_PROBE" 'Provider state' "pickup-probe requires provider state"
|
|
709
|
+
require_text "$PICKUP_PROBE" 'WIP and conflict scan' "pickup-probe requires WIP/conflict scan"
|
|
710
|
+
require_text "$PICKUP_PROBE" 'Existing acceptance criteria' "pickup-probe requires acceptance criteria"
|
|
711
|
+
require_text "$PICKUP_PROBE" 'Source issue and artifact refs' "pickup-probe requires source refs"
|
|
712
|
+
require_text "$PICKUP_PROBE" 'Planned-base drift context' "pickup-probe requires planned-base drift context"
|
|
713
|
+
require_text "$PICKUP_PROBE" 'planned_base_ref' "pickup-probe records planned base ref"
|
|
714
|
+
require_text "$PICKUP_PROBE" 'planned_base_sha' "pickup-probe records planned base sha"
|
|
715
|
+
require_text "$PICKUP_PROBE" 'current target ref/SHA' "pickup-probe records current target ref and sha"
|
|
716
|
+
require_text "$PICKUP_PROBE" 'diff summary from the planned/pulled work SHA to current HEAD' "pickup-probe researches diff to current head"
|
|
717
|
+
require_text "$PICKUP_PROBE" 'Fetch latest for the target ref' "pickup-probe fetches latest before freshness checks"
|
|
718
|
+
require_text "$PICKUP_PROBE" 'compare the current target SHA to `planned_base_sha`' "pickup-probe compares current target SHA to planned_base_sha"
|
|
719
|
+
require_text "$PICKUP_PROBE" 'commits-since' "pickup-probe records commits-since"
|
|
720
|
+
require_text "$PICKUP_PROBE" 'planned age' "pickup-probe records planned age"
|
|
721
|
+
require_text "$PICKUP_PROBE" 'changed-file intersections with `planning_scope_refs`' "pickup-probe records planning scope intersections"
|
|
722
|
+
require_text "$PICKUP_PROBE" 'Classify revision freshness as `fresh`, `drifted`, or `stale`' "pickup-probe classifies fresh drifted stale"
|
|
723
|
+
require_text "$PICKUP_PROBE" '`drifted` prompts alignment and may proceed' "pickup-probe allows drifted with alignment"
|
|
724
|
+
require_text "$PICKUP_PROBE" '`stale` routes back to `idea-to-backlog`' "pickup-probe routes stale freshness to idea-to-backlog"
|
|
725
|
+
require_text "$PICKUP_PROBE" 'planned_base_sha.*missing.*NOT_VERIFIED' "pickup-probe marks missing planned_base_sha as NOT_VERIFIED"
|
|
726
|
+
require_text "$PICKUP_PROBE" 'concrete fallback baseline' "pickup-probe records fallback baseline for missing planned_base_sha"
|
|
727
|
+
require_text "$PICKUP_PROBE" 'resolution_hints.*Builder Kit Probe record' "pickup-probe records resolution hints in Builder Kit Probe record"
|
|
728
|
+
require_text "$PICKUP_PROBE" 'gap_id: revision_freshness_not_verified' "pickup-probe names baseline freshness hint gap id"
|
|
729
|
+
require_text "$PICKUP_PROBE" 'claim_id: planning.baseline.current' "pickup-probe names baseline freshness claim id"
|
|
730
|
+
require_text "$PICKUP_PROBE" 'resolve_at.*pickup-probe' "pickup-probe routes baseline hint resolution back to pickup-probe"
|
|
731
|
+
require_text "$PICKUP_PROBE" 'Probe status' "pickup-probe records Probe status"
|
|
732
|
+
require_text "$PICKUP_PROBE" 'Planning readiness' "pickup-probe records planning readiness"
|
|
733
|
+
require_text "$PICKUP_PROBE" 'Expected modified files' "pickup-probe records expected modified files"
|
|
734
|
+
require_text "$PICKUP_PROBE" 'Conflict risks' "pickup-probe records conflict risks"
|
|
735
|
+
require_text "$PICKUP_PROBE" 'Route reason and next action' "pickup-probe records route and next action"
|
|
736
|
+
require_text "$PICKUP_PROBE" 'Research drift before asking questions' "pickup-probe researches drift before alignment questions"
|
|
737
|
+
require_text "$PICKUP_PROBE" 'no_material_drift' "pickup-probe classifies no material drift"
|
|
738
|
+
require_text "$PICKUP_PROBE" 'scope_drift' "pickup-probe classifies scope drift"
|
|
739
|
+
require_text "$PICKUP_PROBE" 'dependency_drift' "pickup-probe classifies dependency drift"
|
|
740
|
+
require_text "$PICKUP_PROBE" 'contract_drift' "pickup-probe classifies contract drift"
|
|
741
|
+
require_text "$PICKUP_PROBE" 'conflict_risk' "pickup-probe classifies conflict risk"
|
|
742
|
+
require_text "$PICKUP_PROBE" 'Planned-base drift research is recorded' "pickup-probe gates planning on drift research"
|
|
743
|
+
require_text "$PICKUP_PROBE" 'planned-base drift summary and drift classification' "pickup-probe hands off drift summary to plan-work"
|
|
744
|
+
require_text "$PICKUP_PROBE" 'Update `CONTEXT.md` inline only for glossary-style durable terminology decisions' "pickup-probe limits CONTEXT.md updates"
|
|
745
|
+
require_text "$PICKUP_PROBE" 'Challenge glossary conflicts immediately' "pickup-probe challenges domain terminology"
|
|
746
|
+
require_text "$PICKUP_PROBE" 'Create a lazy context file only when a resolved term or workflow concept has no existing home' "pickup-probe creates context lazily"
|
|
747
|
+
require_text "$PICKUP_PROBE" 'ADRs sparingly, only when all three are true' "pickup-probe limits ADRs"
|
|
748
|
+
require_text "$PICKUP_PROBE" 'hard to reverse, surprising without context, and the result of a real trade-off' "pickup-probe keeps ADR threshold"
|
|
749
|
+
require_text "$BUILDER_SHAPE" 'Product-level auto-guidance' "builder-shape guides idea-to-backlog"
|
|
750
|
+
require_text "$BUILDER_SHAPE" 'do not require them to type `idea-to-backlog`' "builder-shape hides primitive typing"
|
|
751
|
+
require_text "$PULL" 'probe_status' "pull-work records machine-checkable probe status"
|
|
752
|
+
require_text "$PULL" 'probe_artifact_ref' "pull-work records machine-checkable probe artifact"
|
|
753
|
+
require_text "$PULL" 'stale broad continuation instruction' "pull-work blocks stale broad continuation"
|
|
754
|
+
require_text "$PULL" 'no ready backlog item exists' "pull-work routes empty board to shape"
|
|
755
|
+
require_text "$PLAN_WORK" 'stale broad continuation language' "plan-work rejects stale continuation planning"
|
|
756
|
+
require_text "$PLAN_WORK" '`probe_status` is `passed` or `accepted_gap`' "plan-work requires passed or accepted-gap probe"
|
|
757
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'current step' "state contract documents current step"
|
|
758
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'next step' "state contract documents next step"
|
|
759
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'route reason' "state contract documents route reason"
|
|
760
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'selected work item refs' "state contract documents selected work refs"
|
|
761
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'missing evidence' "state contract documents missing evidence"
|
|
762
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'unresolved questions' "state contract documents unresolved questions"
|
|
763
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'accepted gaps' "state contract documents accepted gaps"
|
|
764
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'resume prompt' "state contract documents resume prompt"
|
|
765
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'artifact references' "state contract documents artifact references"
|
|
766
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" '`manual`' "state contract documents manual mode"
|
|
767
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" '`guided`' "state contract documents guided mode"
|
|
768
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" '`strict`' "state contract documents strict mode"
|
|
769
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" '`autonomous-bounded`' "state contract documents autonomous-bounded mode"
|
|
770
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'probe status' "state contract documents probe status"
|
|
771
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'probe artifact ref' "state contract documents probe artifact ref"
|
|
772
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'grouping decision' "state contract documents grouping decision"
|
|
773
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'optional `resolution_hints`' "state contract documents optional Builder Kit resolution hints"
|
|
774
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'canonical machine storage for `resolution_hints` is the Builder Kit Probe JSON record' "state contract keeps resolution hints in Builder Kit Probe storage"
|
|
775
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'blocked_refs\[\]' "state contract defines deterministic blocked refs"
|
|
776
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'acceptance_criterion.*AC2' "state contract includes deterministic AC2 blocked ref"
|
|
777
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'workflow_gate.*plan-work\.readiness' "state contract includes deterministic plan-work readiness blocked ref"
|
|
778
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'flow_step.*builder\.build\.plan' "state contract includes deterministic Builder Kit plan blocked ref"
|
|
779
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'revision_freshness_not_verified' "state contract includes baseline freshness gap example"
|
|
780
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'planning\.baseline\.current' "state contract includes Builder Kit baseline claim id"
|
|
781
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'missing_planned_base_sha' "state contract includes missing planned base reason code"
|
|
782
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'accepted_fallback_baseline\.current_target_plus_provider_history' "state contract includes explicit fallback baseline policy"
|
|
783
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Builder Kit owns readiness guidance' "state contract preserves Builder Kit ownership boundary"
|
|
784
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Generic Flow Agents sidecar schemas, including `schemas/workflow-evidence\.schema\.json`, are not extended by this Builder Kit field' "state contract preserves generic evidence schema boundary"
|
|
785
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Veritas remains optional evidence' "state contract preserves optional Veritas boundary"
|
|
786
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Direct primitive workflows remain valid without Builder Kit-specific `resolution_hints`' "state contract preserves direct primitive validity"
|
|
787
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Product Flow Chaining And Primitive Stopping' "state contract documents product flow chaining"
|
|
788
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Per-Item Pickup Probe Enforcement' "state contract documents per-item Probe enforcement"
|
|
789
|
+
require_text "$BUILDER_KIT_STATE_CONTRACT" 'Issues #64, #51, and #62 are downstream consumers of this contract' "state contract anchors downstream issue drift checks"
|
|
790
|
+
require_text "$USAGE_GUIDE" 'context/contracts/builder-kit-workflow-state-contract.md' "usage guide links Builder Kit state contract"
|
|
791
|
+
require_text "$USAGE_GUIDE" '`manual`' "usage guide documents manual mode"
|
|
792
|
+
require_text "$USAGE_GUIDE" '`guided`' "usage guide documents guided mode"
|
|
793
|
+
require_text "$USAGE_GUIDE" '`strict`' "usage guide documents strict mode"
|
|
794
|
+
require_text "$USAGE_GUIDE" '`autonomous-bounded`' "usage guide documents autonomous-bounded mode"
|
|
795
|
+
require_text "$MAP" '`pickup-probe`' "skills map includes pickup-probe"
|
|
796
|
+
if node - "$BUILDER_KIT_HAPPY_PATH_FIXTURE" "$BUILDER_KIT_RESUME_FIXTURE" "$BUILDER_KIT_PRODUCT_CHAIN_FIXTURE" "$BUILDER_KIT_DIRECT_PRIMITIVE_FIXTURE" "$BUILDER_KIT_MISSING_PRESTEP_FIXTURE" "$BUILDER_KIT_STALE_CONTINUATION_FIXTURE" "$BUILDER_KIT_EMPTY_BOARD_FIXTURE" "$BUILDER_KIT_BASELINE_FRESHNESS_HINT_FIXTURE" <<'NODE'; then
|
|
797
|
+
const fs = require("node:fs");
|
|
798
|
+
const requiredProbeFields = ["current_step", "next_step", "route_reason", "automation_mode", "recovery_mode", "selected_work_items", "missing_evidence", "unresolved_questions", "accepted_gaps", "resume_prompt", "artifact_refs", "flow_boundary", "probe_status", "probe_artifact_ref", "grouping_decision"];
|
|
799
|
+
const allowedModes = new Set(["manual", "guided", "strict", "autonomous-bounded"]);
|
|
800
|
+
const allowedProbeStatuses = new Set(["missing", "required", "in_progress", "passed", "accepted_gap", "blocked"]);
|
|
801
|
+
const allowedGrouping = new Set(["single-item", "independent-items", "justified-bundle", "unsafe-group", "empty-board"]);
|
|
802
|
+
const fixtures = process.argv.slice(2);
|
|
803
|
+
const data = fixtures.map((file) => JSON.parse(fs.readFileSync(file, "utf8")));
|
|
804
|
+
fixtures.forEach((file, index) => {
|
|
805
|
+
const state = data[index].state;
|
|
806
|
+
const probe = data[index].probe_record;
|
|
807
|
+
const missing = requiredProbeFields.filter((field) => !(field in probe));
|
|
808
|
+
if (missing.length) throw new Error(`${file} missing probe fields: ${missing.join(", ")}`);
|
|
809
|
+
if (!allowedModes.has(probe.automation_mode)) throw new Error(`${file} has invalid automation mode ${probe.automation_mode}`);
|
|
810
|
+
if (!allowedProbeStatuses.has(probe.probe_status)) throw new Error(`${file} has invalid probe status ${probe.probe_status}`);
|
|
811
|
+
const grouping = probe.grouping_decision;
|
|
812
|
+
if (!allowedGrouping.has(grouping.status)) throw new Error(`${file} has invalid grouping decision ${grouping.status}`);
|
|
813
|
+
if (["independent-items", "justified-bundle"].includes(grouping.status) && !grouping.justification) throw new Error(`${file} multi-item grouping lacks justification`);
|
|
814
|
+
if (!state.next_action?.target_artifact) throw new Error(`${file} missing state next_action target artifact`);
|
|
815
|
+
if (!probe.resume_prompt) throw new Error(`${file} missing resume prompt`);
|
|
816
|
+
if ("resolution_hints" in probe && !Array.isArray(probe.resolution_hints)) throw new Error(`${file} resolution_hints must be an array when present`);
|
|
817
|
+
for (const [hintIndex, hint] of (probe.resolution_hints || []).entries()) {
|
|
818
|
+
const missingHintFields = ["gap_id", "claim_id", "reason_code", "blocked_refs", "resolve_at", "required_evidence", "fallback_policy_id", "summary"].filter((field) => !(field in hint));
|
|
819
|
+
if (missingHintFields.length) throw new Error(`${file} resolution_hints[${hintIndex}] missing fields: ${missingHintFields.join(", ")}`);
|
|
820
|
+
if (!Array.isArray(hint.blocked_refs)) throw new Error(`${file} resolution_hints[${hintIndex}].blocked_refs must be an array`);
|
|
821
|
+
if (!Array.isArray(hint.required_evidence)) throw new Error(`${file} resolution_hints[${hintIndex}].required_evidence must be an array`);
|
|
822
|
+
if (!hint.resolve_at?.step) throw new Error(`${file} resolution_hints[${hintIndex}] missing resolve_at.step`);
|
|
823
|
+
}
|
|
824
|
+
});
|
|
825
|
+
const [happy, resume, productChain, direct, missing, stale, empty, baselineHint] = data;
|
|
826
|
+
if (happy.probe_record.next_step !== "plan-work") throw new Error("happy path should route to plan-work");
|
|
827
|
+
if (resume.probe_record.next_step !== "review-work") throw new Error("mid-work resume should route to review-work");
|
|
828
|
+
if (productChain.probe_record.next_step !== "design-probe") throw new Error("product-level build should route pull-work to design-probe");
|
|
829
|
+
if (direct.probe_record.automation_mode !== "manual") throw new Error("direct primitive fixture should stay in manual mode");
|
|
830
|
+
if (missing.probe_record.route_reason !== "decision_gap -> design-probe") throw new Error("missing pre-step should route decision_gap to design-probe");
|
|
831
|
+
if (stale.probe_record.next_step !== "pickup-probe") throw new Error("stale continuation should require fresh pickup-probe");
|
|
832
|
+
if (empty.probe_record.next_step !== "builder-shape") throw new Error("empty board should route back to Builder Kit shape");
|
|
833
|
+
const baselineProbe = baselineHint.probe_record;
|
|
834
|
+
if (baselineProbe.probe_status !== "accepted_gap") throw new Error("baseline freshness fixture should be an accepted gap");
|
|
835
|
+
const baselineResolutionHint = baselineProbe.resolution_hints?.find((hint) => hint.gap_id === "revision_freshness_not_verified");
|
|
836
|
+
if (!baselineResolutionHint) throw new Error("baseline freshness fixture missing revision_freshness_not_verified resolution hint");
|
|
837
|
+
if (baselineResolutionHint.claim_id !== "planning.baseline.current") throw new Error("baseline hint should identify planning.baseline.current claim");
|
|
838
|
+
if (baselineResolutionHint.reason_code !== "missing_planned_base_sha") throw new Error("baseline hint should identify missing_planned_base_sha reason");
|
|
839
|
+
const blockedRefs = new Set(baselineResolutionHint.blocked_refs.map((ref) => `${ref.kind}:${ref.id}`));
|
|
840
|
+
for (const ref of ["acceptance_criterion:AC2", "workflow_gate:plan-work.readiness", "flow_step:builder.build.plan"]) {
|
|
841
|
+
if (!blockedRefs.has(ref)) throw new Error(`baseline hint missing blocked ref ${ref}`);
|
|
842
|
+
}
|
|
843
|
+
if (baselineResolutionHint.resolve_at.step !== "pickup-probe") throw new Error("baseline hint should resolve at pickup-probe");
|
|
844
|
+
const evidenceById = new Map(baselineResolutionHint.required_evidence.map((evidence) => [evidence.id, evidence]));
|
|
845
|
+
for (const evidenceId of ["current_target_ref_sha", "provider_history_source_artifact"]) {
|
|
846
|
+
if (!evidenceById.has(evidenceId)) throw new Error(`baseline hint missing required evidence id ${evidenceId}`);
|
|
847
|
+
}
|
|
848
|
+
const targetEvidence = evidenceById.get("current_target_ref_sha");
|
|
849
|
+
if (targetEvidence.ref !== "main" || !targetEvidence.sha) throw new Error("baseline hint current target evidence should include ref and SHA");
|
|
850
|
+
const providerEvidence = evidenceById.get("provider_history_source_artifact");
|
|
851
|
+
if (providerEvidence.kind !== "provider_history" || !providerEvidence.source_artifact) throw new Error("baseline hint provider evidence should include provider history and source artifact");
|
|
852
|
+
if (!baselineResolutionHint.fallback_policy_id || !baselineResolutionHint.fallback_policy) throw new Error("baseline hint should name a fallback policy");
|
|
853
|
+
if (baselineResolutionHint.fallback_policy.status !== "accepted_gap") throw new Error("baseline fallback policy should preserve accepted gap status");
|
|
854
|
+
if (!baselineResolutionHint.fallback_policy.requires_provider_history) throw new Error("baseline fallback policy should require provider history");
|
|
855
|
+
if (!baselineResolutionHint.fallback_policy.baseline?.startsWith("main@")) throw new Error("baseline fallback policy should include explicit main baseline");
|
|
856
|
+
const boundary = baselineProbe.flow_boundary || {};
|
|
857
|
+
for (const field of ["builder_kit_owns", "flow_agents_owns", "flow_owns"]) {
|
|
858
|
+
if (!boundary[field]) throw new Error(`baseline freshness fixture missing flow boundary marker ${field}`);
|
|
859
|
+
}
|
|
860
|
+
NODE
|
|
861
|
+
pass "Builder Kit workflow state fixtures are structurally resumable"
|
|
862
|
+
else
|
|
863
|
+
fail "Builder Kit workflow state fixtures are structurally resumable"
|
|
864
|
+
fi
|
|
865
|
+
|
|
866
|
+
echo ""
|
|
867
|
+
echo "--- plan-work ---"
|
|
868
|
+
require_text "$PLAN_WORK" 'Direct `plan-work` remains a standalone planning primitive' "plan-work preserves direct primitive use"
|
|
869
|
+
require_text "$PLAN_WORK" 'When `plan-work` is invoked from the Builder Kit `build` flow' "plan-work conditionally consumes Builder Kit handoff"
|
|
870
|
+
require_text "$PLAN_WORK" 'recorded pickup Probe decisions' "plan-work consumes recorded pickup Probe decisions"
|
|
871
|
+
require_text "$PLAN_WORK" 'accepted gaps' "plan-work consumes accepted gaps"
|
|
872
|
+
require_text "$PLAN_WORK" 'Only consume Builder Kit Probe `resolution_hints` in those Builder Kit build/deliver/pickup contexts' "plan-work keeps resolution hints Builder Kit scoped"
|
|
873
|
+
require_text "$PLAN_WORK" 'Direct primitive `plan-work` remains valid without Builder Kit-specific `resolution_hints`' "plan-work preserves direct primitive without resolution hints"
|
|
874
|
+
require_text "$PLAN_WORK" 'revision_freshness_not_verified' "plan-work consumes baseline freshness resolution hint"
|
|
875
|
+
require_text "$PLAN_WORK" 'planning\.baseline\.current' "plan-work consumes Builder Kit baseline claim hint"
|
|
876
|
+
require_text "$PLAN_WORK" 'explicit accepted fallback baseline' "plan-work requires explicit fallback for missing baseline hint"
|
|
877
|
+
require_text "$PLAN_WORK" 'route `decision_gap` back to `design-probe`' "plan-work routes missing Builder Kit decisions back"
|
|
878
|
+
|
|
879
|
+
echo ""
|
|
880
|
+
echo "--- review-work ---"
|
|
881
|
+
require_text "$REVIEW_WORK" '^name: "review-work"$' "frontmatter name"
|
|
882
|
+
require_text "$REVIEW_WORK" 'tool-code-reviewer' "delegates to code reviewer"
|
|
883
|
+
require_text "$REVIEW_WORK" 'tool-security-reviewer' "conditionally delegates to security reviewer"
|
|
884
|
+
require_text "$REVIEW_WORK" 'tool-dependencies-updater' "delegates dependency review to dependencies updater"
|
|
885
|
+
require_text "$REVIEW_WORK" 'package\.json' "dependency review triggers on package manifests"
|
|
886
|
+
require_text "$REVIEW_WORK" 'requirements\.txt' "dependency review triggers on Python manifests"
|
|
887
|
+
require_text "$REVIEW_WORK" 'pyproject\.toml' "dependency review triggers on pyproject manifests"
|
|
888
|
+
require_text "$REVIEW_WORK" 'Cargo\.lock' "dependency review triggers on lockfiles"
|
|
889
|
+
require_text "$REVIEW_WORK" 'package-lock\.json' "dependency review triggers on npm lockfiles"
|
|
890
|
+
require_text "$REVIEW_WORK" 'lockfiles' "dependency review names lockfile triggers"
|
|
891
|
+
require_text "$REVIEW_WORK" 'Terraform' "IaC review triggers on Terraform"
|
|
892
|
+
require_text "$REVIEW_WORK" 'Kubernetes' "IaC review triggers on Kubernetes"
|
|
893
|
+
require_text "$REVIEW_WORK" 'Dockerfiles' "IaC review triggers on Dockerfiles"
|
|
894
|
+
require_text "$REVIEW_WORK" 'Helm' "IaC review triggers on Helm"
|
|
895
|
+
require_text "$REVIEW_WORK" 'GitHub Actions' "IaC review triggers on GitHub Actions"
|
|
896
|
+
require_text "$REVIEW_WORK" 'policy-as-code|policy as code' "IaC review triggers on policy as code"
|
|
897
|
+
require_text "$REVIEW_WORK" 'Checkov' "IaC scanner guidance names Checkov"
|
|
898
|
+
require_text "$REVIEW_WORK" 'tfsec' "IaC scanner guidance names tfsec"
|
|
899
|
+
require_text "$REVIEW_WORK" 'Trivy' "IaC scanner guidance names Trivy"
|
|
900
|
+
require_text "$REVIEW_WORK" 'Semgrep' "IaC scanner guidance names Semgrep"
|
|
901
|
+
require_text "$REVIEW_WORK" 'do not hard-require one vendor|no single vendor is required' "IaC scanner guidance is vendor-neutral"
|
|
902
|
+
require_text "$REVIEW_WORK" 'not_verified' "records missing review lanes as not_verified"
|
|
903
|
+
require_text "$REVIEW_WORK" 'critique.json' "records critique sidecar"
|
|
904
|
+
require_text "$REVIEW_WORK" 'Verification is not critique' "separates review from verification"
|
|
905
|
+
require_text "$ARTIFACT_CONTRACT" '`state.phase` is the canonical lifecycle vocabulary' "artifact contract identifies canonical state.phase lifecycle vocabulary"
|
|
906
|
+
require_text "$ARTIFACT_CONTRACT" '\| `state\.phase` \| `idea`, `backlog`, `pickup`, `planning`, `execution`, `verification`, `goal_fit`, `evidence`, `release`, `learning`, `done` \|' "artifact contract lists canonical state.phase values without review"
|
|
907
|
+
reject_text "$ARTIFACT_CONTRACT" '\| `state\.phase` \|.*`review`' "artifact contract does not list review as a canonical state.phase"
|
|
908
|
+
require_text "$ARTIFACT_CONTRACT" 'review-work is represented by the required critique artifact/sink' "artifact contract maps review-work to critique artifact/sink"
|
|
909
|
+
require_text "$REVIEW_WORK" '--phase execution' "review-work handoff keeps sidecar phase in execution"
|
|
910
|
+
require_text "$REVIEW_WORK" 'record-critique' "review-work supports direct critique recording"
|
|
911
|
+
require_text "$REVIEW_WORK" 'import-critique' "review-work imports review artifacts into critique sink"
|
|
912
|
+
require_text "$REVIEW_WORK" 'critique artifact/sink' "review-work records results through critique artifact/sink"
|
|
913
|
+
require_text "$REVIEW_CONTRACT" 'Review and verification are separate gates' "review contract separates review and verification"
|
|
914
|
+
require_text "$REVIEW_CONTRACT" 'Review is not a canonical `state.phase` value' "review contract rejects review as canonical state.phase"
|
|
915
|
+
require_text "$REVIEW_CONTRACT" 'configured critique artifact/sink' "review contract requires configured critique artifact/sink"
|
|
916
|
+
require_text "$REVIEW_CONTRACT" 'Code.*Triggers|Lane.*Triggers' "review contract documents lane triggers"
|
|
917
|
+
require_text "$REVIEW_CONTRACT" 'Security.*Authentication|Security.*auth' "review contract documents security lane"
|
|
918
|
+
require_text "$REVIEW_CONTRACT" 'Dependency.*Package manifests|Dependency.*dependency manifests' "review contract documents dependency lane"
|
|
919
|
+
require_text "$REVIEW_CONTRACT" 'Architecture/standards' "review contract documents architecture/standards lane"
|
|
920
|
+
require_text "$REVIEW_CONTRACT" 'IaC/policy' "review contract documents IaC/policy lane"
|
|
921
|
+
require_text "$REVIEW_CONTRACT" 'package\.json' "review contract dependency lane includes package manifests"
|
|
922
|
+
require_text "$REVIEW_CONTRACT" 'package-lock\.json' "review contract dependency lane includes npm lockfiles"
|
|
923
|
+
require_text "$REVIEW_CONTRACT" 'lockfiles' "review contract dependency lane includes lockfiles"
|
|
924
|
+
require_text "$REVIEW_CONTRACT" 'Checkov' "review contract scanner guidance names Checkov"
|
|
925
|
+
require_text "$REVIEW_CONTRACT" 'tfsec' "review contract scanner guidance names tfsec"
|
|
926
|
+
require_text "$REVIEW_CONTRACT" 'Trivy' "review contract scanner guidance names Trivy"
|
|
927
|
+
require_text "$REVIEW_CONTRACT" 'Semgrep' "review contract scanner guidance names Semgrep"
|
|
928
|
+
require_text "$REVIEW_CONTRACT" 'no single vendor is required|vendor-neutral' "review contract scanner guidance is vendor-neutral"
|
|
929
|
+
require_text "$REVIEW_CONTRACT" 'not_verified' "review contract records unavailable lanes as not_verified"
|
|
930
|
+
require_text "$TOOL_CODE_REVIEWER" 'architecture' "code reviewer covers architecture"
|
|
931
|
+
require_text "$TOOL_CODE_REVIEWER" 'context/contracts/review-contract.md' "code reviewer references review contract"
|
|
932
|
+
|
|
933
|
+
echo ""
|
|
934
|
+
echo "--- evidence-gate ---"
|
|
935
|
+
require_text "$EVIDENCE" '^name: "evidence-gate"$' "frontmatter name"
|
|
936
|
+
require_text "$EVIDENCE" 'Do not fix code' "report-only gate"
|
|
937
|
+
require_text "$EVIDENCE" 'NOT_VERIFIED' "treats NOT_VERIFIED as first-class"
|
|
938
|
+
require_text "$EVIDENCE" 'Scope And Integrity Check' "checks scope and process integrity"
|
|
939
|
+
require_text "$EVIDENCE" 'Tier 0' "defines evidence tiers"
|
|
940
|
+
require_text "$EVIDENCE" 'passed-after-rerun|passed after rerun' "treats rerun green as degraded confidence"
|
|
941
|
+
require_text "$EVIDENCE" 'Publish Change Gate' "evidence-gate defines publish-change gate"
|
|
942
|
+
require_text "$EVIDENCE" 'Evidence Gate is not Release Readiness' "evidence-gate distinguishes release readiness"
|
|
943
|
+
require_text "$EVIDENCE" 'commit the verified diff' "evidence-gate requires committing verified diff"
|
|
944
|
+
require_text "$EVIDENCE" 'provider change record' "evidence-gate requires provider change publication"
|
|
945
|
+
require_text "$EVIDENCE" 'no-provider-change reason' "evidence-gate allows explicit no-provider-change reason"
|
|
946
|
+
require_text "$EVIDENCE" 'provider checks' "evidence-gate requires provider check evidence"
|
|
947
|
+
require_text "$EVIDENCE" 'Command/Test Evidence' "evidence-gate maps ACs to command/test evidence"
|
|
948
|
+
require_text "$EVIDENCE" 'Source Evidence / Permalinks' "evidence-gate maps ACs to source permalinks"
|
|
949
|
+
require_text "$EVIDENCE" 'prose-only claims' "evidence-gate rejects prose-only behavior evidence"
|
|
950
|
+
require_text "$EVIDENCE" 'GitHub PRs as the first `ChangeProvider` adapter example' "evidence-gate keeps GitHub PR as adapter example"
|
|
951
|
+
|
|
952
|
+
echo ""
|
|
953
|
+
echo "--- release-readiness ---"
|
|
954
|
+
require_text "$RELEASE" '^name: "release-readiness"$' "frontmatter name"
|
|
955
|
+
require_text "$RELEASE" 'Do not fix code' "report-only release gate"
|
|
956
|
+
require_text "$RELEASE" 'committed, pushed, and represented by a provider change record' "release-readiness requires published provider change"
|
|
957
|
+
require_text "$RELEASE" 'Release Readiness is not Evidence Gate' "release-readiness distinguishes evidence gate"
|
|
958
|
+
require_text "$RELEASE" 'do not make a merge/release/deploy decision from local verification alone' "release-readiness rejects local-only evidence"
|
|
959
|
+
require_text "$RELEASE" 'Missing provider checks also return `HOLD`' "release-readiness holds on missing provider checks by risk"
|
|
960
|
+
require_text "$RELEASE" 'GitHub PRs remain the first `ChangeProvider` adapter example' "release-readiness keeps GitHub PR as adapter example"
|
|
961
|
+
require_text "$RELEASE" 'Do not deploy unless the user explicitly asks' "prevents implicit deploys"
|
|
962
|
+
require_text "$RELEASE" 'rollback_plan' "requires rollback plan"
|
|
963
|
+
require_text "$RELEASE" 'observability_plan' "requires observability plan"
|
|
964
|
+
require_text "$RELEASE" 'post_deploy_checks' "requires post-deploy checks"
|
|
965
|
+
require_text "$RELEASE" 'final_acceptance_docs' "requires final acceptance docs"
|
|
966
|
+
require_text "$RELEASE" 'Docs Gate' "requires docs gate"
|
|
967
|
+
require_text "$RELEASE" 'MERGE' "defines MERGE decision"
|
|
968
|
+
require_text "$RELEASE" 'RELEASE' "defines RELEASE decision"
|
|
969
|
+
require_text "$RELEASE" 'DEPLOY' "defines DEPLOY decision"
|
|
970
|
+
require_text "$RELEASE" 'HOLD' "defines HOLD decision"
|
|
971
|
+
require_text "$RELEASE" 'ROLLBACK_REQUIRED' "defines ROLLBACK_REQUIRED decision"
|
|
972
|
+
|
|
973
|
+
echo ""
|
|
974
|
+
echo "--- learning-review ---"
|
|
975
|
+
require_text "$LEARNING" '^name: "learning-review"$' "frontmatter name"
|
|
976
|
+
require_text "$LEARNING" 'Do not implement fixes' "report-only learning review"
|
|
977
|
+
require_text "$LEARNING" 'observed facts|facts' "separates facts from interpretation"
|
|
978
|
+
require_text "$LEARNING" 'followups' "requires follow-up routing"
|
|
979
|
+
require_text "$LEARNING" 'knowledge_updates' "requires durable knowledge update tracking"
|
|
980
|
+
require_text "$LEARNING" 'docs_promotion' "requires docs promotion tracking"
|
|
981
|
+
require_text "$LEARNING" 'Docs Gate' "requires learning docs gate"
|
|
982
|
+
require_text "$LEARNING" 'intended behavior.*observed behavior|observed behavior.*intended behavior' "requires intended-vs-observed correction comparison"
|
|
983
|
+
require_text "$LEARNING" 'correction\.needed: false' "defines clean no-correction records"
|
|
984
|
+
require_text "$LEARNING" 'correction\.needed: true' "defines correction-needed mismatch records"
|
|
985
|
+
require_text "$LEARNING" 'correction\.recurrence_key' "requires stable correction recurrence key"
|
|
986
|
+
require_text "$LEARNING" 'correction\.type' "requires typed correction classification"
|
|
987
|
+
require_text "$LEARNING" 'prevention route|no-change rationale|no_change_rationale' "requires correction prevention or no-change rationale"
|
|
988
|
+
require_text "$LEARNING" 'do not invent|not an invented lesson' "prevents invented lessons for clean runs"
|
|
989
|
+
require_text "$LEARNING" 'LEARNED' "defines LEARNED verdict"
|
|
990
|
+
require_text "$LEARNING" 'FOLLOWUP_REQUIRED' "defines FOLLOWUP_REQUIRED verdict"
|
|
991
|
+
require_text "$LEARNING" 'BLOCKED' "defines BLOCKED verdict"
|
|
992
|
+
|
|
993
|
+
echo ""
|
|
994
|
+
echo "--- map/session ---"
|
|
995
|
+
require_text "$MAP" 'idea-to-backlog' "map includes idea-to-backlog"
|
|
996
|
+
require_text "$MAP" 'builder-shape' "map includes builder-shape"
|
|
997
|
+
require_text "$MAP" 'workflow-usage-guide.md' "map links usage guide"
|
|
998
|
+
require_text "$MAP" 'Phase Composition' "map includes phase composition"
|
|
999
|
+
require_text "$MAP" 'shape-work' "map names future shape-work primitive"
|
|
1000
|
+
require_text "$MAP" 'scope-and-integrity-check' "map names future integrity primitive"
|
|
1001
|
+
require_text "$USAGE_GUIDE" 'Use idea-to-backlog' "usage guide explains idea-to-backlog"
|
|
1002
|
+
require_text "$USAGE_GUIDE" 'Use Builder Kit shape' "usage guide explains Builder Kit shape"
|
|
1003
|
+
require_text "$USAGE_GUIDE" 'product-level entry point' "usage guide explains product-level entry points"
|
|
1004
|
+
require_text "$USAGE_GUIDE" 'without making you type the primitive name' "usage guide explains Builder Kit shape primitive hiding"
|
|
1005
|
+
require_text "$USAGE_GUIDE" 'kits/builder/flows/shape.flow.json' "usage guide links Builder Kit shape flow"
|
|
1006
|
+
require_text "$USAGE_GUIDE" 'Use pull-work' "usage guide explains pull-work"
|
|
1007
|
+
require_text "$USAGE_GUIDE" 'pull-work -> pickup Probe / design-probe -> plan-work' "usage guide shows pickup Probe before planning"
|
|
1008
|
+
require_text "$USAGE_GUIDE" 'build path is `pull-work -> design-probe -> plan`' "usage guide names Builder Kit build path"
|
|
1009
|
+
require_text "$USAGE_GUIDE" 'Builder Kit build is the product-level entry point' "usage guide explains Builder Kit build entry point"
|
|
1010
|
+
require_text "$USAGE_GUIDE" 'can allow queue inspection, but it cannot authorize planning a newly selected item after merge' "usage guide blocks stale continuation"
|
|
1011
|
+
require_text "$USAGE_GUIDE" 'If the board is empty' "usage guide routes empty board to shape"
|
|
1012
|
+
require_text "$USAGE_GUIDE" '`probe_status`' "usage guide records probe status"
|
|
1013
|
+
require_text "$USAGE_GUIDE" '`probe_artifact_ref`' "usage guide records probe artifact ref"
|
|
1014
|
+
require_text "$USAGE_GUIDE" 'Primitive recovery behavior' "usage guide explains primitive recovery"
|
|
1015
|
+
require_text "$USAGE_GUIDE" 'Per-item pickup Probe behavior' "usage guide explains per-item probe behavior"
|
|
1016
|
+
require_text "$USAGE_GUIDE" 'dependency freshness' "usage guide names pickup Probe dependency freshness"
|
|
1017
|
+
require_text "$USAGE_GUIDE" 'acceptance criteria quality' "usage guide names pickup Probe acceptance quality"
|
|
1018
|
+
require_text "$USAGE_GUIDE" 'accepted gaps' "usage guide records accepted gaps"
|
|
1019
|
+
require_text "$USAGE_GUIDE" 'expected modified files' "usage guide records expected modified files"
|
|
1020
|
+
require_text "$USAGE_GUIDE" 'Only ask an alignment question when repo/provider context still leaves a genuine decision gap' "usage guide limits alignment questions"
|
|
1021
|
+
require_text "$USAGE_GUIDE" 'planned_base_ref' "usage guide checks planned base ref during pickup"
|
|
1022
|
+
require_text "$USAGE_GUIDE" 'planned_base_sha' "usage guide checks planned base sha during pickup"
|
|
1023
|
+
require_text "$USAGE_GUIDE" 'contract_drift' "usage guide routes contract drift to alignment"
|
|
1024
|
+
require_text "$USAGE_GUIDE" 'Use review-work' "usage guide explains review-work"
|
|
1025
|
+
require_text "$USAGE_GUIDE" 'Use evidence-gate' "usage guide explains evidence-gate"
|
|
1026
|
+
require_text "$USAGE_GUIDE" 'Publish The Verified Change' "usage guide includes publish-change step"
|
|
1027
|
+
require_text "$USAGE_GUIDE" 'commit the verified diff' "usage guide requires committing verified diff"
|
|
1028
|
+
require_text "$USAGE_GUIDE" 'open or update the provider change record' "usage guide requires opening or updating provider change record"
|
|
1029
|
+
require_text "$USAGE_GUIDE" 'For GitHub, the `ChangeProvider` record is usually a pull request' "usage guide keeps GitHub PR as adapter example"
|
|
1030
|
+
require_text "$USAGE_GUIDE" 'Use release-readiness' "usage guide explains release-readiness"
|
|
1031
|
+
require_text "$USAGE_GUIDE" 'Use learning-review' "usage guide explains learning-review"
|
|
1032
|
+
require_text "$USAGE_GUIDE" 'correction\.needed: false' "usage guide documents clean no-correction learning closeout"
|
|
1033
|
+
require_text "$USAGE_GUIDE" 'correction\.needed: true' "usage guide documents correction-needed learning closeout"
|
|
1034
|
+
require_text "$USAGE_GUIDE" 'correction rate' "usage guide names future correction rate metric"
|
|
1035
|
+
require_text "$USAGE_GUIDE" 'resolved corrections' "usage guide names future resolved corrections metric"
|
|
1036
|
+
require_text "$USAGE_GUIDE" 'repeated recurrence keys' "usage guide names future repeated recurrence keys metric"
|
|
1037
|
+
require_text "$USAGE_GUIDE" 'stale unresolved corrections' "usage guide names future stale unresolved corrections metric"
|
|
1038
|
+
require_text "$USAGE_GUIDE" 'clean-run rate' "usage guide names future clean-run rate metric"
|
|
1039
|
+
require_text "$ARTIFACT_LIFECYCLE_DOC" 'Source/Sink storage' "artifact lifecycle keeps Source/Sink out of this correction slice"
|
|
1040
|
+
require_text "$EVAL_STRATEGY" 'correction-needed' "eval strategy covers correction/no-correction semantics"
|
|
1041
|
+
require_text "$USAGE_GUIDE" 'dogfood-pass' "usage guide explains dogfood-pass"
|
|
1042
|
+
require_text "$USAGE_GUIDE" 'Goal Fit' "usage guide explains goal fit"
|
|
1043
|
+
require_text "$USAGE_GUIDE" 'promote-workflow-artifact' "usage guide explains docs promotion helper"
|
|
1044
|
+
require_text "$USAGE_GUIDE" 'thinnest meaningful slice' "usage guide explains thin-slice guardrail"
|
|
1045
|
+
require_text "$USAGE_GUIDE" 'bundle justification' "usage guide explains bundle guardrail"
|
|
1046
|
+
require_text "$USAGE_GUIDE" 'route reason' "usage guide requires route reason in handoff"
|
|
1047
|
+
require_text "$USAGE_GUIDE" 'next action' "usage guide requires next action in handoff"
|
|
1048
|
+
require_text "$USAGE_GUIDE" 'missing_evidence' "usage guide documents missing evidence route-back"
|
|
1049
|
+
require_text "$USAGE_GUIDE" 'implementation_defect' "usage guide documents implementation defect route-back"
|
|
1050
|
+
require_text "$USAGE_GUIDE" 'plan_gap' "usage guide documents plan gap route-back"
|
|
1051
|
+
require_text "$USAGE_GUIDE" 'decision_gap' "usage guide documents decision gap route-back"
|
|
1052
|
+
require_text "$USAGE_GUIDE" 'pickup or planning alignment gaps, `decision_gap -> design-probe` means returning to the pickup Probe' "usage guide interprets decision gap route-back"
|
|
1053
|
+
require_text "$BUILDER_BUILD_FLOW" '"on_route_back"' "Builder build flow declares route-back mappings"
|
|
1054
|
+
require_text "$BUILDER_BUILD_FLOW" '"route_back_policy"' "Builder build flow declares route-back policy"
|
|
1055
|
+
require_text "$BUILDER_BUILD_FLOW" '"missing_evidence": "verify"' "Builder build flow routes missing evidence to verify"
|
|
1056
|
+
require_text "$BUILDER_BUILD_FLOW" '"implementation_defect": "execute"' "Builder build flow routes implementation defects to execute"
|
|
1057
|
+
require_text "$BUILDER_BUILD_FLOW" '"plan_gap": "plan"' "Builder build flow routes plan gaps to plan"
|
|
1058
|
+
require_text "$BUILDER_BUILD_FLOW" '"decision_gap": "design-probe"' "Builder build flow routes decision gaps to design-probe"
|
|
1059
|
+
require_text "$BUILDER_BUILD_FLOW" '"pull-work", "next": "design-probe"' "Builder build flow routes pull-work to design-probe"
|
|
1060
|
+
require_text "$BUILDER_BUILD_FLOW" '"design-probe", "next": "plan"' "Builder build flow routes design-probe to plan"
|
|
1061
|
+
require_text "$BUILDER_BUILD_FLOW" '"pickup-probe-readiness"' "Builder build flow requires pickup Probe readiness"
|
|
1062
|
+
require_text "$BUILDER_BUILD_FLOW" '"probe-decisions-or-accepted-gaps"' "Builder build flow requires decisions or accepted gaps"
|
|
1063
|
+
require_text "$BUILDER_BUILD_FLOW" 'dependency freshness' "Builder build flow gate checks dependency freshness"
|
|
1064
|
+
require_text "$BUILDER_BUILD_FLOW" 'acceptance criteria quality' "Builder build flow gate checks acceptance quality"
|
|
1065
|
+
require_text "$BUILDER_BUILD_FLOW" 'provider state' "Builder build flow gate checks provider state"
|
|
1066
|
+
require_text "$BUILDER_BUILD_FLOW" 'stop-short risks' "Builder build flow gate checks stop-short risks"
|
|
1067
|
+
require_text "$BUILDER_BUILD_FLOW" 'Planning is blocked until pickup Probe decisions are captured' "Builder build flow blocks planning until Probe evidence"
|
|
1068
|
+
require_text "$BUILDER_BUILD_FLOW" 'probe_status' "Builder build flow names probe status"
|
|
1069
|
+
require_text "$BUILDER_BUILD_FLOW" 'probe_artifact_ref' "Builder build flow names probe artifact ref"
|
|
1070
|
+
require_text "$BUILDER_BUILD_FLOW" 'Stale broad continuation language after a merge is not sufficient' "Builder build flow blocks stale broad continuation"
|
|
1071
|
+
if node - "$BUILDER_BUILD_FLOW" <<'NODE'; then
|
|
1072
|
+
const fs = require("node:fs");
|
|
1073
|
+
const flow = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
1074
|
+
const expectations = Object.values(flow.gates || {}).flatMap((gate) => gate.expects || []);
|
|
1075
|
+
if (!expectations.length) throw new Error("no Builder Kit gate expectations found");
|
|
1076
|
+
for (const expectation of expectations) {
|
|
1077
|
+
if (expectation.kind !== "surface.claim") throw new Error(`${expectation.id || "<unknown>"} is not a surface.claim expectation`);
|
|
1078
|
+
if (!expectation.claim?.type || !expectation.claim?.accepted_statuses) throw new Error(`${expectation.id || "<unknown>"} is missing claim type or accepted statuses`);
|
|
1079
|
+
}
|
|
1080
|
+
const flowText = JSON.stringify(flow).toLowerCase();
|
|
1081
|
+
for (const term of ["veritas", "trust_provider", "trust-provider", "provider_name", "provider_ref", "veritas_policy", "veritas_readiness"]) {
|
|
1082
|
+
if (flowText.includes(term)) throw new Error(`provider-specific trust field leaked into Builder Kit build flow: ${term}`);
|
|
1083
|
+
}
|
|
1084
|
+
NODE
|
|
1085
|
+
pass "Builder build flow keeps provider-neutral surface.claim expectations"
|
|
1086
|
+
else
|
|
1087
|
+
fail "Builder build flow keeps provider-neutral surface.claim expectations"
|
|
1088
|
+
fi
|
|
1089
|
+
require_text "$MAP" 'pull-work' "map includes pull-work"
|
|
1090
|
+
require_text "$MAP" 'pickup Probe before planning' "map documents pickup Probe before planning"
|
|
1091
|
+
require_text "$MAP" 'review-work' "map includes review-work"
|
|
1092
|
+
require_text "$MAP" 'evidence-gate' "map includes evidence-gate"
|
|
1093
|
+
require_text "$MAP" 'release-readiness' "map includes release-readiness"
|
|
1094
|
+
require_text "$MAP" 'learning-review' "map includes learning-review"
|
|
1095
|
+
require_text "$MAP" 'Publish Change Gate' "map includes publish-change gate"
|
|
1096
|
+
require_text "$MAP" 'commit/branch/PR/CI links' "map captures PR and CI links before release"
|
|
1097
|
+
require_text "$CONTEXT_MAP" 'Repository Shape' "context map includes repo shape"
|
|
1098
|
+
require_text "$CONTEXT_MAP" 'Core Commands' "context map includes commands"
|
|
1099
|
+
require_text "$CONTEXT_MAP" 'Workflow Sidecars' "context map includes sidecars"
|
|
1100
|
+
require_text "$CONTEXT_MAP" 'packaging/packs.json' "context map includes pack manifest"
|
|
1101
|
+
require_text "$PACKS_MANIFEST" '"name": "core"' "pack manifest defines core pack"
|
|
1102
|
+
require_text "$PACKS_MANIFEST" '"default": true' "pack manifest defines default pack"
|
|
1103
|
+
require_text "$PACKS_MANIFEST" '"name": "development"' "pack manifest defines development pack"
|
|
1104
|
+
require_text "$PACKS_MANIFEST" '"eval-rebuild"' "pack manifest includes eval-rebuild"
|
|
1105
|
+
require_text "$PACKS_MANIFEST" '"explore"' "pack manifest includes explore"
|
|
1106
|
+
require_text "$ROOT/scripts/build-universal-bundles.js" 'FLOW_AGENTS_PACKS' "bundle installer supports pack filtering"
|
|
1107
|
+
require_text "$ROOT/evals/integration/test_bundle_install.sh" 'core-pack install keeps core agents' "bundle install test covers pack filtering"
|
|
1108
|
+
require_text "$CONTEXT_MAP" 'Context Loading Rules' "context map includes loading rules"
|
|
1109
|
+
require_text "$PAGES_INDEX" 'context-map.html' "docs index links context map"
|
|
1110
|
+
require_text "$PAGES_INDEX" 'veritas-integration.html' "docs index links Veritas boundary"
|
|
1111
|
+
require_text "$PAGES_LAYOUT" 'context-map.html' "docs layout links context map"
|
|
1112
|
+
require_text "$PAGES_LAYOUT" 'veritas-integration.html' "docs layout links Veritas boundary"
|
|
1113
|
+
require_text "$MAP" 'thinnest meaningful slice' "map captures thin-slice guardrail"
|
|
1114
|
+
require_text "$MAP" 'Phase Composition' "docs capture workflow phase composition"
|
|
1115
|
+
require_text "$IDEA" 'thinnest meaningful slice' "skills capture thin-slice guardrail"
|
|
1116
|
+
require_text "$PULL" 'worktree' "skills capture worktree isolation"
|
|
1117
|
+
require_text "$EVIDENCE" 'Evidence Tiers' "skills capture evidence tiers"
|
|
1118
|
+
require_text "$MAP" 'release-readiness' "docs capture release-readiness"
|
|
1119
|
+
require_text "$MAP" 'learning-review' "docs capture learning-review"
|
|
1120
|
+
require_text "$DELIVER" 'dogfood-pass' "deliver skill adopts dogfood-pass"
|
|
1121
|
+
require_text "$LEARNING" 'dogfood-pass' "learning-review skill adopts dogfood-pass"
|
|
1122
|
+
require_text "$EVAL_STRATEGY" 'Activation-only behavioral evals' "eval strategy distinguishes activation evals"
|
|
1123
|
+
require_text "$EVAL_STRATEGY" 'Artifact-quality evals' "eval strategy distinguishes artifact evals"
|
|
1124
|
+
require_text "$EVAL_STRATEGY" 'Hook-influence behavioral cases' "eval strategy documents hook influence cases"
|
|
1125
|
+
require_text "$EVAL_STRATEGY" 'controlled writes to `.flow-agents/<slug>/\*\.md`' "artifact evals allow controlled todo writes"
|
|
1126
|
+
require_text "$EVAL_STRATEGY" 'test_workflow_artifacts.sh' "eval strategy documents artifact E2E integration"
|
|
1127
|
+
require_text "$EVAL_STRATEGY" 'HOLD' "eval strategy uses release-readiness HOLD decision"
|
|
1128
|
+
require_text "$SHARED_CONTRACTS_DOC" 'Codex, Kiro, Claude Code' "shared contracts doc captures cross-distribution scope"
|
|
1129
|
+
require_text "$PAGES_WORKFLOW" 'actions/checkout@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "Pages workflow checks out with an immutable SHA pin and version comment"
|
|
1130
|
+
require_text "$PAGES_WORKFLOW" 'actions/configure-pages@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "Pages workflow configures Pages with an immutable SHA pin and version comment"
|
|
1131
|
+
require_text "$PAGES_WORKFLOW" 'actions/jekyll-build-pages@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "Pages workflow builds Jekyll docs with an immutable SHA pin and version comment"
|
|
1132
|
+
require_text "$PAGES_WORKFLOW" 'actions/upload-pages-artifact@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "Pages workflow uploads docs with an immutable SHA pin and version comment"
|
|
1133
|
+
require_text "$PAGES_WORKFLOW" 'actions/deploy-pages@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "Pages workflow deploys docs with an immutable SHA pin and version comment"
|
|
1134
|
+
require_file "$CI_WORKFLOW" "Flow Agents CI workflow"
|
|
1135
|
+
require_file "$CI_BASELINE" "Flow Agents CI baseline wrapper"
|
|
1136
|
+
require_text "$CI_WORKFLOW" 'pull_request:' "CI workflow runs on pull requests"
|
|
1137
|
+
require_text "$CI_WORKFLOW" 'workflow_dispatch:' "CI workflow supports manual runs"
|
|
1138
|
+
require_text "$CI_WORKFLOW" 'contents: read' "CI workflow uses read-only contents permission"
|
|
1139
|
+
require_text "$CI_WORKFLOW" 'bash evals/ci/run-baseline.sh' "CI workflow runs baseline wrapper"
|
|
1140
|
+
require_text "$CI_WORKFLOW" 'source-and-static:' "CI workflow has source and static job"
|
|
1141
|
+
require_text "$CI_WORKFLOW" 'workflow-contracts:' "CI workflow has workflow contracts job"
|
|
1142
|
+
require_text "$CI_WORKFLOW" 'runtime-and-kit:' "CI workflow has runtime and kit job"
|
|
1143
|
+
require_text "$CI_WORKFLOW" 'FLOW_AGENTS_CI_LANE: source-and-static' "CI source lane is explicit"
|
|
1144
|
+
require_text "$CI_WORKFLOW" 'FLOW_AGENTS_CI_LANE: workflow-contracts' "CI workflow lane is explicit"
|
|
1145
|
+
require_text "$CI_WORKFLOW" 'FLOW_AGENTS_CI_LANE: runtime-and-kit' "CI runtime lane is explicit"
|
|
1146
|
+
require_text "$CI_WORKFLOW" 'flow-agents-ci-source-and-static' "CI uploads source lane evidence"
|
|
1147
|
+
require_text "$CI_WORKFLOW" 'flow-agents-ci-workflow-contracts' "CI uploads workflow lane evidence"
|
|
1148
|
+
require_text "$CI_WORKFLOW" 'flow-agents-ci-runtime-and-kit' "CI uploads runtime lane evidence"
|
|
1149
|
+
require_text "$CI_WORKFLOW" 'actions/checkout@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "CI workflow checks out with an immutable SHA pin and version comment"
|
|
1150
|
+
require_text "$CI_WORKFLOW" 'actions/setup-node@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "CI workflow sets up Node with an immutable SHA pin and version comment"
|
|
1151
|
+
require_text "$CI_WORKFLOW" 'actions/upload-artifact@[0-9a-f]{40} # v[0-9]+\.[0-9]+\.[0-9]+' "CI workflow uploads evidence artifacts with an immutable SHA pin and version comment"
|
|
1152
|
+
require_text "$CI_BASELINE" 'LANE_SOURCE_AND_STATIC' "CI baseline defines source and static lane"
|
|
1153
|
+
require_text "$CI_BASELINE" 'LANE_WORKFLOW_CONTRACTS' "CI baseline defines workflow contracts lane"
|
|
1154
|
+
require_text "$CI_BASELINE" 'LANE_RUNTIME_AND_KIT' "CI baseline defines runtime and kit lane"
|
|
1155
|
+
require_text "$CI_BASELINE" 'find_active_check' "CI baseline scopes individual checks to the active lane"
|
|
1156
|
+
require_text "$CI_BASELINE" 'validate_active_lane \|\| exit 2' "CI baseline validates active lane before running commands"
|
|
1157
|
+
require_text "$CI_BASELINE" 'missing CI result row' "CI baseline fails closed on missing lane rows"
|
|
1158
|
+
require_text "$CI_BASELINE" 'test_publish_change_helper.sh' "CI baseline includes publish-change helper coverage"
|
|
1159
|
+
require_text "$CI_BASELINE" 'test_bundle_install.sh' "CI baseline includes bundle install coverage"
|
|
1160
|
+
require_text "$CI_BASELINE" 'LLM acceptance evals' "CI baseline records skipped LLM acceptance"
|
|
1161
|
+
reject_text "$CI_BASELINE" 'run\.sh llm' "CI baseline does not run LLM evals by default"
|
|
1162
|
+
|
|
1163
|
+
CI_LANE_TEST_DIR="$(mktemp -d "${TMPDIR:-/tmp}/flow-agents-ci-lanes.XXXXXX")"
|
|
1164
|
+
require_status 2 "CI baseline rejects invalid lane during init" \
|
|
1165
|
+
env FLOW_AGENTS_CI_LANE=not-a-lane FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/invalid-init" bash "$CI_BASELINE" --init
|
|
1166
|
+
require_status 2 "CI baseline rejects invalid lane during check" \
|
|
1167
|
+
env FLOW_AGENTS_CI_LANE=not-a-lane FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/invalid-check" bash "$CI_BASELINE" --check content-boundary
|
|
1168
|
+
require_status 2 "CI baseline rejects invalid lane during finalize" \
|
|
1169
|
+
env FLOW_AGENTS_CI_LANE=not-a-lane FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/invalid-finalize" bash "$CI_BASELINE" --finalize
|
|
1170
|
+
require_status 2 "CI baseline rejects invalid lane during full run" \
|
|
1171
|
+
env FLOW_AGENTS_CI_LANE=not-a-lane FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/invalid-full" bash "$CI_BASELINE"
|
|
1172
|
+
require_status 2 "CI baseline rejects invalid explicit lane" \
|
|
1173
|
+
env FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/invalid-explicit-lane" bash "$CI_BASELINE" --lane not-a-lane
|
|
1174
|
+
require_status 2 "CI baseline rejects checks outside the active lane" \
|
|
1175
|
+
env FLOW_AGENTS_CI_LANE=source-and-static FLOW_AGENTS_CI_RESULTS_DIR="$CI_LANE_TEST_DIR/wrong-lane-check" bash "$CI_BASELINE" --check bundle-install-integration
|
|
1176
|
+
require_status 1 "CI baseline fails closed on missing expected lane rows" \
|
|
1177
|
+
bash -c 'FLOW_AGENTS_CI_LANE=source-and-static FLOW_AGENTS_CI_RESULTS_DIR="$1" bash "$0" --init && FLOW_AGENTS_CI_LANE=source-and-static FLOW_AGENTS_CI_RESULTS_DIR="$1" bash "$0" --finalize' "$CI_BASELINE" "$CI_LANE_TEST_DIR/missing-rows"
|
|
1178
|
+
|
|
1179
|
+
require_text "$PAGES_INDEX" 'mermaid' "docs index includes Mermaid graph"
|
|
1180
|
+
require_text "$PAGES_LAYOUT" 'assets/site.css' "docs layout uses shared CSS"
|
|
1181
|
+
require_text "$PAGES_LAYOUT" 'assets/site.js' "docs layout uses shared JS"
|
|
1182
|
+
require_text "$PAGES_LAYOUT" 'data-theme-toggle' "docs layout exposes theme toggle"
|
|
1183
|
+
require_text "$PAGES_CSS" 'data-theme="dark"' "docs CSS includes dark theme"
|
|
1184
|
+
require_text "$PAGES_CSS" 'prefers-reduced-motion' "docs CSS respects reduced motion"
|
|
1185
|
+
require_text "$PAGES_JS" 'localStorage' "docs JS persists theme"
|
|
1186
|
+
require_text "$PAGES_JS" 'mermaid' "docs JS renders Mermaid"
|
|
1187
|
+
|
|
1188
|
+
echo ""
|
|
1189
|
+
echo "--- legacy terms ---"
|
|
1190
|
+
reject_text_many 'schedule-prompt|k''brain|\.kiro-agents' "no legacy naming in workflow artifacts" "$IDEA" "$PULL" "$EVIDENCE" "$RELEASE" "$LEARNING" "$DELIVER" "$PLAN_WORK" "$VERIFY_WORK" "$MAP" "$USAGE_GUIDE" "$EVAL_STRATEGY" "$SHARED_CONTRACTS_DOC"
|
|
1191
|
+
reject_text "$KIT_REPOSITORY_DOC" '\bpack(s|age|aged|aging)?\b' "kit repository contract avoids public pack vocabulary"
|
|
1192
|
+
reject_text_many 'remote install|git fetch|npm split|runtime adapter activation' "kit repository validation and fixtures avoid scoped-out implementation behavior" "$ROOT/scripts/validate-source-tree.js" "$ROOT/evals/integration/test_flow_kit_repository.sh" "$ROOT/evals/fixtures/flow-kit-repository"
|
|
1193
|
+
if [[ "${#ACTIVE_GUIDANCE_SURFACES[@]}" -gt 0 ]]; then
|
|
1194
|
+
reject_text_many 'tool-reviewer' "retired tool-reviewer is absent from active guidance surfaces" "${ACTIVE_GUIDANCE_SURFACES[@]}"
|
|
1195
|
+
reject_text_many '--phase[[:space:]]+review|phase:[[:space:]]*review|state\.phase:[[:space:]]*review' "active guidance surfaces do not instruct review as a sidecar phase" "${ACTIVE_GUIDANCE_SURFACES[@]}"
|
|
1196
|
+
else
|
|
1197
|
+
fail "active guidance surfaces were not discovered"
|
|
1198
|
+
fi
|
|
1199
|
+
|
|
1200
|
+
echo ""
|
|
1201
|
+
if [[ "$errors" -eq 0 ]]; then
|
|
1202
|
+
echo "Workflow skill contracts passed."
|
|
1203
|
+
exit 0
|
|
1204
|
+
fi
|
|
1205
|
+
|
|
1206
|
+
echo "Workflow skill contracts failed: $errors issue(s)."
|
|
1207
|
+
exit 1
|