Repository navigation
·
1 commit
to refs/heads/main
since this release
v0.3.5 — the review of 0.3.4
The review of 0.3.4 — the code that review itself produced, and had therefore
never been attacked by anyone who did not write it. Two of these four are gates
that could not fail.
Security
- A close-path exception message reached the log verbatim.
sessionlog's
payload_attrsdocstring certifies that every text-bearing attribute routes
through one funnel.last_progressdid not:_describe_closewrote
str(result.get("last_progress"))[:200]under every policy. Measured under
the documented scrub-everything mode, asession.closeevent carried
close_state raised OSError: failed to spawn: ssh root@host --password hunter2, and the secret was into_ndjson().session.py:333builds that
string asf"close_state raised {type(exc).__name__}: {exc}"and
pty_backend.py:385as theterminateequivalent — an exception message,
exactly the classerror_attrsexists to scrub. Now routed through
payload_attrs, keeping the 200-character bound. A sweep for every other
verbatim-written attribute in the module now returns zero. - The
record_snapshotsconsent gate had been made vacuous by the change
that closed the previous leak. It asserted the literal keyscreen_text
is absent — but routing the text throughpayload_attrsmeans the raw key
can never appear under the default policy, whateverrecord_snapshotssays.
Deleting the consent gate entirely left the suite green, and with
record_snapshots=False(the default) every wait event grew a 132-character
screen digest and a fingerprint:to_text()paid with no consent, exactly
what the module docstring denies. The check is now a prefix check — no
attribute whose name begins withscreen_text, whatever the policy would
have spelled it.
Fixed
- The path-component boundary was the inverse of what its own comment
claimed. Added in 0.3.4 to stop a sibling directory (SmartCLI-v3-runs)
being flagged as this checkout, it flagged only when the tail was a separator
or nothing and skipped everything else — so the most natural prose forms of
naming the path escaped the ban entirely:D:\Project\SmartCLI before pushing,`D:\Project\SmartCLI`,(D:\Project\SmartCLI),
D:\Project\SmartCLI, which is. The sibling false positive had been removed by
making the rule narrower than the rule it documented, which is the same
class of hole as the one 0.3.4 was fixing. A tail that is alphanumeric or one
of-_.~now means "a longer directory name" and is skipped; everything else
is flagged. Eight probes pin it, and the wider rule produced zero new
findings across the real 172-document corpus. - The derived
INVALID_HANDLE_VALUEsentinel had no gate at all. Three
mutations of it left the suite green. It is now pinned to
c_void_p(-1).value, proved not to be-1(the old form, which could
never fire because ctypes hands back the unsigned pointer value
18446744073709551615), and bound to thec_void_prestype it exists to
interpret.
Notes
- Each fix carries a red-proof. For the boundary: reverting the rule to its
0.3.4 form turns four probes red while the two sibling probes stay green. For
the consent gate: deletingand log.record_snapshotsturns it red with
leaked=['screen_text_chars', 'screen_text_sha256_16']. - Verified with 12 deterministic gates,
ruff check --select E9,F63,F7,F82 .,
mypy --platform linux, and the four-leg CI matrix — all green. The full
tests/run_all.pyis not re-run for this release; the changes are in the
session log, three gates and the version sites, and the last full run was
62/62 on the 0.3.3 tree under the Owner's standing consent. - The pattern across 0.3.3 → 0.3.5 is worth stating plainly: each release's
review found defects in the release just made. Three of the nine across
the three passes were gates reporting a false pass, and two more were a gate
whose rule was the inverse of its own comment and a gate made vacuous by the
very change that closed the bug it watched. The standing standard — a green
check is only evidence if it can turn red — is what keeps finding them, and
it is not yet demonstrably exhausted.
Install: pip install smartcli-toolkit · Plugin: /plugin marketplace add dwgx/SmartCLI