diff --git a/corpus/skills/cat-mode/SKILL.md b/corpus/skills/cat-mode/SKILL.md index 3464274d..03af40d6 100644 --- a/corpus/skills/cat-mode/SKILL.md +++ b/corpus/skills/cat-mode/SKILL.md @@ -188,7 +188,7 @@ What happens to a number once it exists: - **Schema before UI.** Required identity properties plus a green canary before the first insight or notebook PATCH; split the forward-stamp PR from the historical-backfill PR. - **Claim a chart gap fixed only after naming write vs enrich ownership** (local vs peer vs fleet). - **Write a thrash checkpoint before attaching new scope:** after two same-type interventions or the first live backfill, record tier and canary status first. -- **When a same-type miss forces a working-style catch mid analytics thrash, stop feature PRs until that catch is locked** (for example the first `intervention-must-automate` flag, an explicit `/automate-me`, or a same-type restatement). +- **Stop analytics feature iteration and lock the class catch before more analytics PRs when automate is mandated mid thrash** (for example the first `intervention-must-automate` flag, an explicit `/automate-me`, or a same-type restatement). Each rule's full text: [references/verify.md](references/verify.md). diff --git a/corpus/skills/cat-mode/references/verify.md b/corpus/skills/cat-mode/references/verify.md index 0438f539..0eba6ed2 100644 --- a/corpus/skills/cat-mode/references/verify.md +++ b/corpus/skills/cat-mode/references/verify.md @@ -214,7 +214,8 @@ defaults above and [[principle-push-not-poll]]; they do not replace them. of a run, write the current tier and canary status before attaching new stack publication or plan scope. A checkpoint is a receipt, not a status ping. -- **When a same-type miss forces a working-style catch mid analytics thrash, stop feature PRs until that catch is locked** (for example the +- **Stop analytics feature iteration and lock the class catch before more + analytics PRs when automate is mandated mid thrash** (for example the first `intervention-must-automate` flag, an explicit `/automate-me`, or a same-type restatement). The standing default that would have prevented the miss lands first; dashboard, backfill, and insight work wait until @@ -226,4 +227,4 @@ defaults above and [[principle-push-not-poll]]; they do not replace them. resume when the artifact arrives. Chat process greps, log tails, and wait-and-repeat shell loops are the poll defect [[principle-push-not-poll]] already forbids — this rule names the - ownership hand-off, not another check-wait-repeat count. \ No newline at end of file + ownership hand-off, not another check-wait-repeat count. diff --git a/tests/test_cat_mode.py b/tests/test_cat_mode.py index c5c065d3..5b136742 100644 --- a/tests/test_cat_mode.py +++ b/tests/test_cat_mode.py @@ -377,7 +377,7 @@ def test_skill_names_thrash_checkpoint_defaults(self): self.assertIn("Claim a chart gap fixed only after naming write vs enrich ownership", text) self.assertIn("Write a thrash checkpoint before attaching new scope", text) self.assertIn( - "When a same-type miss forces a working-style catch mid analytics thrash, stop feature PRs until that catch is locked", + "Stop analytics feature iteration and lock the class catch before more analytics PRs when automate is mandated mid thrash", text, ) self.assertIn("Do not race publication against a live long job in the same thread", text) @@ -397,10 +397,10 @@ def test_verify_reference_carries_analytics_thrash_checkpoints(self): self.assertIn("Write a thrash checkpoint before attaching new scope", text) self.assertIn("intervention-must-automate", text) self.assertIn( - "When a same-type miss forces a working-style catch mid analytics thrash, stop feature PRs until that catch is locked", + "Stop analytics feature iteration and lock the class catch before more", text, ) - self.assertIn("same-type miss forces a working-style catch", text) + self.assertIn("when automate is mandated mid thrash", text) self.assertIn( "Million-row or multi-host backfills are owned by a durable runner", text, @@ -489,6 +489,7 @@ def test_every_referenced_skill_still_exists(self): "ls", "owner-serve", "strace", + "intervention-must-automate", # Absolute-negative words in backticks, not skill names. "only", "never",