Skip to content

Commit dba85d4

Browse files
committed
config: record learnings M606 and M607 - workflow bypass violations
M606: Agent presented merge approval gate without squashing commits first M607: Agent used git update-ref instead of work-merge-agent (recurrence of M579) Both require hook-level prevention (hook files not yet created).
1 parent 203c38f commit dba85d4

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

.cat/retrospectives/mistakes-2026-03.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3099,5 +3099,47 @@
30993099
"prevention_verified" : false,
31003100
"recurrence_of" : null,
31013101
"correct_behavior" : ""
3102+
}, {
3103+
"id" : "M606",
3104+
"timestamp" : "2026-03-26T22:00:00Z",
3105+
"category" : "protocol_violation",
3106+
"description" : "Agent presented the merge approval gate (AskUserQuestion) without first squashing commits by topic, violating the MANDATORY requirement in CLAUDE.md and work-with-issue-agent. The agent was running outside the formal work-with-issue orchestration flow and directly called AskUserQuestion after implementation, skipping the mandatory squash step.",
3107+
"root_cause" : "HOOK ABSENT: No enforcement hook exists to block AskUserQuestion from being called for merge approval when commits have not been squashed. The CLAUDE.md rule 'MANDATORY: Squash commits by topic before EVERY approval gate' is documentation-level only. The agent bypassed the formal work-with-issue-agent orchestration (which has Step 7/8 squash+rebase before gate) by operating in ad-hoc mode after the implement phase, presenting the gate directly without squashing.",
3108+
"rca_method" : "C",
3109+
"rca_method_name" : "causal-barrier",
3110+
"cause_signature" : "compliance_failure:hook_absent:issue_workflow",
3111+
"prevention_type" : "hook",
3112+
"prevention_path" : "",
3113+
"pattern_keywords" : [ "squash_before_approval_gate", "approval_gate_without_squash", "merge_workflow_bypass", "ad_hoc_merge" ],
3114+
"prevention_implemented" : false,
3115+
"prevention_verified" : false,
3116+
"recurrence_of" : null,
3117+
"prevention_quality" : {
3118+
"verification_type" : "positive",
3119+
"fragility" : "low",
3120+
"catches_variations" : true
3121+
},
3122+
"correct_behavior" : "Before presenting any AskUserQuestion for merge approval, squash commits by topic using cat:git-squash-agent. The formal path is to use cat:work-merge-agent which enforces this in Steps 7-11. If operating outside the formal workflow, squash explicitly before the gate."
3123+
}, {
3124+
"id" : "M607",
3125+
"timestamp" : "2026-03-26T22:15:00Z",
3126+
"category" : "protocol_violation",
3127+
"description" : "After user approved the merge gate, agent used 'git update-ref refs/heads/v2.1 <branch>' instead of invoking cat:work-merge-agent to perform the merge. This bypasses the formal merge workflow which handles worktree cleanup, lock release, state updates, and branch deletion.",
3128+
"root_cause" : "HOOK ABSENT (RECURRENCE of M579): M579 recorded this same pattern and recorded prevention as BlockDirectBranchPointerModification.java, but that file was never created. The hook file does not exist in client/src/main/java/io/github/cowwoc/cat/hooks/bash/, so git update-ref remains unblocked. The agent was also operating outside the formal work-with-issue-agent flow, so even proper skill infrastructure was bypassed.",
3129+
"rca_method" : "C",
3130+
"rca_method_name" : "causal-barrier",
3131+
"cause_signature" : "compliance_failure:hook_absent:git_operations",
3132+
"prevention_type" : "hook",
3133+
"prevention_path" : "client/src/main/java/io/github/cowwoc/cat/hooks/bash/BlockDirectBranchPointerModification.java",
3134+
"pattern_keywords" : [ "git_update_ref", "merge_bypass", "work_merge_agent_bypass", "block_direct_branch_pointer" ],
3135+
"prevention_implemented" : false,
3136+
"prevention_verified" : false,
3137+
"recurrence_of" : "M579",
3138+
"prevention_quality" : {
3139+
"verification_type" : "positive",
3140+
"fragility" : "low",
3141+
"catches_variations" : true
3142+
},
3143+
"correct_behavior" : "Use cat:work-merge-agent to perform merges. Never use git update-ref to directly move branch pointers. The BlockDirectBranchPointerModification hook (M579 prevention, still unimplemented) must be created to block 'git update-ref refs/heads/' commands."
31023144
} ]
31033145
}

0 commit comments

Comments
 (0)