@kontourai/flow-agents 2.3.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/CODEOWNERS +16 -0
- package/.github/workflows/ci.yml +44 -0
- package/.github/workflows/trust-reconcile.yml +62 -4
- package/AGENTS.md +4 -4
- package/CHANGELOG.md +62 -0
- package/CONTEXT.md +35 -0
- package/README.md +9 -3
- package/agents/dev.json +1 -1
- package/agents/tool-code-reviewer.json +1 -1
- package/agents/tool-planner.json +3 -3
- package/agents/tool-verifier.json +3 -3
- package/build/src/cli/assignment-provider.d.ts +1 -0
- package/build/src/cli/assignment-provider.js +748 -0
- package/build/src/cli/console-learning-projection.js +3 -2
- package/build/src/cli/effective-assignment-provider-settings.d.ts +1 -0
- package/build/src/cli/effective-assignment-provider-settings.js +125 -0
- package/build/src/cli/init.js +104 -21
- package/build/src/cli/kit.js +37 -6
- package/build/src/cli/pull-work-provider.js +1 -1
- package/build/src/cli/usage-feedback.js +3 -3
- package/build/src/cli/validate-hook-influence.js +1 -0
- package/build/src/cli/validate-workflow-artifacts.js +27 -7
- package/build/src/cli/workflow-artifact-cleanup-audit.js +36 -2
- package/build/src/cli/workflow-sidecar.d.ts +14 -7
- package/build/src/cli/workflow-sidecar.js +938 -168
- package/build/src/cli.js +6 -0
- package/build/src/flow-kit/validate.d.ts +23 -0
- package/build/src/flow-kit/validate.js +67 -1
- package/build/src/index.d.ts +1 -1
- package/build/src/index.js +1 -1
- package/build/src/lib/flow-resolver.d.ts +6 -4
- package/build/src/lib/flow-resolver.js +125 -58
- package/build/src/lib/local-artifact-root.d.ts +14 -2
- package/build/src/lib/local-artifact-root.js +22 -5
- package/build/src/lib/workflow-learning-projection.js +2 -2
- package/build/src/runtime-adapters.d.ts +12 -0
- package/build/src/runtime-adapters.js +56 -16
- package/build/src/tools/build-universal-bundles.js +49 -16
- package/build/src/tools/generate-context-map.js +10 -8
- package/build/src/tools/validate-source-tree.js +24 -1
- package/console.telemetry.json +22 -0
- package/context/contracts/artifact-contract.md +40 -7
- package/context/contracts/assignment-provider-contract.md +239 -0
- package/context/contracts/builder-kit-workflow-state-contract.md +5 -2
- package/context/contracts/decision-registry-contract.md +265 -0
- package/context/contracts/delivery-contract.md +3 -1
- package/context/contracts/execution-contract.md +25 -0
- package/context/contracts/governance-adapter-contract.md +2 -0
- package/context/contracts/knowledge-store-contract.md +197 -0
- package/context/contracts/planning-contract.md +4 -1
- package/context/contracts/review-contract.md +7 -3
- package/context/contracts/sandbox-policy.md +2 -0
- package/context/contracts/standing-directives.md +13 -0
- package/context/contracts/verification-contract.md +11 -1
- package/context/contracts/work-item-contract.md +3 -1
- package/context/deferred/parallelization.md +1 -1
- package/context/gate-awareness.md +4 -4
- package/context/scripts/git-status.sh +2 -2
- package/context/scripts/hooks/config-protection.js +502 -2
- package/context/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/context/scripts/hooks/run-hook.js +14 -1
- package/context/scripts/hooks/stop-goal-fit.js +1140 -99
- package/context/scripts/hooks/workflow-steering.js +212 -6
- package/context/settings/assignment-provider-settings.json +33 -0
- package/docs/adr/0007-flow-skill-kit-tool-boundary.md +2 -0
- package/docs/adr/0015-flow-flow-agents-boundary-reconciliation.md +35 -0
- package/docs/adr/0019-kit-dependency-ownership.md +62 -0
- package/docs/adr/0020-trust-reconcile-manifest-and-claim-classification.md +290 -0
- package/docs/adr/0021-assignment-leases-and-stale-claim-takeover.md +221 -0
- package/docs/adr/0022-fail-closed-delivery-reconciliation-with-governed-exemptions.md +463 -0
- package/docs/agent-system-guidebook.md +3 -3
- package/docs/agent-usage-feedback-loop.md +6 -6
- package/docs/context-map.md +10 -7
- package/docs/decisions/decision-records.md +57 -0
- package/docs/decisions/index.md +17 -0
- package/docs/decisions/knowledge-store-provider.md +51 -0
- package/docs/decisions/model-routing.md +63 -0
- package/docs/decisions/promotion-gate.md +52 -0
- package/docs/decisions/standing-directives.md +66 -0
- package/docs/developer-architecture.md +1 -1
- package/docs/fixture-ownership.md +4 -0
- package/docs/flow-kit-repository-contract.md +5 -5
- package/docs/getting-started.md +12 -2
- package/docs/integrations/harness-install.md +2 -1
- package/docs/kit-authoring-guide.md +64 -5
- package/docs/knowledge-kit.md +5 -1
- package/docs/learnings/2026-07-improvement-program.md +203 -0
- package/docs/migrations.md +6 -5
- package/docs/north-star.md +2 -2
- package/docs/operating-layers.md +4 -3
- package/docs/repository-structure.md +5 -5
- package/docs/skills-map.md +8 -8
- package/docs/spec/runtime-hook-surface.md +19 -15
- package/docs/spikes/graph-provider-2026-07.md +155 -0
- package/docs/standards-register.md +7 -7
- package/docs/trust-anchor-adoption.md +105 -4
- package/docs/work-item-adapters.md +1 -1
- package/docs/workflow-artifact-lifecycle.md +72 -9
- package/docs/workflow-eval-strategy.md +3 -3
- package/docs/workflow-shared-contracts.md +3 -2
- package/docs/workflow-usage-guide.md +260 -21
- package/evals/acceptance/DEMO-false-completion.md +20 -11
- package/evals/acceptance/prove-capture-teeth-declared.sh +15 -15
- package/evals/acceptance/prove-capture-teeth.sh +11 -11
- package/evals/acceptance/test_kiro_harness.sh +1 -1
- package/evals/ci/antigaming-suite.sh +5 -0
- package/evals/ci/run-baseline.sh +71 -1
- package/evals/fixtures/assignment-provider/actor-a.json +6 -0
- package/evals/fixtures/assignment-provider/actor-b.json +6 -0
- package/evals/fixtures/assignment-provider/github-issue-claimed.json +27 -0
- package/evals/fixtures/assignment-provider/github-issue-unassigned.json +7 -0
- package/evals/fixtures/assignment-provider/liveness-fresh.json +9 -0
- package/evals/fixtures/assignment-provider/liveness-stale.json +9 -0
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/kit.json +13 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/kit.json +13 -0
- package/evals/fixtures/hook-influence/cases.json +32 -0
- package/evals/fixtures/pull-work-provider/github-issues.json +6 -6
- package/evals/fixtures/trust-reconcile-exploits/fabricated-attestation.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/no-label-bypass.json +36 -0
- package/evals/fixtures/trust-reconcile-exploits/skip-assumed-bypass.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/status-misassertion.json +48 -0
- package/evals/fixtures/trust-reconcile-exploits/waived-command-check.json +44 -0
- package/evals/fixtures/trust-reconcile-mixed-bundle/mixed-bundle.json +159 -0
- package/evals/fixtures/trust-reconcile-ws3/ws3-bundle.json +920 -0
- package/evals/integration/test_actor_identity.sh +254 -0
- package/evals/integration/test_assignment_provider_github.sh +318 -0
- package/evals/integration/test_assignment_provider_local_file.sh +222 -0
- package/evals/integration/test_builder_step_producers.sh +33 -23
- package/evals/integration/test_bundle_install.sh +22 -16
- package/evals/integration/test_bundle_lifecycle.sh +11 -11
- package/evals/integration/test_captured_fail_reconciliation.sh +50 -50
- package/evals/integration/test_checkpoint_signing.sh +43 -0
- package/evals/integration/test_claim_lookup.sh +4 -4
- package/evals/integration/test_codex_hook_resolution.sh +114 -0
- package/evals/integration/test_command_log_concurrency.sh +8 -8
- package/evals/integration/test_command_log_fork_classification.sh +3 -3
- package/evals/integration/test_command_log_integrity.sh +16 -16
- package/evals/integration/test_console_learning_projection.sh +1 -1
- package/evals/integration/test_critique_supersession_roundtrip.sh +182 -0
- package/evals/integration/test_dual_emit_flow_step.sh +145 -0
- package/evals/integration/test_enforcer_expects_driven.sh +12 -12
- package/evals/integration/test_evidence_capture_hook.sh +14 -13
- package/evals/integration/test_fixture_retirement_audit.sh +2 -2
- package/evals/integration/test_flow_agents_statusline.sh +2 -2
- package/evals/integration/test_flow_kit_install_git.sh +52 -0
- package/evals/integration/test_flow_kit_repository.sh +2 -0
- package/evals/integration/test_flowdef_session_activation.sh +6 -6
- package/evals/integration/test_flowdef_union_floor_regression.sh +429 -0
- package/evals/integration/test_gate_bypass_chain.sh +52 -40
- package/evals/integration/test_gate_lockdown.sh +97 -73
- package/evals/integration/test_gate_review_inquiry_records.sh +3 -3
- package/evals/integration/test_goal_fit_escape_hatch.sh +10 -10
- package/evals/integration/test_goal_fit_ghost_session.sh +104 -0
- package/evals/integration/test_goal_fit_hook.sh +32 -32
- package/evals/integration/test_goal_fit_rederive.sh +9 -9
- package/evals/integration/test_hook_category_behaviors.sh +103 -0
- package/evals/integration/test_hook_influence_cases.sh +1 -0
- package/evals/integration/test_install_merge.sh +262 -1
- package/evals/integration/test_kit_identity_trust.sh +6 -6
- package/evals/integration/test_liveness_conflict_injection.sh +587 -0
- package/evals/integration/test_liveness_heartbeat.sh +677 -0
- package/evals/integration/test_liveness_verdict.sh +394 -0
- package/evals/integration/test_local_flow_kit_install.sh +15 -0
- package/evals/integration/test_phase_map_and_gate_claim.sh +63 -11
- package/evals/integration/test_promote_gate.sh +178 -0
- package/evals/integration/test_publish_delivery.sh +23 -6
- package/evals/integration/test_pull_work_assignment_join.sh +132 -0
- package/evals/integration/test_pull_work_liveness_preflight.sh +394 -0
- package/evals/integration/test_pull_work_provider.sh +2 -2
- package/evals/integration/test_reconcile_soundness.sh +37 -13
- package/evals/integration/test_resolvefirststep_security.sh +22 -0
- package/evals/integration/test_runtime_adapter_activation.sh +87 -18
- package/evals/integration/test_session_resume_roundtrip.sh +147 -0
- package/evals/integration/test_sidecar_field_preservation.sh +249 -0
- package/evals/integration/test_trust_reconcile.sh +11 -10
- package/evals/integration/test_trust_reconcile_manifest.sh +79 -0
- package/evals/integration/test_trust_reconcile_mixed_bundle.sh +96 -0
- package/evals/integration/test_trust_reconcile_negatives.sh +759 -0
- package/evals/integration/test_usage_feedback_global.sh +5 -5
- package/evals/integration/test_validate_artifacts_portability.sh +60 -0
- package/evals/integration/test_verify_cli.sh +2 -2
- package/evals/integration/test_veritas_governance_kit.sh +117 -0
- package/evals/integration/test_workflow_artifact_cleanup_audit.sh +26 -1
- package/evals/integration/test_workflow_artifacts.sh +33 -0
- package/evals/integration/test_workflow_sidecar_writer.sh +802 -74
- package/evals/integration/test_workflow_steering_hook.sh +175 -5
- package/evals/lib/codex-provider.sh +1 -1
- package/evals/lib/node.sh +19 -1
- package/evals/run.sh +32 -0
- package/evals/static/test_decisions.sh +150 -0
- package/evals/static/test_flowdef_codeowners_coverage.sh +62 -0
- package/evals/static/test_knowledge_providers.sh +23 -0
- package/evals/static/test_package.sh +19 -10
- package/evals/static/test_universal_bundles.sh +48 -3
- package/evals/static/test_workflow_skills.sh +41 -8
- package/kits/builder/flows/build.flow.json +3 -74
- package/kits/builder/flows/publish-learn.flow.json +90 -0
- package/kits/builder/kit.json +11 -0
- package/kits/builder/skills/builder-shape/SKILL.md +1 -1
- package/kits/builder/skills/deliver/SKILL.md +32 -11
- package/kits/builder/skills/design-probe/SKILL.md +4 -4
- package/kits/builder/skills/evidence-gate/SKILL.md +26 -1
- package/kits/builder/skills/execute-plan/SKILL.md +2 -2
- package/kits/builder/skills/fix-bug/SKILL.md +2 -0
- package/kits/builder/skills/gate-review/SKILL.md +6 -6
- package/kits/builder/skills/idea-to-backlog/SKILL.md +1 -1
- package/kits/builder/skills/learning-review/SKILL.md +7 -7
- package/kits/builder/skills/pickup-probe/SKILL.md +5 -4
- package/kits/builder/skills/plan-work/SKILL.md +27 -5
- package/kits/builder/skills/pull-work/SKILL.md +148 -5
- package/kits/builder/skills/release-readiness/SKILL.md +4 -4
- package/kits/builder/skills/review-work/SKILL.md +24 -1
- package/kits/builder/skills/tdd-workflow/SKILL.md +2 -0
- package/kits/builder/skills/verify-work/SKILL.md +8 -1
- package/kits/catalog.json +6 -0
- package/kits/knowledge/kit.json +35 -0
- package/kits/knowledge/providers/conformance/fixtures/git-repo/CONTEXT.md +12 -0
- package/kits/knowledge/providers/conformance/fixtures/git-repo/docs/decisions/old-sprocket-shape.md +13 -0
- package/kits/knowledge/providers/conformance/fixtures/git-repo/docs/decisions/sprocket-shape.md +14 -0
- package/kits/knowledge/providers/conformance/fixtures/git-repo/docs/decisions/widget-format.md +14 -0
- package/kits/knowledge/providers/conformance/fixtures/git-repo/docs/learnings/fixture-learning.md +7 -0
- package/kits/knowledge/providers/conformance/fixtures/work-item/issues.json +30 -0
- package/kits/knowledge/providers/conformance/suite.test.js +125 -0
- package/kits/knowledge/providers/git-repo/index.js +236 -0
- package/kits/knowledge/providers/health/health-pass.test.js +99 -0
- package/kits/knowledge/providers/health/index.js +153 -0
- package/kits/knowledge/providers/index.js +24 -0
- package/kits/knowledge/providers/lib/model.js +91 -0
- package/kits/knowledge/providers/lib/schema-validate.js +119 -0
- package/kits/knowledge/providers/markdown-vault/index.js +169 -0
- package/kits/knowledge/providers/work-item/index.js +204 -0
- package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +178 -0
- package/kits/veritas-governance/docs/README.md +75 -0
- package/kits/veritas-governance/fixtures/readiness/not-ready.readiness-report.json +4645 -0
- package/kits/veritas-governance/fixtures/readiness/ready.readiness-report.json +4403 -0
- package/kits/veritas-governance/flows/readiness-check.flow.json +35 -0
- package/kits/veritas-governance/kit.json +16 -0
- package/package.json +11 -5
- package/packaging/README.md +2 -2
- package/packaging/conformance/fixtures/config-protection--allow-read-state-json.json +20 -0
- package/packaging/conformance/fixtures/config-protection--block-write-state-json.json +20 -0
- package/packaging/conformance/fixtures/stop-goal-fit--block-bundle-disputed-claim.json +1 -1
- package/packaging/conformance/fixtures/stop-goal-fit--block-capture-contradicts-claimed-pass.json +1 -1
- package/packaging/manifest.json +9 -10
- package/schemas/assignment-provider-settings.schema.json +125 -0
- package/schemas/decision-record.schema.json +109 -0
- package/schemas/knowledge/edge.schema.json +54 -0
- package/schemas/knowledge/health-report.schema.json +45 -0
- package/schemas/knowledge/node.schema.json +49 -0
- package/schemas/knowledge/proposal.schema.json +53 -0
- package/schemas/workflow-evidence.schema.json +1 -1
- package/schemas/workflow-state.schema.json +5 -0
- package/scripts/README.md +8 -3
- package/scripts/check-content-boundary.cjs +1 -1
- package/scripts/check-decisions.cjs +356 -0
- package/scripts/ci/derive-claim-status.mjs +74 -0
- package/scripts/ci/trust-reconcile.js +957 -103
- package/scripts/git-status.sh +2 -2
- package/scripts/hooks/claude-telemetry-hook.js +37 -3
- package/scripts/hooks/codex-telemetry-hook.js +36 -2
- package/scripts/hooks/config-protection.js +102 -30
- package/scripts/hooks/evidence-capture.js +3 -3
- package/scripts/hooks/lib/actor-identity.js +368 -0
- package/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/scripts/hooks/lib/liveness-heartbeat.js +361 -0
- package/scripts/hooks/lib/liveness-policy.js +127 -0
- package/scripts/hooks/lib/liveness-read.js +105 -12
- package/scripts/hooks/lib/liveness-write.js +46 -0
- package/scripts/hooks/lib/local-artifact-paths.js +12 -6
- package/scripts/hooks/opencode-telemetry-hook.js +27 -1
- package/scripts/hooks/pi-telemetry-hook.js +27 -1
- package/scripts/hooks/stop-goal-fit.js +157 -26
- package/scripts/hooks/workflow-steering.js +77 -3
- package/scripts/install-codex-home.sh +138 -38
- package/scripts/statusline/flow-agents-statusline.js +2 -2
- package/src/cli/assignment-provider.ts +845 -0
- package/src/cli/console-learning-projection.ts +3 -2
- package/src/cli/effective-assignment-provider-settings.ts +112 -0
- package/src/cli/init.ts +101 -21
- package/src/cli/kit.ts +37 -6
- package/src/cli/public-api.test.mjs +58 -6
- package/src/cli/pull-work-provider.ts +1 -1
- package/src/cli/trust-bundle-policy-order.test.mjs +87 -0
- package/src/cli/usage-feedback.ts +3 -3
- package/src/cli/validate-hook-influence.ts +1 -0
- package/src/cli/validate-workflow-artifacts.ts +27 -7
- package/src/cli/veritas-readiness-adapter.test.mjs +267 -0
- package/src/cli/workflow-artifact-cleanup-audit.ts +35 -2
- package/src/cli/workflow-sidecar.ts +933 -168
- package/src/cli.ts +6 -0
- package/src/flow-kit/validate.ts +74 -1
- package/src/index.ts +6 -2
- package/src/lib/flow-resolver.ts +123 -55
- package/src/lib/local-artifact-root.ts +24 -5
- package/src/lib/workflow-learning-projection.ts +2 -2
- package/src/runtime-adapters.ts +61 -15
- package/src/tools/build-universal-bundles.ts +49 -16
- package/src/tools/generate-context-map.ts +10 -8
- package/src/tools/validate-source-tree.ts +24 -1
|
@@ -113,7 +113,7 @@ MARKDOWN
|
|
|
113
113
|
stop_output="$(cd "$TMP_WORK" && FLOW_AGENTS_GOAL_FIT_STRICT=true kiro-cli chat --agent dev --no-interactive "Reply with READY only." 2>&1 || true)"
|
|
114
114
|
stop_clean="$(printf '%s' "$stop_output" | strip_ansi)"
|
|
115
115
|
if echo "$stop_clean" | grep -q 'stop "node .*stop:goal-fit stop-goal-fit.js standard,strict" failed with exit code: 2' \
|
|
116
|
-
&& echo "$stop_clean" | grep -q '\[
|
|
116
|
+
&& echo "$stop_clean" | grep -q '\[stop-gate\] Goal Fit warning:' \
|
|
117
117
|
&& echo "$stop_clean" | grep -q 'live-stop--deliver.md is still status:executing'; then
|
|
118
118
|
_pass "strict Goal Fit stop hook surfaces live Kiro stop gate"
|
|
119
119
|
else
|
|
@@ -25,12 +25,17 @@ TESTS=(
|
|
|
25
25
|
"evals/integration/test_enforcer_expects_driven.sh"
|
|
26
26
|
"evals/integration/test_goal_fit_rederive.sh"
|
|
27
27
|
"evals/integration/test_flowdef_session_activation.sh"
|
|
28
|
+
"evals/integration/test_flowdef_union_floor_regression.sh"
|
|
28
29
|
"evals/integration/test_trust_reconcile.sh"
|
|
29
30
|
"evals/integration/test_trust_checkpoint.sh"
|
|
30
31
|
"evals/integration/test_checkpoint_signing.sh"
|
|
31
32
|
"evals/integration/test_mint_attestation.sh"
|
|
32
33
|
"evals/integration/test_publish_delivery.sh"
|
|
33
34
|
"evals/integration/test_phase_map_and_gate_claim.sh"
|
|
35
|
+
"evals/integration/test_trust_reconcile_manifest.sh"
|
|
36
|
+
"evals/integration/test_trust_reconcile_mixed_bundle.sh"
|
|
37
|
+
"evals/integration/test_trust_reconcile_negatives.sh"
|
|
38
|
+
"evals/integration/test_goal_fit_ghost_session.sh"
|
|
34
39
|
)
|
|
35
40
|
|
|
36
41
|
fail=0
|
package/evals/ci/run-baseline.sh
CHANGED
|
@@ -11,6 +11,7 @@ mkdir -p "$LOG_DIR"
|
|
|
11
11
|
|
|
12
12
|
CHECKS=(
|
|
13
13
|
"Content boundary|npm run check:content-boundary --"
|
|
14
|
+
"Decision registry|npm run check:decisions --"
|
|
14
15
|
"Source tree validation|npm run validate:source --"
|
|
15
16
|
"Context map drift|npm run context-map -- --check"
|
|
16
17
|
"Static eval suite|bash evals/run.sh static"
|
|
@@ -19,6 +20,11 @@ CHECKS=(
|
|
|
19
20
|
"Fixture retirement audit integration|bash evals/integration/test_fixture_retirement_audit.sh"
|
|
20
21
|
"Publish-change helper integration|bash evals/integration/test_publish_change_helper.sh"
|
|
21
22
|
"Workflow sidecar writer integration|bash evals/integration/test_workflow_sidecar_writer.sh"
|
|
23
|
+
"Sidecar field preservation integration|bash evals/integration/test_sidecar_field_preservation.sh"
|
|
24
|
+
"Actor identity resolver integration|bash evals/integration/test_actor_identity.sh"
|
|
25
|
+
"Assignment provider local-file integration|bash evals/integration/test_assignment_provider_local_file.sh"
|
|
26
|
+
"Assignment provider github integration|bash evals/integration/test_assignment_provider_github.sh"
|
|
27
|
+
"Pull work assignment join integration|bash evals/integration/test_pull_work_assignment_join.sh"
|
|
22
28
|
"Goal Fit hook integration|bash evals/integration/test_goal_fit_hook.sh"
|
|
23
29
|
"Hook category behavior integration|bash evals/integration/test_hook_category_behaviors.sh"
|
|
24
30
|
"Workflow steering hook integration|bash evals/integration/test_workflow_steering_hook.sh"
|
|
@@ -36,10 +42,15 @@ CHECKS=(
|
|
|
36
42
|
"Effective backlog settings integration|bash evals/integration/test_effective_backlog_settings.sh"
|
|
37
43
|
"Flow agents statusline integration|bash evals/integration/test_flow_agents_statusline.sh"
|
|
38
44
|
"Telemetry contract integration|bash evals/integration/test_telemetry.sh"
|
|
45
|
+
"Liveness heartbeat integration|bash evals/integration/test_liveness_heartbeat.sh"
|
|
46
|
+
"Pull work liveness preflight integration|bash evals/integration/test_pull_work_liveness_preflight.sh"
|
|
47
|
+
"Liveness verdict integration|bash evals/integration/test_liveness_verdict.sh"
|
|
48
|
+
"Liveness conflict injection integration|bash evals/integration/test_liveness_conflict_injection.sh"
|
|
39
49
|
"Telemetry doctor integration|bash evals/integration/test_telemetry_doctor.sh"
|
|
40
50
|
"Usage and cost integration|bash evals/integration/test_usage_cost.sh"
|
|
41
51
|
"Utterance check integration|bash evals/integration/test_utterance_check.sh"
|
|
42
52
|
"Pull work provider integration|bash evals/integration/test_pull_work_provider.sh"
|
|
53
|
+
"Veritas governance kit integration|bash evals/integration/test_veritas_governance_kit.sh"
|
|
43
54
|
"Anti-gaming and trust suite|bash evals/ci/antigaming-suite.sh"
|
|
44
55
|
"Usage feedback import integration|bash evals/integration/test_usage_feedback_import.sh"
|
|
45
56
|
"Usage feedback outcomes integration|bash evals/integration/test_usage_feedback_outcomes.sh"
|
|
@@ -50,6 +61,7 @@ CHECKS=(
|
|
|
50
61
|
|
|
51
62
|
LANE_SOURCE_AND_STATIC=(
|
|
52
63
|
"Content boundary"
|
|
64
|
+
"Decision registry"
|
|
53
65
|
"Source tree validation"
|
|
54
66
|
"Context map drift"
|
|
55
67
|
"Static eval suite"
|
|
@@ -61,6 +73,11 @@ LANE_WORKFLOW_CONTRACTS=(
|
|
|
61
73
|
"Fixture retirement audit integration"
|
|
62
74
|
"Publish-change helper integration"
|
|
63
75
|
"Workflow sidecar writer integration"
|
|
76
|
+
"Sidecar field preservation integration"
|
|
77
|
+
"Actor identity resolver integration"
|
|
78
|
+
"Assignment provider local-file integration"
|
|
79
|
+
"Assignment provider github integration"
|
|
80
|
+
"Pull work assignment join integration"
|
|
64
81
|
)
|
|
65
82
|
|
|
66
83
|
LANE_RUNTIME_AND_KIT=(
|
|
@@ -81,10 +98,15 @@ LANE_RUNTIME_AND_KIT=(
|
|
|
81
98
|
"Effective backlog settings integration"
|
|
82
99
|
"Flow agents statusline integration"
|
|
83
100
|
"Telemetry contract integration"
|
|
101
|
+
"Liveness heartbeat integration"
|
|
102
|
+
"Pull work liveness preflight integration"
|
|
103
|
+
"Liveness verdict integration"
|
|
104
|
+
"Liveness conflict injection integration"
|
|
84
105
|
"Telemetry doctor integration"
|
|
85
106
|
"Usage and cost integration"
|
|
86
107
|
"Utterance check integration"
|
|
87
108
|
"Pull work provider integration"
|
|
109
|
+
"Veritas governance kit integration"
|
|
88
110
|
"Anti-gaming and trust suite"
|
|
89
111
|
)
|
|
90
112
|
|
|
@@ -100,6 +122,51 @@ slugify() {
|
|
|
100
122
|
printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-//; s/-$//'
|
|
101
123
|
}
|
|
102
124
|
|
|
125
|
+
# WS8 (ADR 0020): the reconcile manifest is THIS registry, not a new file. Every entry
|
|
126
|
+
# EMITTED below is a member of a REQUIRED LANE_* array (source-and-static, workflow-contracts,
|
|
127
|
+
# runtime-and-kit), each of which gates a merge — so a manifest command is, by construction, a
|
|
128
|
+
# required-lane command. The advisory LANE_USAGE_FEEDBACK lane (continue-on-error, non-blocking)
|
|
129
|
+
# is EXCLUDED from the emit so a test_output claim can never reconcile against a non-gating
|
|
130
|
+
# command. scripts/ci/trust-reconcile.js consumes this emit to resolve the manifest.
|
|
131
|
+
_json_str() {
|
|
132
|
+
local s="$1"
|
|
133
|
+
s="${s//\\/\\\\}"
|
|
134
|
+
s="${s//\"/\\\"}"
|
|
135
|
+
printf '"%s"' "$s"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
_lanes_for_label() {
|
|
139
|
+
# WS8 (ADR 0020, iteration 2): LANE_USAGE_FEEDBACK is deliberately NOT considered here.
|
|
140
|
+
# The reconcile manifest must contain only commands that gate a merge in a required lane.
|
|
141
|
+
# The usage-feedback lane is advisory (its steps run continue-on-error and its failures do
|
|
142
|
+
# not block), so a usage-feedback check is NOT a required-lane command and must not be a
|
|
143
|
+
# manifest entry a test_output claim can reconcile against. Entries whose ONLY lane is
|
|
144
|
+
# usage-feedback therefore resolve to empty lanes and are skipped by emit_manifest_json.
|
|
145
|
+
local label="$1" out="" x
|
|
146
|
+
for x in "${LANE_SOURCE_AND_STATIC[@]}"; do [[ "$x" == "$label" ]] && { out="${out}\"source-and-static\","; break; }; done
|
|
147
|
+
for x in "${LANE_WORKFLOW_CONTRACTS[@]}"; do [[ "$x" == "$label" ]] && { out="${out}\"workflow-contracts\","; break; }; done
|
|
148
|
+
for x in "${LANE_RUNTIME_AND_KIT[@]}"; do [[ "$x" == "$label" ]] && { out="${out}\"runtime-and-kit\","; break; }; done
|
|
149
|
+
printf '%s' "${out%,}"
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
emit_manifest_json() {
|
|
153
|
+
# Machine-readable manifest: every lane-covered check as {id, command, lanes[]}.
|
|
154
|
+
# Only checks present in at least one LANE_* array are emitted (anti-gaming: a manifest
|
|
155
|
+
# command must run in a required lane by construction).
|
|
156
|
+
local entry label command id lanes first=1
|
|
157
|
+
printf '['
|
|
158
|
+
for entry in "${CHECKS[@]}"; do
|
|
159
|
+
label="${entry%%|*}"
|
|
160
|
+
command="${entry#*|}"
|
|
161
|
+
id="$(slugify "$label")"
|
|
162
|
+
lanes="$(_lanes_for_label "$label")"
|
|
163
|
+
[[ -z "$lanes" ]] && continue
|
|
164
|
+
if [[ $first -eq 1 ]]; then first=0; else printf ','; fi
|
|
165
|
+
printf '{"id":%s,"command":%s,"lanes":[%s]}' "$(_json_str "$id")" "$(_json_str "$command")" "$lanes"
|
|
166
|
+
done
|
|
167
|
+
printf ']\n'
|
|
168
|
+
}
|
|
169
|
+
|
|
103
170
|
active_lane() {
|
|
104
171
|
printf '%s' "${FLOW_AGENTS_CI_LANE:-all}"
|
|
105
172
|
}
|
|
@@ -306,6 +373,9 @@ case "${1:-}" in
|
|
|
306
373
|
--finalize)
|
|
307
374
|
finalize_results
|
|
308
375
|
;;
|
|
376
|
+
--manifest-json)
|
|
377
|
+
emit_manifest_json
|
|
378
|
+
;;
|
|
309
379
|
"")
|
|
310
380
|
validate_active_lane || exit 2
|
|
311
381
|
init_results
|
|
@@ -328,7 +398,7 @@ case "${1:-}" in
|
|
|
328
398
|
finalize_results
|
|
329
399
|
;;
|
|
330
400
|
*)
|
|
331
|
-
echo "Usage: $0 [--init|--check <check-id-or-label>|--finalize|--lane <lane
|
|
401
|
+
echo "Usage: $0 [--init|--check <check-id-or-label>|--finalize|--lane <lane>|--manifest-json]" >&2
|
|
332
402
|
exit 2
|
|
333
403
|
;;
|
|
334
404
|
esac
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"number": 4242,
|
|
3
|
+
"state": "OPEN",
|
|
4
|
+
"assignees": [
|
|
5
|
+
{
|
|
6
|
+
"login": "flow-agents-fixture-bot"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
9
|
+
"labels": [
|
|
10
|
+
{
|
|
11
|
+
"name": "agent:claimed"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "kind:enhancement"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"comments": [
|
|
18
|
+
{
|
|
19
|
+
"id": 90001,
|
|
20
|
+
"body": "An unrelated human comment on this fixture issue."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 90002,
|
|
24
|
+
"body": "<!-- flow-agents:assignment-claim -->\n**Assignment claim** — Claimed by an automated agent session (claude-code).\n\n- actor: `claude-code:fixture-actor-a-session:fixture-host`\n- claimed_at: 2026-06-01T12:00:00Z\n- ttl_seconds: 1800\n- branch: `agent/claude-code-fixture-actor-a-session-fixture-host/flow-agents-4242`\n\n```json\n{\n \"schema_version\": \"1.0\",\n \"role\": \"AssignmentClaimRecord\",\n \"subject_id\": \"kontourai/flow-agents#4242\",\n \"actor\": {\n \"runtime\": \"claude-code\",\n \"session_id\": \"fixture-actor-a-session\",\n \"host\": \"fixture-host\",\n \"human\": null\n },\n \"claimed_at\": \"2026-06-01T12:00:00Z\",\n \"ttl_seconds\": 1800,\n \"branch\": \"agent/claude-code-fixture-actor-a-session-fixture-host/flow-agents-4242\",\n \"artifact_dir\": \".kontourai/flow-agents/flow-agents-4242\",\n \"status\": \"claimed\"\n}\n```"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "example.review",
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"steps": [
|
|
5
|
+
{ "id": "review", "next": "done" },
|
|
6
|
+
{ "id": "done", "next": null }
|
|
7
|
+
],
|
|
8
|
+
"gates": {
|
|
9
|
+
"review-gate": {
|
|
10
|
+
"step": "review",
|
|
11
|
+
"expects": [
|
|
12
|
+
{
|
|
13
|
+
"id": "review-evidence",
|
|
14
|
+
"kind": "trust.bundle",
|
|
15
|
+
"required": true,
|
|
16
|
+
"description": "Review evidence has been recorded.",
|
|
17
|
+
"bundle_claim": {
|
|
18
|
+
"claimType": "example.review.evidence",
|
|
19
|
+
"subjectType": "artifact",
|
|
20
|
+
"accepted_statuses": ["trusted", "accepted"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"id": "bad-dependency-kit",
|
|
4
|
+
"name": "Bad Dependency Kit",
|
|
5
|
+
"product_name": "Bad Dependency Kit",
|
|
6
|
+
"description": "A valid container whose dependencies entry is malformed (missing kit_id) — used to assert dependency shape validation rejects it.",
|
|
7
|
+
"flows": [
|
|
8
|
+
{ "id": "example.review", "path": "flows/review.flow.json", "description": "Review a small change." }
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
{ "reason": "this entry is intentionally missing a kit_id" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "example.review",
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"steps": [
|
|
5
|
+
{ "id": "review", "next": "done" },
|
|
6
|
+
{ "id": "done", "next": null }
|
|
7
|
+
],
|
|
8
|
+
"gates": {
|
|
9
|
+
"review-gate": {
|
|
10
|
+
"step": "review",
|
|
11
|
+
"expects": [
|
|
12
|
+
{
|
|
13
|
+
"id": "review-evidence",
|
|
14
|
+
"kind": "trust.bundle",
|
|
15
|
+
"required": true,
|
|
16
|
+
"description": "Review evidence has been recorded.",
|
|
17
|
+
"bundle_claim": {
|
|
18
|
+
"claimType": "example.review.evidence",
|
|
19
|
+
"subjectType": "artifact",
|
|
20
|
+
"accepted_statuses": ["trusted", "accepted"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"id": "with-dependency-kit",
|
|
4
|
+
"name": "With Dependency Kit",
|
|
5
|
+
"product_name": "With Dependency Kit",
|
|
6
|
+
"description": "A valid Flow Kit that declares a well-formed cross-kit dependency on a kit that is deliberately never installed.",
|
|
7
|
+
"flows": [
|
|
8
|
+
{ "id": "example.review", "path": "flows/review.flow.json", "description": "Review a small change." }
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
{ "kit_id": "nonexistent-dep-kit", "reason": "declared dependency deliberately absent from any registry or catalog" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -140,6 +140,38 @@
|
|
|
140
140
|
"status": "always-run-in-integration"
|
|
141
141
|
}
|
|
142
142
|
},
|
|
143
|
+
{
|
|
144
|
+
"id": "dev-builder-route-fresh-coding-prompt",
|
|
145
|
+
"description": "A fresh coding/build prompt with no active sidecar should still steer into Builder Kit delivery workflow before source edits. Claude Code must receive this as prompt-submit additional context through the hook adapter.",
|
|
146
|
+
"runtime_scope": ["claude-code", "codex", "kiro-cli"],
|
|
147
|
+
"hook": "workflow-steering",
|
|
148
|
+
"event": "UserPromptSubmit",
|
|
149
|
+
"fixture_state": {
|
|
150
|
+
"task_slug": "fresh-coding-prompt",
|
|
151
|
+
"status": "new",
|
|
152
|
+
"phase": "intake",
|
|
153
|
+
"active_flow_id": null,
|
|
154
|
+
"prompt": "Please implement the new settings API and update its tests."
|
|
155
|
+
},
|
|
156
|
+
"guidance_must_include": [
|
|
157
|
+
"BUILDER WORKFLOW ROUTE",
|
|
158
|
+
"activate `deliver`",
|
|
159
|
+
"--flow-id builder.build",
|
|
160
|
+
"plan-work -> execute-plan -> review-work -> verify-work",
|
|
161
|
+
"publish/release-readiness and learning-review"
|
|
162
|
+
],
|
|
163
|
+
"agent_must_do": [
|
|
164
|
+
"activate Builder Kit delivery workflow before source edits or implementation commands",
|
|
165
|
+
"use deliver by default for coding/build work unless the user explicitly requested TDD",
|
|
166
|
+
"keep the session on builder.build and do not bypass plan-work -> execute-plan -> review-work -> verify-work",
|
|
167
|
+
"continue from local verification into publish, release readiness, and learning feedback"
|
|
168
|
+
],
|
|
169
|
+
"evidence": {
|
|
170
|
+
"tier": "adapter",
|
|
171
|
+
"command": "bash evals/integration/test_workflow_steering_hook.sh",
|
|
172
|
+
"status": "always-run-in-integration"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
143
175
|
{
|
|
144
176
|
"id": "codex-live-context-gap",
|
|
145
177
|
"runtime_scope": ["codex"],
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"number": 22,
|
|
4
4
|
"title": "Define and validate Flow Kit repositories",
|
|
5
5
|
"state": "OPEN",
|
|
6
|
-
"body": "## Problem\nExternal kit repositories need a validated contract.\n\n## Scope\n- Add contract docs.\n- Validate local kit folders.\n\n## Acceptance criteria\n- Valid fixture passes.\n- Invalid fixtures fail.\n\n## Dependencies\nRequires kontourai/flow#2.\n\n## Source artifact\n`.flow-agents/flow-agents-kit-platform-backlog/flow-agents-kit-platform-backlog--idea-to-backlog.md`",
|
|
6
|
+
"body": "## Problem\nExternal kit repositories need a validated contract.\n\n## Scope\n- Add contract docs.\n- Validate local kit folders.\n\n## Acceptance criteria\n- Valid fixture passes.\n- Invalid fixtures fail.\n\n## Dependencies\nRequires kontourai/flow#2.\n\n## Source artifact\n`.kontourai/flow-agents/flow-agents-kit-platform-backlog/flow-agents-kit-platform-backlog--idea-to-backlog.md`",
|
|
7
7
|
"labels": [],
|
|
8
8
|
"assignees": [],
|
|
9
9
|
"milestone": null,
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"number": 97,
|
|
74
74
|
"title": "Emit source revision metadata and structured blockers",
|
|
75
75
|
"state": "OPEN",
|
|
76
|
-
"body": "## Problem\nDownstream pickup needs durable source revision and blocker metadata.\n\n## Scope\n- Emit provider-neutral work-item metadata.\n- Preserve human-readable blocker prose.\n\n## Acceptance criteria\n- Source revision fields normalize.\n- Structured blockers preserve provider refs and text blockers.\n\n## Dependencies / Blockers\nRequires kontourai/flow#2.\nBlocked by product decision on rollout scope.\n\n## Source artifact\n`.flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md`\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"source_revisions\": [\n {\n \"repo\": \"kontourai/flow-agents\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\n \"kits/builder/skills/idea-to-backlog/SKILL.md\",\n \"context/contracts/work-item-contract.md\"\n ]\n },\n {\n \"repo\": \"kontourai/flow\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\"]\n }\n ],\n \"blockers\": [\n {\n \"type\": \"work_item\",\n \"ref\": \"kontourai/flow#2\",\n \"status\": \"blocked\",\n \"summary\": \"Requires Flow contract issue first.\"\n },\n {\n \"type\": \"text\",\n \"status\": \"blocked\",\n \"summary\": \"Product decision on rollout scope.\"\n }\n ]\n}\n-->",
|
|
76
|
+
"body": "## Problem\nDownstream pickup needs durable source revision and blocker metadata.\n\n## Scope\n- Emit provider-neutral work-item metadata.\n- Preserve human-readable blocker prose.\n\n## Acceptance criteria\n- Source revision fields normalize.\n- Structured blockers preserve provider refs and text blockers.\n\n## Dependencies / Blockers\nRequires kontourai/flow#2.\nBlocked by product decision on rollout scope.\n\n## Source artifact\n`.kontourai/flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md`\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"source_revisions\": [\n {\n \"repo\": \"kontourai/flow-agents\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\n \"kits/builder/skills/idea-to-backlog/SKILL.md\",\n \"context/contracts/work-item-contract.md\"\n ]\n },\n {\n \"repo\": \"kontourai/flow\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\"]\n }\n ],\n \"blockers\": [\n {\n \"type\": \"work_item\",\n \"ref\": \"kontourai/flow#2\",\n \"status\": \"blocked\",\n \"summary\": \"Requires Flow contract issue first.\"\n },\n {\n \"type\": \"text\",\n \"status\": \"blocked\",\n \"summary\": \"Product decision on rollout scope.\"\n }\n ]\n}\n-->",
|
|
77
77
|
"labels": [],
|
|
78
78
|
"assignees": [],
|
|
79
79
|
"milestone": null,
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"number": 110,
|
|
102
102
|
"title": "Fresh planned item",
|
|
103
103
|
"state": "OPEN",
|
|
104
|
-
"body": "## Scope\nUse fresh source revision metadata.\n\n## Acceptance criteria\nFreshness is verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"cccccccccccccccccccccccccccccccccccccccc\",\n \"planned_at\": \"2026-06-02T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/fresh/fresh--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
104
|
+
"body": "## Scope\nUse fresh source revision metadata.\n\n## Acceptance criteria\nFreshness is verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"cccccccccccccccccccccccccccccccccccccccc\",\n \"planned_at\": \"2026-06-02T00:00:00Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/fresh/fresh--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
105
105
|
"labels": [],
|
|
106
106
|
"assignees": [],
|
|
107
107
|
"milestone": null,
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"number": 111,
|
|
116
116
|
"title": "Drifted planned item",
|
|
117
117
|
"state": "OPEN",
|
|
118
|
-
"body": "## Scope\nUse drifted source revision metadata.\n\n## Acceptance criteria\nFreshness reports benign drift.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"dddddddddddddddddddddddddddddddddddddddd\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/drifted/drifted--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pickup-probe/SKILL.md\"]\n}\n-->",
|
|
118
|
+
"body": "## Scope\nUse drifted source revision metadata.\n\n## Acceptance criteria\nFreshness reports benign drift.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"dddddddddddddddddddddddddddddddddddddddd\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/drifted/drifted--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pickup-probe/SKILL.md\"]\n}\n-->",
|
|
119
119
|
"labels": [],
|
|
120
120
|
"assignees": [],
|
|
121
121
|
"milestone": null,
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
"number": 112,
|
|
130
130
|
"title": "Stale planned item",
|
|
131
131
|
"state": "OPEN",
|
|
132
|
-
"body": "## Scope\nUse stale source revision metadata.\n\n## Acceptance criteria\nFreshness routes stale work.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n \"planned_at\": \"2026-04-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/stale/stale--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\", \"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
132
|
+
"body": "## Scope\nUse stale source revision metadata.\n\n## Acceptance criteria\nFreshness routes stale work.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n \"planned_at\": \"2026-04-01T00:00:00Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/stale/stale--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\", \"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
133
133
|
"labels": [],
|
|
134
134
|
"assignees": [],
|
|
135
135
|
"milestone": null,
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"number": 113,
|
|
144
144
|
"title": "Legacy item missing planned base",
|
|
145
145
|
"state": "OPEN",
|
|
146
|
-
"body": "## Scope\nPreserve legacy gap for missing planned_base_sha.\n\n## Acceptance criteria\nFreshness is not verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/legacy/legacy--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
146
|
+
"body": "## Scope\nPreserve legacy gap for missing planned_base_sha.\n\n## Acceptance criteria\nFreshness is not verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".kontourai/flow-agents/legacy/legacy--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
|
|
147
147
|
"labels": [],
|
|
148
148
|
"assignees": [],
|
|
149
149
|
"milestone": null,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 5,
|
|
3
|
+
"source": "ws8-exploit-fixture:fabricated-attestation",
|
|
4
|
+
"note": "CONVERGED ITERATION-3 FINDING (both gates): a fully self-consistent, HAND-FABRICATED claim+evidence+event triple for a no-command, high-impact 'security' check. `record-evidence --check-json '{\"kind\":\"security\",\"status\":\"pass\",...}'` with no `command` field produces exactly this shape through the real producer CLI. `deriveClaimStatus` only proves bundle-internal self-consistency (claim references evidence, evidence references a verified event) — it cannot and does not prove the underlying attestation is true. This fixture is INDISTINGUISHABLE, at the reconciler's own re-derivation layer, from a genuinely reviewed security check. It MUST still pass (exit 0) — attestations are not blocked at L0, or every honest human-attestation use breaks — but it MUST be visibly, loudly marked as an unverified attestation (not a quiet SESSION-LOCAL OK indistinguishable from a reconciled check). See ADR 0020 Residuals.",
|
|
5
|
+
"claims": [
|
|
6
|
+
{
|
|
7
|
+
"id": "c-fabricated-security",
|
|
8
|
+
"claimType": "workflow.check.security",
|
|
9
|
+
"value": "pass",
|
|
10
|
+
"status": "verified",
|
|
11
|
+
"subjectId": "exploit/fabricated-security-review",
|
|
12
|
+
"facet": "flow-agents.workflow",
|
|
13
|
+
"subjectType": "workflow-check",
|
|
14
|
+
"fieldOrBehavior": "security review: no injection vectors found (fabricated, no command run)",
|
|
15
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
16
|
+
"updatedAt": "2026-07-02T00:00:00Z",
|
|
17
|
+
"impactLevel": "high",
|
|
18
|
+
"verificationPolicyId": "policy:workflow.check.security:attestation"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"evidence": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ev-fabricated-security",
|
|
24
|
+
"claimId": "c-fabricated-security",
|
|
25
|
+
"evidenceType": "attestation",
|
|
26
|
+
"method": "corroboration",
|
|
27
|
+
"sourceRef": "exploit/evidence.json",
|
|
28
|
+
"excerptOrSummary": "Fabricated: reviewed for injection vectors, none found. No command was ever run to produce this text.",
|
|
29
|
+
"observedAt": "2026-07-02T00:00:00Z",
|
|
30
|
+
"collectedBy": "flow-agents/workflow-sidecar",
|
|
31
|
+
"passing": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"policies": [
|
|
35
|
+
{
|
|
36
|
+
"id": "policy:workflow.check.security:attestation",
|
|
37
|
+
"claimType": "workflow.check.security",
|
|
38
|
+
"requiredEvidence": ["attestation"],
|
|
39
|
+
"acceptanceCriteria": ["A verified verification event must support a workflow.check.security claim."],
|
|
40
|
+
"reviewAuthority": "system",
|
|
41
|
+
"validityRule": { "kind": "manual" },
|
|
42
|
+
"stalenessTriggers": [],
|
|
43
|
+
"conflictRules": [],
|
|
44
|
+
"impactLevel": "high"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"events": [
|
|
48
|
+
{
|
|
49
|
+
"id": "evt-fabricated-security",
|
|
50
|
+
"claimId": "c-fabricated-security",
|
|
51
|
+
"status": "verified",
|
|
52
|
+
"actor": "flow-agents/workflow-sidecar",
|
|
53
|
+
"method": "corroboration",
|
|
54
|
+
"evidenceIds": ["ev-fabricated-security"],
|
|
55
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
56
|
+
"verifiedAt": "2026-07-02T00:00:00Z"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 5,
|
|
3
|
+
"source": "ws8-exploit-fixture:no-label-bypass",
|
|
4
|
+
"note": "REVIEWER EXPLOIT (finding 1): a fabricated kind:'test' claim produces test_output evidence with NO execution.label and no command. Pre-fix it slipped past both the reconcilable bucket (needs a label) and the not-run guard (which only checked the literal claimType workflow.check.command), passing as SESSION-LOCAL OK on self-reported status. It MUST now be a not-run divergence: a test_output claim reconciles against the manifest or it is a divergence, never session-local.",
|
|
5
|
+
"claims": [
|
|
6
|
+
{
|
|
7
|
+
"id": "c-fabricated-test",
|
|
8
|
+
"claimType": "workflow.check.test",
|
|
9
|
+
"value": "pass",
|
|
10
|
+
"status": "verified",
|
|
11
|
+
"subjectId": "exploit/unit-tests",
|
|
12
|
+
"facet": "flow-agents.workflow",
|
|
13
|
+
"subjectType": "workflow-check",
|
|
14
|
+
"fieldOrBehavior": "unit tests passed",
|
|
15
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
16
|
+
"updatedAt": "2026-07-02T00:00:00Z",
|
|
17
|
+
"impactLevel": "high",
|
|
18
|
+
"verificationPolicyId": "policy:workflow.check.test"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"evidence": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ev-fabricated-test",
|
|
24
|
+
"claimId": "c-fabricated-test",
|
|
25
|
+
"evidenceType": "test_output",
|
|
26
|
+
"method": "validation",
|
|
27
|
+
"sourceRef": "exploit/evidence.json",
|
|
28
|
+
"excerptOrSummary": "unit tests passed",
|
|
29
|
+
"observedAt": "2026-07-02T00:00:00Z",
|
|
30
|
+
"collectedBy": "flow-agents/workflow-sidecar",
|
|
31
|
+
"passing": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"policies": [],
|
|
35
|
+
"events": []
|
|
36
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 5,
|
|
3
|
+
"source": "ws8-exploit-fixture:skip-assumed-bypass",
|
|
4
|
+
"note": "VERIFIER EXPLOIT (finding 2): a check with status 'skip' resolves Surface status 'assumed' via the skip->assumed mapping. Pre-fix, WS8's `assertsPass || status==='assumed'` accepted it as a silent SESSION-LOCAL OK pass with no waiver, no reason, no approver. It MUST now be an unwaived-assumed divergence: 'assumed' alone is not a pass; it requires a documented waiver.",
|
|
5
|
+
"claims": [
|
|
6
|
+
{
|
|
7
|
+
"id": "c-skipped",
|
|
8
|
+
"claimType": "workflow.check.external",
|
|
9
|
+
"value": "skip",
|
|
10
|
+
"status": "assumed",
|
|
11
|
+
"subjectId": "exploit/load-test",
|
|
12
|
+
"facet": "flow-agents.workflow",
|
|
13
|
+
"subjectType": "workflow-check",
|
|
14
|
+
"fieldOrBehavior": "load test",
|
|
15
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
16
|
+
"updatedAt": "2026-07-02T00:00:00Z",
|
|
17
|
+
"impactLevel": "high",
|
|
18
|
+
"verificationPolicyId": "policy:workflow.check.external:attestation"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"evidence": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ev-skipped",
|
|
24
|
+
"claimId": "c-skipped",
|
|
25
|
+
"evidenceType": "attestation",
|
|
26
|
+
"method": "attestation",
|
|
27
|
+
"sourceRef": "exploit/evidence.json",
|
|
28
|
+
"excerptOrSummary": "load test skipped",
|
|
29
|
+
"observedAt": "2026-07-02T00:00:00Z",
|
|
30
|
+
"collectedBy": "flow-agents/workflow-sidecar",
|
|
31
|
+
"passing": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"policies": [
|
|
35
|
+
{
|
|
36
|
+
"id": "policy:workflow.check.external:attestation",
|
|
37
|
+
"claimType": "workflow.check.external",
|
|
38
|
+
"requiredEvidence": ["attestation"],
|
|
39
|
+
"acceptanceCriteria": ["A verified verification event must support a workflow.check.external claim."],
|
|
40
|
+
"reviewAuthority": "system",
|
|
41
|
+
"validityRule": { "kind": "manual" },
|
|
42
|
+
"stalenessTriggers": [],
|
|
43
|
+
"conflictRules": [],
|
|
44
|
+
"impactLevel": "high"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"events": [
|
|
48
|
+
{
|
|
49
|
+
"id": "evt-skipped",
|
|
50
|
+
"claimId": "c-skipped",
|
|
51
|
+
"status": "assumed",
|
|
52
|
+
"actor": "flow-agents/workflow-sidecar",
|
|
53
|
+
"method": "attestation",
|
|
54
|
+
"evidenceIds": ["ev-skipped"],
|
|
55
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
56
|
+
"verifiedAt": "2026-07-02T00:00:00Z"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 5,
|
|
3
|
+
"source": "ws8-exploit-fixture:status-misassertion",
|
|
4
|
+
"note": "EXPLOIT (finding 3): a session-local claim hand-asserts status 'verified' while the bundle's OWN evidence/events do not derive verified (no verified event → Surface derives 'proposed'). The reconciler must re-derive CI-side and NEVER trust claim.status verbatim; the asserted/derived mismatch is a status-misassertion divergence.",
|
|
5
|
+
"claims": [
|
|
6
|
+
{
|
|
7
|
+
"id": "c-lied-status",
|
|
8
|
+
"claimType": "workflow.check.external",
|
|
9
|
+
"value": "pass",
|
|
10
|
+
"status": "verified",
|
|
11
|
+
"subjectId": "exploit/manual-review",
|
|
12
|
+
"facet": "flow-agents.workflow",
|
|
13
|
+
"subjectType": "workflow-check",
|
|
14
|
+
"fieldOrBehavior": "manual review claimed verified without a verified event",
|
|
15
|
+
"createdAt": "2026-07-02T00:00:00Z",
|
|
16
|
+
"updatedAt": "2026-07-02T00:00:00Z",
|
|
17
|
+
"impactLevel": "high",
|
|
18
|
+
"verificationPolicyId": "policy:workflow.check.external:human_attestation"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"evidence": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ev-lied-status",
|
|
24
|
+
"claimId": "c-lied-status",
|
|
25
|
+
"evidenceType": "human_attestation",
|
|
26
|
+
"method": "attestation",
|
|
27
|
+
"sourceRef": "exploit/evidence.json",
|
|
28
|
+
"excerptOrSummary": "reviewer note",
|
|
29
|
+
"observedAt": "2026-07-02T00:00:00Z",
|
|
30
|
+
"collectedBy": "flow-agents/workflow-sidecar",
|
|
31
|
+
"passing": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"policies": [
|
|
35
|
+
{
|
|
36
|
+
"id": "policy:workflow.check.external:human_attestation",
|
|
37
|
+
"claimType": "workflow.check.external",
|
|
38
|
+
"requiredEvidence": ["human_attestation"],
|
|
39
|
+
"acceptanceCriteria": ["A verified verification event must support a workflow.check.external claim."],
|
|
40
|
+
"reviewAuthority": "system",
|
|
41
|
+
"validityRule": { "kind": "manual" },
|
|
42
|
+
"stalenessTriggers": [],
|
|
43
|
+
"conflictRules": [],
|
|
44
|
+
"impactLevel": "high"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"events": []
|
|
48
|
+
}
|