feat(fleet): HARNESS-HOMES fleet MVP — profile-driven seat composition and launch (#1209) #1213
@@ -23,6 +23,7 @@ COMPLETE_PATH = TOOLS / "promote-complete.py"
|
||||
OBSERVER_CLIENT_PATH = TOOLS / "receipt-observer-client.py"
|
||||
RECEIPT_CHALLENGE_PATH = TOOLS / "receipt_challenge.py"
|
||||
CLAUDE_SETTINGS = FRAMEWORK / "runtime/claude/settings.json"
|
||||
CLAUDE_LEASE_OVERLAY = FRAMEWORK / "runtime/claude/lease-overlay.json"
|
||||
CLAUDE_COMMAND = FRAMEWORK / "runtime/claude/commands/mosaic-promote.md"
|
||||
SESSION_ID = "a" * 64
|
||||
CHALLENGE = "b" * 64
|
||||
@@ -569,8 +570,15 @@ class PromotionCompleteTest(PromotionHookFixture):
|
||||
|
||||
class PromotionTemplateWiringTest(unittest.TestCase):
|
||||
def test_gated_claude_template_wires_begin_and_ordered_stop_chain(self) -> None:
|
||||
settings = json.loads(CLAUDE_SETTINGS.read_text(encoding="utf-8"))
|
||||
hooks = settings["hooks"]
|
||||
base = json.loads(CLAUDE_SETTINGS.read_text(encoding="utf-8"))
|
||||
overlay = json.loads(CLAUDE_LEASE_OVERLAY.read_text(encoding="utf-8"))
|
||||
# A launched seat composes base + lease overlay; hook event arrays
|
||||
# concatenate with base entries first, so wiring is asserted against
|
||||
# the composed view rather than either file alone.
|
||||
hooks: dict[str, list] = {}
|
||||
for layer in (base["hooks"], overlay["hooks"]):
|
||||
for event, groups in layer.items():
|
||||
hooks.setdefault(event, []).extend(groups)
|
||||
submit_commands = [
|
||||
hook["command"]
|
||||
for group in hooks["UserPromptSubmit"]
|
||||
|
||||
Reference in New Issue
Block a user