Repository navigation
feat(cli): name failing assets and drift cause on actor_guidance_unverified refusals - #436
Conversation
Fleet review (glm)Lens: requirements + adversarial. The diff implements the #384 acceptance criterion end to end: recordedDriftAssets (via the stacked #435 core) now makes content drift the cause when an asset drifted in both content and mode, and the CLI renderer emits the mode facts as an independent flag, so the evidence-stage refusal no longer hides content drift behind mode drift. The exact combined line is pinned by TestUpdateGuidanceEvidenceRefusalNamesContentBeforeModeDrift, matching the correction issue's failure scenario (bytes appended, mode 0640 vs canonical 0600). The stable status line, exit code, and opaque stderr contract are unchanged; paths stay runtime-relative and are asserted non-absolute; refusal writes nothing (tree-compared before/after in every refusal test). Docs updated with the asset= line format and shadow_role cause. No blocking findings. Suggestion (1)
Verdict: ready to merge |
Fleet review (qwen38)Lens: evidence. Reviewed head 1560ea2 (context diff matches the GitHub files API exactly: docs/operating.md, internal/cli/update.go, internal/cli/update_guidance_test.go). Against correction issue #384 the acceptance criterion holds at the stacked state: the substantive ordering fix lives in the base branch fix/384-guidance-drift-core (core PR #435), where recordedDriftAssets now tests content drift before mode drift, and this head adds the CLI renderer that keeps cause=content_drift plus the mode facts, pinned end-to-end by TestUpdateGuidanceEvidenceRefusalNamesContentBeforeModeDrift through the real Suggestion (3)
Verdict: ready to merge |
Post-merge QA (glm)Lens: requirements + adversarial. The diff implements the #384 acceptance criterion end to end: recordedDriftAssets (via the stacked #435 core) now makes content drift the cause when an asset drifted in both content and mode, and the CLI renderer emits the mode facts as an independent flag, so the evidence-stage refusal no longer hides content drift behind mode drift. The exact combined line is pinned by TestUpdateGuidanceEvidenceRefusalNamesContentBeforeModeDrift, matching the correction issue's failure scenario (bytes appended, mode 0640 vs canonical 0600). The stable status line, exit code, and opaque stderr contract are unchanged; paths stay runtime-relative and are asserted non-absolute; refusal writes nothing (tree-compared before/after in every refusal test). Docs updated with the asset= line format and shadow_role cause. No blocking findings. Suggestion (1)
Verdict: clean |
Post-merge QA (deepseek)Lens: evidence + test design. This is the CLI half of the #384 correction and it lands on top of the installcoord ordering fix: at the #436 merge commit Suggestion (1)
Question (1)
Verdict: clean |
Pull Request
Linked Issue
Fixes #384
PR Type
type:featureFeaturetype:bugBug fixtype:docsDocumentationtype:refactorRefactoringtype:choreMaintenancetype:breaking-changeBreaking changeSummary
Second of two PRs that replace #383.
updaterefusals foractor_guidance_unverifiednow print oneasset=line per failing asset with its path and drift cause, and the evidence stage reports content drift before mode drift (#384).Changes
internal/cli/update.go: printsasset=<id> path=<path> cause=<cause> ...lines onactor_guidance_unverifiedrefusals.internal/cli/update_guidance_test.go: CLI tests throughcortex update --runtime pi, includingTestUpdateGuidanceEvidenceRefusalNamesContentBeforeModeDrift.docs/operating.md: documents the refusal and itsasset=lines.Focused Tests
cause=mode_drift mode_drift=true ...instead ofcause=content_drift action=conflict mode_drift=true ...TestUpdateGuidanceRefusalNamesModeDrift,TestUpdateGuidanceRefusalNamesDriftedContentgit diffof this branch against the resolved #383 treego vet ./...;go test ./... -count=1;python3 -m unittest discover -s testsFailed or not done: none.
Runtime Harness
N/A: CLI output change covered by CLI tests.
Rollback
Revert the single commit.
Chain Dependencies / Out of Scope
installcoordcore PR; merge that first, then retarget this one tomain.Checklist
status:approved.type:*label is applied.