This repository was archived by the owner on May 4, 2026. It is now read-only.
TCK-00614: FAC projection-model merge safety: required status simplification + regression tests#712
Merged
Merged
Conversation
added 2 commits
February 16, 2026 20:20
Collaborator
Author
# apm2-review-verdict:v1
schema: apm2.review.verdict.v1
pr: 712
sha: 5ad45d7631ae91b1ed04ec6c4d2d9ae8710042ee
updated_at: 2026-02-17T04:48:31Z
dimensions:
code-quality:
decision: deny
reason: 'FAIL: 2 blocker, 1 major findings'
set_by: ubuntu
set_at: 2026-02-17T04:48:12Z
security:
decision: deny
reason: 'FAIL: 1 blocker finding. Mandatory sandbox hardening hash binding is missing in the path in , violating security invariant INV-SBX-002.'
set_by: ubuntu
set_at: 2026-02-17T04:48:31Z
findings:
- finding_id: f-712-code_quality-1771303662155013-0
type: code-quality
severity: BLOCKER
summary: 'Missing requirement: Regression tests assert workflow/ruleset invariants and pass'
risk: The ticket requires passing regression tests as a merge-safety guard; without execution evidence, the guard can be assumed while failing.
impact: A broken CI-policy invariant test can allow unsafe workflow/ruleset drift to merge, reintroducing fail-open behavior.
location: documents/work/tickets/TCK-00614.yaml
body: The diff adds the ci_merge_policy_invariants test file, but the change set does not include verifiable evidence that this test was executed successfully for this PR. TCK-00614 definition_of_done explicitly requires the regression tests to pass. Add machine-verifiable evidence for cargo test -p apm2-cli --test ci_merge_policy_invariants tied to this PR run.
evidence_digest: de1db1f5b8dd3311dbe95b49bdc579396ffd0da4674d63ddc7852eb2de9a284b
evidence_pointer: none
timestamp: 2026-02-17T04:47:42Z
- finding_id: f-712-code_quality-1771303672108972-0
type: code-quality
severity: BLOCKER
summary: 'Missing requirement: Workspace validation commands complete successfully'
risk: Without proof that full workspace validation ran clean, regressions in linting, docs, or tests can ship behind policy-only changes.
impact: Main can accept CI-policy edits while hidden build or test breakage remains unresolved, increasing integration risk.
location: documents/work/tickets/TCK-00614.yaml
body: TCK-00614 definition_of_done requires successful completion of cargo fmt --all, cargo test -p apm2-cli, cargo clippy --workspace --all-targets --all-features -- -D warnings, cargo doc --workspace --no-deps, and cargo test --workspace. The diff contains no verifiable execution evidence or receipt proving this validation set passed for this PR. Attach machine-verifiable proof for the full command set.
evidence_digest: 71fcfa580efbc0fe72d681aa402c7240541809a8c9a467895d88b4967f623f4d
evidence_pointer: none
timestamp: 2026-02-17T04:47:52Z
- finding_id: f-712-code_quality-1771303683805257-0
type: code-quality
severity: MAJOR
summary: Projection-policy regression test can miss forbidden workflow drift
risk: The guard test uses narrow substring checks, so policy-violating workflow edits can pass while reintroducing forbidden PR-triggered or CLI-computed FAC paths.
impact: Future changes can silently weaken fail-closed merge protection and recreate the same incident class this ticket is intended to prevent.
location: crates/apm2-cli/tests/ci_merge_policy_invariants.rs
body: 'The test forge_workflow_does_not_compute_fac_with_rust_binary_or_pr_triggers only rejects pull_request_target, the exact text cargo run --quiet -p apm2-cli, and fac preflight. Counterexample: adding on: pull_request plus cargo run -p apm2-cli -- fac review ... would still satisfy this test. Strengthen the assertion by parsing the workflow trigger map and rejecting any PR event trigger (pull_request and pull_request_target), and by matching command intent (cargo run + apm2-cli + fac) instead of a single exact string variant.'
evidence_digest: cbb7d50cfa309c100844cf2eb569f329f38d6aa6b518fc294da55eada87b122c
evidence_pointer: none
timestamp: 2026-02-17T04:48:03Z
- finding_id: f-712-security-1771303671906769-0
type: security
severity: BLOCKER
summary: Mandatory sandbox hardening hash binding missing in execute_queued_gates_job
risk: Violation of mandatory security invariant INV-SBX-002. Gates jobs executed by the worker produce job receipts that do not cryptographically bind the sandbox hardening profile used during execution. An attacker could tamper with the node-local policy to disable hardening for gates execution, and the resulting job receipt would not reflect this compromise, creating a critical audit gap in the Forge Admission Cycle evidence trail.
impact: Critical loss of auditability and integrity binding for gates evidence. All gates evidence produced via the worker queue is affected. Authoritative verification of the execution environment security posture is impossible for these jobs.
location: crates/apm2-cli/src/commands/fac_worker.rs:1485
body: Update the signature of to accept and pass it to all internal calls of and . Ensure the call site in passes the hoisted to the function.
evidence_digest: 04d831e3f66faaeacae53992d5425e79d0f814cdaaaea156c943b47fab6fde5e
evidence_pointer: none
timestamp: 2026-02-17T04:47:51Z
- finding_id: f-712-security-1771303682700772-0
type: security
severity: BLOCKER
summary: Mandatory sandbox hardening hash binding missing in execute_queued_gates_job
risk: Violation of mandatory security invariant INV-SBX-002. Gates jobs executed by the worker produce job receipts that do not cryptographically bind the sandbox hardening profile used during execution. An attacker could tamper with the node-local policy to disable hardening for gates execution, and the resulting job receipt would not reflect this compromise, creating a critical audit gap in the Forge Admission Cycle evidence trail.
impact: Critical loss of auditability and integrity binding for gates evidence. All gates evidence produced via the worker queue is affected. Authoritative verification of the execution environment security posture is impossible for these jobs.
location: crates/apm2-cli/src/commands/fac_worker.rs:1485
body: 'Update the signature of `execute_queued_gates_job` to accept `sbx_hash: &str` and pass it to all internal calls of `emit_job_receipt` and `emit_job_receipt_with_observed_cost`. Ensure the call site in `process_job` passes the hoisted `sbx_hash` to the function.'
evidence_digest: fd335f03aa6655fef8d3baa2a75570d048e927e921475e109b9cb70303b238df
evidence_pointer: none
timestamp: 2026-02-17T04:48:02Z
- finding_id: f-712-security-1771303693250970-0
type: security
severity: MINOR
summary: Incomplete integrity binding for unsafe_direct flag in V1 receipts
risk: The function allows receipts to be verified using either the V1 or V2 hashing scheme. Since the V1 scheme explicitly excludes the field from the canonical preimage, an attacker who can modify receipts in the CAS can flip the flag without changing the V1 content hash. If the attacker also controls the non-authoritative receipt index, they can point to the tampered receipt using its V1 hash, effectively bypassing the V2 integrity binding for this field.
impact: Integrity of the flag cannot be guaranteed for receipts using the V1 hashing scheme. While this flag is currently only used for display purposes, it constitutes a structural weakness in the evidence integrity chain.
location: crates/apm2-core/src/fac/receipt_index.rs:731
body: Consider phasing out V1 hash support for new receipts and ensuring that any logic relying on explicitly checks that the receipt was verified using the V2 scheme.
evidence_digest: 5c40d1b42e8ebb2d1dd43f80d45b77b73953b53c6211f21e8a1dfb399e41488d
evidence_pointer: none
timestamp: 2026-02-17T04:48:13Z
- finding_id: f-712-security-1771303702434550-0
type: security
severity: MINOR
summary: Incomplete integrity binding for unsafe_direct flag in V1 receipts
risk: The `verify_receipt_integrity` function allows receipts to be verified using either the V1 or V2 hashing scheme. Since the V1 scheme explicitly excludes the `unsafe_direct` field from the canonical preimage, an attacker who can modify receipts in the CAS can flip the `unsafe_direct` flag without changing the V1 content hash. If the attacker also controls the non-authoritative receipt index, they can point to the tampered receipt using its V1 hash, effectively bypassing the V2 integrity binding for this field.
impact: Integrity of the `unsafe_direct` flag cannot be guaranteed for receipts using the V1 hashing scheme. While this flag is currently only used for display purposes, it constitutes a structural weakness in the evidence integrity chain.
location: crates/apm2-core/src/fac/receipt_index.rs:731
body: Consider phasing out V1 hash support for new receipts and ensuring that any logic relying on `unsafe_direct` explicitly checks that the receipt was verified using the V2 scheme.
evidence_digest: d095df9a5d334ad0e2ec44fb06487b39c703924b88ceeded88e0c76a6efd2f4f
evidence_pointer: none
timestamp: 2026-02-17T04:48:22Z |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
FAC Gate Status