Dashboard › institutional-transition-lab › Distillation
f8bc15f4-fd91-4145-8ca7-c384bce67ecd["lore_tm_v1_tkVU1A9rkRSjojkCX073o7-8bFcvuCsZYtRwDEczSWw","lore_tm_v1_vzIqOcDT2kJwHco8ndPQKLOL-eKMJt7SJG_MR-ZhCRI"]
Date: Sep 9, 2026
ses_f7b8ca00fffeK5RfdeqsSmHa25 completed with DO-NOT-MERGE; it made no repository changes, used temporary directories with bytecode and pytest caching disabled, and reported the scoped files as untracked in scoped git status.src/institution_lab/governance_adjudication.py: os.open() creates a raw descriptor at line 97, but ownership transfers only if os.fdopen() succeeds at line 100. Directory input raises IsADirectoryError at line 100 before the intended type check at lines 101–103, and injected fdopen(...)=ENOMEM likewise leaks the raw descriptor, allowing repeated hostile inputs to exhaust descriptors.ValueError, then verify the captured descriptor returns EBADF; make os.fdopen raise and assert the raw descriptor is closed; ensure failing tests close any leaked descriptors during cleanup.src/institution_lab/governance_adjudication.py: O_NOFOLLOW at line 95 protects only the final path component, so a file beneath a symlinked parent directory was followed and accepted. getattr(os, "O_NOFOLLOW", 0) at line 95 also silently disables protection when unavailable; removing the attribute caused a final symlink to be followed and read.O_NOFOLLOW is unavailable; preserve existing final-component symlink rejection behavior.fstat() classifies it at lines 101–103. O_NONBLOCK prevented the tested FIFO from blocking, but device drivers do not guarantee nonblocking or side-effect-free open(). /dev/null and synthetic block-device metadata were rejected; no live block device was opened.O_NOFOLLOW, size boundaries, races, partial reads, or descriptor cleanup; the only direct reader test is tests/test_governance_adjudication.py:931-951, which checks FIFO rejection with a one-second timeout./dev/null were rejected; synthetic block-device mode was rejected and closed after fdopen succeeded.fstat() was detected by the max_bytes + 1 read at lines 106–108; buffered reading accumulated repeated two-byte partial reads and detected the excess byte.os.open() still read the already-opened inode; success, oversize rejection, fstat failure, and read failure closed descriptors once fdopen had succeeded.src/institution_lab/governance_adjudication.py:65-66.fdopen failures and fail-open symlink handling as the two blockers. Fixes were deferred until the active JSON/pin and ZIP audits complete; the existing single follow-up remained scheduled.