Repository navigation
Conversation
…rified Actor guidance preflight and re-check refusals now expose detached per-asset evidence (relative path, content vs mode drift with observed and canonical modes, bounded shadow role/location) and the update writer prints one asset= line per failing asset before the unchanged status=conflict reason=actor_guidance_unverified line (issue #373, specs S2/S4/S5).
…stall, and update refusals
Fleet review (deepseek)Lens: evidence + test design. PR #383 (part 2 of the #373 chain) adds a detached ActorGuidanceRefusal record (stage, per-asset cause, observed/canonical modes, bounded shadow role/location) and renders additive Suggestion (2)
Question (1)
Verdict: ready to merge |
Fleet review (glm)Lens: requirements + adversarial. The diff satisfies the #373 update criterion: each refused actor-guidance update now prints per-asset diagnostics naming the failing file and its cause (content drift, mode drift with observed/canonical modes, or shadow role with bounded location), while keeping the stable reason token, exit 3, opaque stderr, and no-write behavior, all pinned by new coord and CLI tests including the combined content+mode case. Two minor docs/implementation mismatches and one evidence-stage cause-merging question remain; none blocks merge. Suggestion (2)
Question (1)
Verdict: ready to merge |
Fleet review (qwen38)Lens: evidence. Second-line review of part 2 of the #373 chain (actor_guidance_unverified per-asset diagnostics). The evidence design is strong overall: installcoord tests pin the refusing stage, per-asset cause and mode facts, the detached/evidence-only invariant (report and proof stay unusable, refusal cannot be mutated back), and tree-comparison proof that a refusal never writes; CLI tests pin exit 3, empty stderr, the stable reason token, relative-only paths, and no writes. Two gaps where the PR's stated claims outrun its evidence: (1) on the evidence-stage refusal path, an asset that drifted in BOTH content and mode is reported as cause=mode_drift only — the content-drift fact is dropped, which contradicts the PR body's 'both facts are reported' claim and the conflict-path behavior the PR itself pins in a test, and it can re-create the trial-and-error loop issue #373 exists to end; (2) the body claims the apply re-check gate now carries refusal evidence, but no hunk touches the re-check code and no end-to-end test exercises it (every new CLI refusal fails at preflight, before the re-check). Blocking (1)
Suggestion (1)
Question (1)
Verdict: not ready |
Fleet review (glmflash)Lens: adversarial. The additive asset= diagnostics are well-built at the CLI layer: writeActorGuidanceRefusal keeps the header, stable status token, empty stderr, and exit 3 intact; paths stay runtime-relative and are omitted rather than invented when the candidate has no file for the identity; the detached refusal record is tested against mutation and never grants authority; and the combined content+mode drift case is correctly reported at the conflict stage with both facts. The adversarial pass found one real inconsistency between the two refusal-capture paths: at the conflict stage a both-drifted asset keeps cause=content_drift and adds the mode facts, but at the evidence stage recordedDriftAssets makes mode drift take precedence in its switch and silently drops the content-drift fact entirely — the renderer for cause=mode_drift prints only the two modes, so tampered bytes in an actor guidance file are hidden behind a chmod-level diagnosis. The docs added by this PR also describe the output in the wrong order. Blocking (1)
Suggestion (1)
Verdict: not ready |
Fleet review (mimo)Lens: requirements. Part 2 wires asset-level refusal evidence into the guidance preflight gate with RED/GREEN tests at both layers, satisfying issue #373 criterion 2 for every Blocking (1)
Suggestion (3)
Verdict: not ready |
Fixes #373
Part note: part 2 of the 2-PR chain; depends on #382 — the install/uninstall conflict path diagnostics merge first
Problem
cortex updatecollapses every actor-guidance refusal intostatus=conflict reason=actor_guidance_unverifiedwith no indication of which file failed verification or why: content drift vs mode drift (issue #373, item 2).Change
PreflightActorGuidanceand its re-check gate now carry detached refusal evidence (relative path, cause, observed/canonical modes, bounded shadow role/location), and the update writer prints oneasset=<logical> path=<relative>line per failing asset before the unchanged status line:cause=content_driftwithaction=conflictfor byte drift,cause=mode_driftwithobserved_mode=/canonical_mode=for permission drift (also fires for content-drifting assets whose mode also drifted: both facts are reported),cause=shadow_rolewith the shadow location for externally authored files under Cortex-owned identities.The
reason=actor_guidance_unverifiedtoken, exit 3, stderr opaqueness, and the status line shape are unchanged; theasset=lines are purely additive. Paths are runtime-relative. Docs note added.Test
RED/GREEN at both layers: installcoord tests pin the refusing stage, per-asset cause/mode facts, shadow role/location, and that the refusal record is evidence-only (report/proof stay unusable); CLI tests cover content drift, mode drift, combined content+mode drift, and shadow refusal, asserting exit 3, empty stderr, the stable reason token, relative-only paths, and no writes (tree comparisons). Suites green; the two pre-existing environment-dependent CLI failures behave identically to main.