From d38be1bfb4a8818f46934af81696b6e351315b80 Mon Sep 17 00:00:00 2001 From: Invoker Bot Date: Sat, 12 Sep 2026 02:30:19 +0000 Subject: [PATCH 1/3] =?UTF-8?q?invoker:=20wf-1789161335022-5/implement-spl?= =?UTF-8?q?it-scope-hook=20=E2=80=94=20Review=20claim:=20-=20A=20new=20cat?= =?UTF-8?q?stack=20hook=20injects=20a=20reminder=20to=20read=20the=20PR-sl?= =?UTF-8?q?icing=20skill=20on=20prompts=20that=20plan=20multi-PR=20or=20mu?= =?UTF-8?q?lti-slice=20work,=20for=20Claude,=20Codex,=20and=20Cursor.=20Re?= =?UTF-8?q?view=20lane:=20-=20behavior=20Safety=20invariant:=20-=20Inject-?= =?UTF-8?q?only=20and=20fail-open;=20the=20hook=20never=20blocks=20a=20too?= =?UTF-8?q?l=20and=20prints=20nothing=20on=20prompts=20that=20do=20not=20m?= =?UTF-8?q?atch.=20Effectiveness=20measurement:=20-=20`python3=20-m=20unit?= =?UTF-8?q?test=20discover=20-s=20engine/hooks/split-scope/tests=20-v`=20e?= =?UTF-8?q?xits=200=20with=20at=20least=20three=20firing=20prompts=20and?= =?UTF-8?q?=20three=20silent=20prompts.=20Slice=20rationale:=20-=20One=20h?= =?UTF-8?q?ook=20with=20its=20detector,=20entrypoints,=20installers,=20and?= =?UTF-8?q?=20tests;=20the=20skill=20text=20it=20points=20at=20landed=20in?= =?UTF-8?q?=20workflow=201.=20Architectural=20effect:=20-=20Adds=20one=20p?= =?UTF-8?q?rompt-time=20injector=20under=20engine/hooks/split-scope,=20reg?= =?UTF-8?q?istered=20by=20install.sh=20for=20Claude,=20Cursor,=20and=20Cod?= =?UTF-8?q?ex.=20Goal:=20-=20Make=20product/skills/split-scope=20load=20on?= =?UTF-8?q?=20planning=20prompts=20without=20relying=20on=20the=20model=20?= =?UTF-8?q?to=20choose=20it.=20Motivation:=20-=20The=20skill=20is=20only?= =?UTF-8?q?=20description-triggered=20today,=20so=20multi-PR=20plans=20get?= =?UTF-8?q?=20written=20without=20it.=20Alternative=20considerations:=20-?= =?UTF-8?q?=20Option=20A=20(chosen):=20a=20new=20hook=20shaped=20like=20bu?= =?UTF-8?q?ild-the-lever=20(regex=20on=20the=20prompt,=20inject=20a=20remi?= =?UTF-8?q?nder).=20-=20Option=20B:=20extend=20engine/hooks/playbook-route?= =?UTF-8?q?r;=20rejected=20because=20it=20only=20fires=20on=20explicit=20"?= =?UTF-8?q?run=20"=20prompts=20and=20its=20fixtures=20deliberately?= =?UTF-8?q?=20keep=20split-scope=20silent.=20-=20Option=20C:=20remind=20at?= =?UTF-8?q?=20PR-publish=20time=20via=20pr-schema-gate;=20rejected=20becau?= =?UTF-8?q?se=20the=20commits=20already=20exist=20by=20then.=20Implementat?= =?UTF-8?q?ion=20details:=20-=20Create=20the=20hook=20directory=20named=20?= =?UTF-8?q?in=20Files,=20shaped=20like=20engine/hooks/build-the-lever,=20a?= =?UTF-8?q?nd=20wire=20it=20into=20install.sh=20and=20tests/test=5Finstall?= =?UTF-8?q?.py=20the=20same=20way=20build-the-lever=20is=20wired.=20Non-go?= =?UTF-8?q?als:=20-=20No=20change=20to=20product/skills/split-scope,=20bui?= =?UTF-8?q?ld-the-lever,=20playbook-router,=20or=20pr-schema-gate.=20-=20N?= =?UTF-8?q?o=20edits=20to=20the=20repo-root=20README.md=20or=20docs/ecosys?= =?UTF-8?q?tem.md=20tables.=20-=20No=20blocking=20behavior.=20Layer:=20dom?= =?UTF-8?q?ain=20Feature=20state:=20active=20Files:=20-=20engine/hooks/spl?= =?UTF-8?q?it-scope/detect.py=20-=20engine/hooks/split-scope/claude=5Fprom?= =?UTF-8?q?pt=5Fsubmit.py=20-=20engine/hooks/split-scope/codex=5Fprompt=5F?= =?UTF-8?q?submit.py=20-=20engine/hooks/split-scope/cursor=5Fbefore=5Fsubm?= =?UTF-8?q?it.py=20-=20engine/hooks/split-scope/cursor=5Fpost=5Ftool=5Fuse?= =?UTF-8?q?.py=20-=20engine/hooks/split-scope/state.py=20-=20engine/hooks/?= =?UTF-8?q?split-scope/install=5Fclaude=5Fhook.py=20-=20engine/hooks/split?= =?UTF-8?q?-scope/install=5Fcodex=5Fhook.py=20-=20engine/hooks/split-scope?= =?UTF-8?q?/install=5Fcursor=5Fhook.py=20-=20engine/hooks/split-scope/clau?= =?UTF-8?q?de.prompt.hook.json=20-=20engine/hooks/split-scope/codex.hook.j?= =?UTF-8?q?son=20-=20engine/hooks/split-scope/README.md=20-=20engine/hooks?= =?UTF-8?q?/split-scope/tests/test=5Fhooks.py=20-=20install.sh=20-=20tests?= =?UTF-8?q?/test=5Finstall.py=20Change=20types:=20-=20engine/hooks/split-s?= =?UTF-8?q?cope/detect.py:=20create=20-=20engine/hooks/split-scope/claude?= =?UTF-8?q?=5Fprompt=5Fsubmit.py:=20create=20-=20engine/hooks/split-scope/?= =?UTF-8?q?codex=5Fprompt=5Fsubmit.py:=20create=20-=20engine/hooks/split-s?= =?UTF-8?q?cope/cursor=5Fbefore=5Fsubmit.py:=20create=20-=20engine/hooks/s?= =?UTF-8?q?plit-scope/cursor=5Fpost=5Ftool=5Fuse.py:=20create=20-=20engine?= =?UTF-8?q?/hooks/split-scope/state.py:=20create=20-=20engine/hooks/split-?= =?UTF-8?q?scope/install=5Fclaude=5Fhook.py:=20create=20-=20engine/hooks/s?= =?UTF-8?q?plit-scope/install=5Fcodex=5Fhook.py:=20create=20-=20engine/hoo?= =?UTF-8?q?ks/split-scope/install=5Fcursor=5Fhook.py:=20create=20-=20engin?= =?UTF-8?q?e/hooks/split-scope/claude.prompt.hook.json:=20create=20-=20eng?= =?UTF-8?q?ine/hooks/split-scope/codex.hook.json:=20create=20-=20engine/ho?= =?UTF-8?q?oks/split-scope/README.md:=20create=20-=20engine/hooks/split-sc?= =?UTF-8?q?ope/tests/test=5Fhooks.py:=20create=20-=20install.sh:=20modify?= =?UTF-8?q?=20-=20tests/test=5Finstall.py:=20modify=20Acceptance=20criteri?= =?UTF-8?q?a:=20-=20Pass=20condition:=20`python3=20-m=20unittest=20discove?= =?UTF-8?q?r=20-s=20engine/hooks/split-scope/tests=20-v`=20exits=200.=20-?= =?UTF-8?q?=20Pass=20condition:=20`python3=20scripts/check=5Fhook=5Ftest?= =?UTF-8?q?=5Fcoverage.py=20engine/hooks/split-scope`=20exits=200.=20-=20P?= =?UTF-8?q?ass=20condition:=20`python3=20-m=20unittest=20discover=20-s=20t?= =?UTF-8?q?ests=20-p=20"test=5Finstall.py"`=20exits=200.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exit code: 0 Invoker-Finalize-Id: 3f68b610-4787-4c58-ac16-2d7b57d64b71 From 189ba8cf64e749ea3489ff96b260b420aea3721d Mon Sep 17 00:00:00 2001 From: Invoker Bot Date: Sat, 12 Sep 2026 02:37:08 +0000 Subject: [PATCH 2/3] =?UTF-8?q?invoker:=20wf-1789161335022-5/verify-split-?= =?UTF-8?q?scope-hook=20=E2=80=94=20Review=20claim:=20-=20The=20hook's=20o?= =?UTF-8?q?wn=20tests,=20the=20hook-coverage=20gate,=20and=20the=20install?= =?UTF-8?q?=20tests=20all=20pass.=20Review=20lane:=20-=20proof=20Safety=20?= =?UTF-8?q?invariant:=20-=20Proof-only;=20this=20read-only=20check=20chang?= =?UTF-8?q?es=20no=20files.=20Effectiveness=20measurement:=20-=20The=20com?= =?UTF-8?q?mand=20below=20exits=200.=20Slice=20rationale:=20-=20One=20proo?= =?UTF-8?q?f=20step=20for=20the=20one=20hook=20added.=20Architectural=20ef?= =?UTF-8?q?fect:=20-=20None;=20verification=20only.=20Goal:=20-=20Prove=20?= =?UTF-8?q?the=20hook=20fires=20and=20stays=20silent=20as=20specified=20an?= =?UTF-8?q?d=20installs=20cleanly.=20Motivation:=20-=20The=20tests=20run?= =?UTF-8?q?=20the=20real=20entrypoint,=20so=20a=20pass=20means=20the=20rem?= =?UTF-8?q?inder=20really=20reaches=20the=20agent.=20Alternative=20conside?= =?UTF-8?q?rations:=20-=20Option=20A=20(chosen):=20run=20the=20hook=20test?= =?UTF-8?q?s,=20the=20coverage=20gate,=20and=20the=20install=20tests=20tog?= =?UTF-8?q?ether.=20Implementation=20details:=20-=20Run=20the=20three=20ch?= =?UTF-8?q?ecks=20in=20order.=20Non-goals:=20-=20No=20product=20edits=20he?= =?UTF-8?q?re.=20Layer:=20app=5Fregression=20Feature=20state:=20active?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exit code: 0 Invoker-Finalize-Id: 3c4cda3d-9ed5-4c1e-ad20-77eea6661f3a From 3a678e04b6802090b0a7d2186c07c7df3d953459 Mon Sep 17 00:00:00 2001 From: Invoker Bot Date: Sat, 12 Sep 2026 02:40:43 +0000 Subject: [PATCH 3/3] =?UTF-8?q?invoker:=20wf-1789161335022-5/scrub-handoff?= =?UTF-8?q?-artifacts=20=E2=80=94=20Review=20claim:=20-=20No=20ephemeral?= =?UTF-8?q?=20handoff=20files=20are=20left=20behind=20before=20the=20PR=20?= =?UTF-8?q?merge=20gate.=20Review=20lane:=20-=20proof=20Safety=20invariant?= =?UTF-8?q?:=20-=20This=20read-only=20check=20changes=20no=20files.=20Effe?= =?UTF-8?q?ctiveness=20measurement:=20-=20`bash=20scripts/scrub-handoff-ar?= =?UTF-8?q?tifacts.sh`=20exits=200.=20Slice=20rationale:=20-=20The=20scrub?= =?UTF-8?q?=20check=20runs=20last=20and=20stays=20separate=20from=20implem?= =?UTF-8?q?entation.=20Architectural=20effect:=20-=20No=20architecture=20c?= =?UTF-8?q?hange.=20Goal:=20-=20Confirm=20no=20handoff=20artifacts=20remai?= =?UTF-8?q?n.=20Motivation:=20-=20Uncommitted=20handoff=20files=20do=20not?= =?UTF-8?q?=20flow=20across=20worktrees.=20Alternative=20considerations:?= =?UTF-8?q?=20-=20Option=20A=20(chosen):=20a=20read-only=20absence=20check?= =?UTF-8?q?.=20Implementation=20details:=20-=20Run=20the=20handoff=20scrub?= =?UTF-8?q?=20script=20without=20--apply.=20Non-goals:=20-=20Do=20not=20mo?= =?UTF-8?q?dify=20source=20files.=20Layer:=20e2e=5Fregression=20Feature=20?= =?UTF-8?q?state:=20active?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exit code: 0 Invoker-Finalize-Id: 59c6c4c7-5d07-4094-873e-8b31032b2bb1