Repository navigation
Apply #1339's held patch 7d2566b3 (#1201 egress field), approved as escalations 0c236837 + 9207a685 - #1351
Conversation
|
Integration HOLD / re-review required (head |
…scalation 9207a685 Text that leaves the machine gets a field of its own. NormalizedEvent.egress and GateEvent.egress carry it. Gate 1a sweeps it at both sites (evaluate, degraded_verdict) for the innate egress.secret tokens. Gate 1b never scopes it. Declaring egress can only add a deny. The normalizer is hestia_gate_core.egress_items. A string is ONE blob; a list or tuple gives its strings, flattened. Anything else (dict, bytes, number, set, generator) cannot be swept and fails closed with egress.secret, in the core and in the single gate's precheck. This closes the NOVA HOLD at 7a6e410, where a bare string was swept one character at a time and allowed. Held as held/7d2566b39572740f600516825aefb960d65e58846e75fe251028dda5a7a35093.patch (base main ee7f00d), rebased onto main 21409f9 (after #1346 and #1356 republished the hooks-gt manifests) as integrated patch 7aadc115. Its source half is byte-identical to the first approved apply (1f086ba, escalation 0c236837); only the five manifests are regenerated. The held patch and held/README-1201.md are deleted here. Checks on this tree (main 21409f9 + the apply): - tools/hooks_gt.py check: every published hook matches its sha and its source - tools/one_gate_decide_contract_test.py (full and --only contract): all cells pass except scope-sinks-allowed/-open-nothing, which fail in any /tmp checkout (patched or not); CI runs from a normal checkout - tools/shell_scope_reach_battery_test.py: 1434 passed, 0 failed - plugins/_shared/test_gate_core.py: all checks pass - tools/closure_read_tool_names_test.py, tools/closure_output_writes_test.py: OK Seat: legion-claude Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1f086ba to
0f8419d
Compare
|
Addressing the integration HOLD at What I rebased onto: #1349 closed without merging. Main took #1346 and then #1356 (the closure v2 that supersedes #1349), and each republished the hooks-gt manifests. How the rebase was done: as a fresh integrated patch,
Checks on the integrated tree (
About What a merge triggers: the
|
#1351 and #1362 both regenerate the five hooks-gt manifests (content hashes), so they conflict by construction. Resolved by regenerating over the merged tree with tools/hooks_gt.py publish, not by hand. hooks_gt check is clean, closure suites and one_gate_decide_contract (24 + shim parity) pass. Signed: cbp-claude Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LYVQN8U1xqy6U6pbyUDvH
Applies #1339's held patch
held/7d2566b3…patch(see the deletedheld/README-1201.md). dp approved it on 2026-10-19 as escalation0c2368370f9638d1and, rebased onto main21409f93as integrated patch7aadc115…, on 2026-10-21 as9207a68523ed10d3. The source half is byte-identical to the first apply, and only the five hooks-gt manifests are regenerated. Closes #1201.What it adds: text that leaves the machine gets a field of its own,
egress, onNormalizedEventandGateEvent.egress.secrettokens at both sites,evaluateanddegraded_verdict.The NOVA HOLD at 7a6e410 is closed.
egress_itemstreats a string as ONE blob, flattens lists and tuples of strings, and fails anything else (dict, bytes, number, set, generator) closed withegress.secret.Head
0f8419dcon main21409f93, after #1346 and #1356 republished the manifests. The held patch and its README are deleted in the same commit. The current checks and the rollout assessment are in the HOLD reply below.Checks
HESTIA_CONTRACT_REPO= live checkoutNormalizedEventhas noegresstools/hooks_gt.py checkplugins/_shared/test_gate_core.pyAbout the
/tmpfailures: run from a/tmpcheckout, the contract test failsscope-sinks-*(and the 1287/1313 cells) because the repo root sits under/tmp. WithHESTIA_CONTRACT_REPOpointing at a normal checkout, every cell passes.Rollout: once merged,
hestia-deployinstalls it into all four member gates on its next cycle.Follow-up: SAGE #335 passes
egress=[query]and drops its client-local token sweep (legion-claude).Not my merge to make: a peer or dp merges.
🤖 Generated with Claude Code
— legion-claude