@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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test_trust_reconcile_manifest.sh — WS8 (ADR 0020) manifest anti-gaming self-check.
|
|
3
|
+
#
|
|
4
|
+
# The reconcile manifest is evals/ci/run-baseline.sh's LANE_* registry (emitted via
|
|
5
|
+
# `--manifest-json`). This test proves the anti-gaming property design question 1 asked
|
|
6
|
+
# for — "a command in the manifest must actually run in a required lane" — holds by
|
|
7
|
+
# construction, and STAYS holding: it asserts the manifest id set and the set of checks
|
|
8
|
+
# invoked by .github/workflows/ci.yml's REQUIRED jobs are IDENTICAL. The advisory
|
|
9
|
+
# usage-feedback lane (continue-on-error, non-blocking) is excluded from BOTH the manifest and
|
|
10
|
+
# this required-set comparison (ADR 0020 iteration 2).
|
|
11
|
+
#
|
|
12
|
+
# 1. Every ci.yml `run-baseline.sh --check <slug>` invocation is a manifest entry.
|
|
13
|
+
# → fails when a CHECKS entry is removed from EVERY LANE_* array (it drops out of
|
|
14
|
+
# --manifest-json but ci.yml still invokes it): the anti-gaming coverage regresses.
|
|
15
|
+
# 2. Every manifest entry is invoked by a required ci.yml job.
|
|
16
|
+
# → fails when a manifest/lane command is not wired into any required lane.
|
|
17
|
+
#
|
|
18
|
+
# Mirrors evals/ci/antigaming-suite.sh's own rationale (a protection with no required-lane
|
|
19
|
+
# coverage is not a real protection) applied reflexively to the manifest itself.
|
|
20
|
+
#
|
|
21
|
+
# Deterministic, no model spend, self-cleaning.
|
|
22
|
+
# Usage: bash evals/integration/test_trust_reconcile_manifest.sh
|
|
23
|
+
|
|
24
|
+
set -uo pipefail
|
|
25
|
+
|
|
26
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
27
|
+
RUN_BASELINE="$ROOT/evals/ci/run-baseline.sh"
|
|
28
|
+
CI_YML="$ROOT/.github/workflows/ci.yml"
|
|
29
|
+
|
|
30
|
+
errors=0
|
|
31
|
+
_pass() { echo " PASS: $1"; }
|
|
32
|
+
_fail() { echo " FAIL: $1"; errors=$((errors + 1)); }
|
|
33
|
+
|
|
34
|
+
echo "=== WS8 manifest self-check: manifest (run-baseline.sh LANE_*) == ci.yml required --check set ==="
|
|
35
|
+
|
|
36
|
+
if [[ ! -f "$RUN_BASELINE" ]]; then _fail "run-baseline.sh not found at $RUN_BASELINE"; fi
|
|
37
|
+
if [[ ! -f "$CI_YML" ]]; then _fail "ci.yml not found at $CI_YML"; fi
|
|
38
|
+
|
|
39
|
+
# Manifest ids (only lane-covered checks are emitted).
|
|
40
|
+
MANIFEST_JSON="$(bash "$RUN_BASELINE" --manifest-json 2>/dev/null)"
|
|
41
|
+
MANIFEST_IDS="$(printf '%s' "$MANIFEST_JSON" | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>{const a=JSON.parse(d);for(const e of a){if(!e.lanes||!e.lanes.length){process.stderr.write("manifest entry with no lanes: "+e.id+"\n");process.exit(3);}console.log(e.id);}})' | sort -u)"
|
|
42
|
+
if [[ -z "$MANIFEST_IDS" ]]; then _fail "manifest is empty"; fi
|
|
43
|
+
|
|
44
|
+
# ci.yml required --check slugs. WS8 (ADR 0020, iteration 2): the usage-feedback lane is
|
|
45
|
+
# advisory (continue-on-error, non-blocking) and is intentionally EXCLUDED from the reconcile
|
|
46
|
+
# manifest, so its --check invocations are filtered out here too — the manifest is compared
|
|
47
|
+
# against the REQUIRED-lane --check set only. (All five usage-feedback checks slugify to the
|
|
48
|
+
# `usage-feedback-*` prefix and no required-lane check does, so the filter is exact.)
|
|
49
|
+
CI_SLUGS="$(grep -oE 'run-baseline\.sh --check [a-z0-9-]+' "$CI_YML" | awk '{print $NF}' | grep -v '^usage-feedback-' | sort -u)"
|
|
50
|
+
if [[ -z "$CI_SLUGS" ]]; then _fail "no required-lane run-baseline.sh --check invocations found in ci.yml"; fi
|
|
51
|
+
|
|
52
|
+
manifest_count="$(printf '%s\n' "$MANIFEST_IDS" | grep -c . )"
|
|
53
|
+
ci_count="$(printf '%s\n' "$CI_SLUGS" | grep -c . )"
|
|
54
|
+
echo " manifest entries: $manifest_count ; ci.yml --check invocations: $ci_count"
|
|
55
|
+
|
|
56
|
+
# Direction 1: every ci.yml --check slug must be a manifest entry.
|
|
57
|
+
missing_in_manifest="$(comm -23 <(printf '%s\n' "$CI_SLUGS") <(printf '%s\n' "$MANIFEST_IDS"))"
|
|
58
|
+
if [[ -z "$missing_in_manifest" ]]; then
|
|
59
|
+
_pass "every ci.yml required --check invocation is a manifest (lane-covered) entry"
|
|
60
|
+
else
|
|
61
|
+
_fail "ci.yml invokes checks that are NOT in the manifest (removed from every LANE_* array?): $(echo "$missing_in_manifest" | tr '\n' ' ')"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Direction 2: every manifest entry must be invoked by a required ci.yml job.
|
|
65
|
+
missing_in_ci="$(comm -23 <(printf '%s\n' "$MANIFEST_IDS") <(printf '%s\n' "$CI_SLUGS"))"
|
|
66
|
+
if [[ -z "$missing_in_ci" ]]; then
|
|
67
|
+
_pass "every manifest entry is invoked by a required ci.yml job (required-lane coverage by construction)"
|
|
68
|
+
else
|
|
69
|
+
_fail "manifest entries NOT wired into any required ci.yml job: $(echo "$missing_in_ci" | tr '\n' ' ')"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
echo ""
|
|
73
|
+
if [[ $errors -eq 0 ]]; then
|
|
74
|
+
echo "test_trust_reconcile_manifest: all checks passed."
|
|
75
|
+
exit 0
|
|
76
|
+
else
|
|
77
|
+
echo "test_trust_reconcile_manifest: $errors check(s) failed."
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test_trust_reconcile_mixed_bundle.sh — WS8 (ADR 0020) END-TO-END PROOF.
|
|
3
|
+
#
|
|
4
|
+
# The literal capability PR #264 could not demonstrate: a single trust.bundle carrying
|
|
5
|
+
# honest, granular, MIXED evidence passes the REAL Trust Reconcile entrypoint:
|
|
6
|
+
# - one CI-reconcilable claim (evidenceType test_output; execution.label is a real
|
|
7
|
+
# reconcile-manifest command — run-baseline.sh's "Content boundary" check),
|
|
8
|
+
# - one honest session-local claim (human_attestation, Surface-verified, never claimed
|
|
9
|
+
# to be CI-re-runnable, no waiver needed),
|
|
10
|
+
# - one explicitly-waived accepted_gap claim (metadata.waiver, printed loudly).
|
|
11
|
+
#
|
|
12
|
+
# Runs the REAL scripts/ci/trust-reconcile.js (not a mock), resolving the manifest from
|
|
13
|
+
# THIS repo's live run-baseline.sh registry (--repo-root at the repo root). The manifest
|
|
14
|
+
# command is re-run FRESH by the reconciler; the session-local claim is accepted on its
|
|
15
|
+
# Surface status; the waiver is printed on a distinct WAIVED line. Exit 0.
|
|
16
|
+
#
|
|
17
|
+
# The fresh-verify (Step 1) command is a trivial pass so the proof is fast and focused on
|
|
18
|
+
# the reconcile/classification/waiver behavior (same pattern as the other reconcile evals);
|
|
19
|
+
# the manifest-matched command is genuinely re-run against the real checkout.
|
|
20
|
+
#
|
|
21
|
+
# Deterministic, no model spend, self-cleaning.
|
|
22
|
+
# Usage: bash evals/integration/test_trust_reconcile_mixed_bundle.sh
|
|
23
|
+
|
|
24
|
+
set -uo pipefail
|
|
25
|
+
|
|
26
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
27
|
+
RECONCILE="$ROOT/scripts/ci/trust-reconcile.js"
|
|
28
|
+
FIXTURE="$ROOT/evals/fixtures/trust-reconcile-mixed-bundle/mixed-bundle.json"
|
|
29
|
+
|
|
30
|
+
errors=0
|
|
31
|
+
_pass() { echo " PASS: $1"; }
|
|
32
|
+
_fail() { echo " FAIL: $1"; errors=$((errors + 1)); }
|
|
33
|
+
|
|
34
|
+
echo "=== WS8 end-to-end proof: mixed-evidence bundle passes the real Trust Reconcile ==="
|
|
35
|
+
|
|
36
|
+
if [[ ! -f "$FIXTURE" ]]; then _fail "fixture not found at $FIXTURE"; fi
|
|
37
|
+
|
|
38
|
+
# Real reconciler entrypoint. Fresh-verify is a trivial pass; the manifest is resolved
|
|
39
|
+
# from this repo's live run-baseline.sh registry (via --repo-root "$ROOT").
|
|
40
|
+
out="$(TRUST_RECONCILE_COMMANDS="node -e 'process.exit(0)'" \
|
|
41
|
+
node "$RECONCILE" --bundle "$FIXTURE" --repo-root "$ROOT" 2>&1)"
|
|
42
|
+
exit_code=$?
|
|
43
|
+
|
|
44
|
+
echo "----- reconciler output -----"
|
|
45
|
+
echo "$out"
|
|
46
|
+
echo "-----------------------------"
|
|
47
|
+
|
|
48
|
+
if [[ $exit_code -eq 0 ]]; then
|
|
49
|
+
_pass "mixed-evidence bundle passes the real Trust Reconcile (exit 0) — the capability PR #264 lacked"
|
|
50
|
+
else
|
|
51
|
+
_fail "expected exit 0, got $exit_code"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
if echo "$out" | grep -q "RECONCILED: 'npm run check:content-boundary --'"; then
|
|
55
|
+
_pass "the test_output claim reconciled against its manifest command (fresh CI re-run)"
|
|
56
|
+
else
|
|
57
|
+
_fail "expected a RECONCILED line for the manifest-matched command"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
if echo "$out" | grep -q "ATTESTED (not independently verifiable at L0): 'c-session-local' (workflow.check.external) evidenceType=human_attestation"; then
|
|
61
|
+
_pass "the human_attestation claim was accepted as session-local, loudly marked ATTESTED (not flagged not-run)"
|
|
62
|
+
else
|
|
63
|
+
_fail "expected an ATTESTED (not independently verifiable at L0) line for the human_attestation claim"
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# WS8 iteration-4 (converged finding): the honest mixed bundle's ATTESTED claim must also be
|
|
67
|
+
# counted in the loud summary line, not just printed inline — proves the count is real, not
|
|
68
|
+
# just cosmetic per-claim decoration.
|
|
69
|
+
if echo "$out" | grep -q "1 attested claim(s) accepted without independent verification"; then
|
|
70
|
+
_pass "the attested-claim summary count line is present and correct (1)"
|
|
71
|
+
else
|
|
72
|
+
_fail "expected the '1 attested claim(s) accepted without independent verification' summary line"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
if echo "$out" | grep -q "WAIVED:"; then
|
|
76
|
+
_pass "the accepted_gap claim was printed on a distinct, loud WAIVED line"
|
|
77
|
+
else
|
|
78
|
+
_fail "expected a WAIVED line for the waived accepted_gap claim"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Guard: the manifest must have resolved from the live run-baseline.sh registry, not the
|
|
82
|
+
# legacy single-command fallback (proves the resolver is wired to the real registry).
|
|
83
|
+
if echo "$out" | grep -qE "manifest: [0-9]+ entries \(source: (package.json:trust-reconcile-manifest|evals/ci/run-baseline.sh)"; then
|
|
84
|
+
_pass "manifest resolved from the live run-baseline.sh registry (not a synthetic one)"
|
|
85
|
+
else
|
|
86
|
+
_fail "manifest did not resolve from the live registry: $(echo "$out" | grep -i manifest | head -1)"
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
echo ""
|
|
90
|
+
if [[ $errors -eq 0 ]]; then
|
|
91
|
+
echo "test_trust_reconcile_mixed_bundle: all checks passed."
|
|
92
|
+
exit 0
|
|
93
|
+
else
|
|
94
|
+
echo "test_trust_reconcile_mixed_bundle: $errors check(s) failed."
|
|
95
|
+
exit 1
|
|
96
|
+
fi
|