Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
387a647
fix(docs): harden G01 evidence packet for issue 79
jjangg96 Sep 26, 2026
24c1253
Harden issue 79 evidence scanner review findings
jjangg96 Sep 27, 2026
00fc5c4
docs: record scoped Python evidence harness exception
jjangg96 Sep 27, 2026
9548096
fix evidence scanner review gaps
jjangg96 Sep 27, 2026
8b5f35b
fix launcher iterable scanner bypasses
jjangg96 Sep 27, 2026
184701d
Harden issue 79 evidence scanner
jjangg96 Sep 27, 2026
9e92128
fix: harden issue 79 evidence scanner flows
jjangg96 Sep 27, 2026
dac58b4
fix: close issue 79 review boundary gaps
jjangg96 Sep 28, 2026
b79709b
Harden issue 79 evidence scanner against reviewed alias bypasses
jjangg96 Sep 28, 2026
9233241
Close issue 79 review gaps in scanner and evidence parity
jjangg96 Sep 28, 2026
a61c35f
fix(evidence): close issue 79 review bypasses
jjangg96 Sep 28, 2026
2c755af
fix(evidence): close reviewed AST provenance gaps
jjangg96 Sep 28, 2026
1f5f89b
fix(evidence): harden output and launcher provenance
jjangg96 Sep 28, 2026
1784c15
fix(evidence): close output and path alias gaps
jjangg96 Sep 28, 2026
bda0eed
fix(evidence): track scoped aliases and callable taint
jjangg96 Sep 28, 2026
db8faba
Harden issue 79 evidence scanner and worktree root guard
jjangg96 Sep 28, 2026
7e277ab
Close issue 79 review taint and config gaps
jjangg96 Sep 28, 2026
a55fb9d
Close issue 79 final evidence scanner review gaps
jjangg96 Sep 28, 2026
b3c335b
Harden issue 79 scanner and evidence parity gates
jjangg96 Sep 28, 2026
6f3f8c8
Close reviewed evidence scanner bypasses
jjangg96 Sep 28, 2026
31c2e60
Harden G01 evidence scanner against indirect aliases and mutators
jjangg96 Sep 28, 2026
b902f7d
Close exact-head G01 scanner review findings
jjangg96 Sep 28, 2026
9a31f99
Close module dictionary, shutil alias, and AWK review gaps
jjangg96 Sep 28, 2026
86d90df
Close reader, signal, assertion, and jq review gaps
jjangg96 Sep 28, 2026
f24c73a
Close independent G01 scanner bypasses
jjangg96 Sep 28, 2026
cf4ae9e
Close recursive reader and nested alias review gaps
jjangg96 Sep 28, 2026
415e551
Close remaining grep and exception alias gaps
jjangg96 Sep 28, 2026
2390a54
Close abbreviated grep and warning alias gaps
jjangg96 Sep 28, 2026
a6343f3
test(g01): reject byte environment and local-path evidence leaks
jjangg96 Oct 3, 2026
98da2a8
fix(g01): refuse escaped module values in evidence scanner
jjangg96 Oct 3, 2026
55c5f6f
fix(g01): bound module namespaces and path output provenance
jjangg96 Oct 3, 2026
1b10507
docs: give reviewed helper namespaces unique identities
jjangg96 Oct 3, 2026
ddfdcfd
fix: reject path-callable escapes and namespace builtin shadows
jjangg96 Oct 3, 2026
55412a0
fix: close indirect OS path members and environment expansion
jjangg96 Oct 3, 2026
a628322
fix: disambiguate path member AST node from callback names
jjangg96 Oct 3, 2026
de28dea
test: record open AST compile provenance blocker
jjangg96 Oct 3, 2026
e378ba4
fix: require packet-derived AST compile provenance
jjangg96 Oct 3, 2026
6a7a17e
fix: keep scanner loader modules within local namespaces
jjangg96 Oct 3, 2026
ef81a3e
fix: isolate AST parameter and comprehension provenance
jjangg96 Oct 3, 2026
85dcf4b
fix: invalidate source mutations and constrain compiler providers
jjangg96 Oct 3, 2026
3d76310
fix: disambiguate compiler source call nodes
jjangg96 Oct 3, 2026
45f8dfd
test: preserve open AST reader and Path provider alias blockers
jjangg96 Oct 3, 2026
ee513f8
fix: track borrowed AST mutations and provider setter aliases
jjangg96 Oct 3, 2026
97353ea
fix: close opaque receiver and deferred provider mutations
jjangg96 Oct 3, 2026
70b29ce
fix: disambiguate provider container probe names
jjangg96 Oct 3, 2026
6e41c63
fix: preserve provider classes through readers and helper returns
jjangg96 Oct 3, 2026
0aac0df
fix: follow saved class readers and iterator origins
jjangg96 Oct 3, 2026
768c53a
docs: reconcile G01 current module directive with source pin
jjangg96 Oct 3, 2026
d618c22
fix: preserve Path origins in comprehension results
jjangg96 Oct 3, 2026
29ca0d5
fix: constrain packet extraction and fence historical Git sources
jjangg96 Oct 3, 2026
fe38cc1
fix: preserve lexical packet bounds and ordered rebindings
jjangg96 Oct 3, 2026
35c18f3
fix: reject stdlib OS reexports and track displayhook sinks
jjangg96 Oct 3, 2026
7abfdf2
Checkpoint Git isolation with binding and argv RED evidence
jjangg96 Oct 3, 2026
3b7202b
Reject shadowed Git builders and mutable argv origins
jjangg96 Oct 3, 2026
05044cf
Harden Issue 79 Git and path provenance checks
jjangg96 Oct 3, 2026
e0c8156
Close Issue 79 evidence recipe provenance gaps
jjangg96 Oct 3, 2026
e720603
Harden Issue 79 evidence path provenance
jjangg96 Oct 3, 2026
6a069ab
Track reviewed module OS reexports
jjangg96 Oct 3, 2026
3e597eb
Harden Issue 79 output and path guards
jjangg96 Oct 3, 2026
a9d602e
Issue 79 preserve bounded evidence proofs
Oct 3, 2026
dba804f
Fix bounded Git capture proof compatibility
Oct 3, 2026
628c3b4
Correct seeded Path mutator regression evidence
Oct 3, 2026
062fade
Prove bounded Git query capture provenance
Oct 3, 2026
034c131
Close Git collector control-flow escapes
jjangg96 Oct 3, 2026
82fe7ba
Harden Issue 79 evidence scanner provenance
jjangg96 Oct 4, 2026
6574b87
Harden issue 79 evidence AST boundaries
jjangg96 Oct 4, 2026
86f4f8f
Reject nested Git process stream mutation
jjangg96 Oct 4, 2026
746c1c1
Close issue 79 hook and git cleanup proofs
jjangg96 Oct 4, 2026
8d9bd7f
fix evidence hook alias scope resolution
jjangg96 Oct 4, 2026
1377bad
preserve module hook aliases through global declaration
jjangg96 Oct 4, 2026
8f24ad6
route hook alias stores through declared scopes
jjangg96 Oct 4, 2026
734ef68
resolve nonlocal hook stores to actual owner
jjangg96 Oct 4, 2026
1fbd7a1
track hook aliases through comprehension walrus stores
jjangg96 Oct 4, 2026
e9ab4dc
Harden issue 79 scanner provenance
jjangg96 Oct 4, 2026
74e865e
Reject pattern captures of reviewed Git helpers
jjangg96 Oct 4, 2026
1fde7b9
Close wrapped Issue 79 provenance escapes
jjangg96 Oct 4, 2026
5138442
Harden wrapped Path mutator provenance
jjangg96 Oct 4, 2026
0cbe820
Close reflective Path mutator aliases
jjangg96 Oct 4, 2026
2a2ee6c
Reject escaped reflective Path mutators
jjangg96 Oct 4, 2026
cc4df01
Reject unresolved reflective mutator aliases
jjangg96 Oct 4, 2026
3ad98c5
Harden reflective path mutator tracking
jjangg96 Oct 13, 2026
4c83bd3
Track reflective mutators through callback and holders
jjangg96 Oct 13, 2026
30c9aa7
Clarify reflective transfer RED attribution
jjangg96 Oct 13, 2026
95385fd
Close reflected mutator alias transfer paths
jjangg96 Oct 13, 2026
62e0fe6
Track reflective mutators through helper transfers
jjangg96 Oct 13, 2026
39e4278
Harden variadic reflective mutator flows
jjangg96 Oct 13, 2026
8de8e07
docs: record bounded protocol review reuse
jjangg96 Oct 13, 2026
36e39fb
Pin shared Go 1.26.9 dependency for issue 79 packet requalification
jjangg96 Oct 14, 2026
f362d54
Requalify packet current profile to Go 1.26.9, preserve history
jjangg96 Oct 14, 2026
13867b4
Memoize scanner self-audit hot paths, fix smoke hang
jjangg96 Oct 14, 2026
b9a5ede
Fix nested-collision test specimens to use non-sink factory values
jjangg96 Oct 14, 2026
5d2e5f0
Follow helper-returned member names for benign reader resolution
jjangg96 Oct 14, 2026
db79bde
Accept helper-returned benign readers on reviewed paths
jjangg96 Oct 14, 2026
cea81e7
Classify from-imported os/shutil calls through the fail-closed OS guard
jjangg96 Oct 14, 2026
7712a2f
Propagate command-capable launcher values through callable defaults
jjangg96 Oct 14, 2026
6f61a40
Require quoted Python heredoc delimiters before body inspection
jjangg96 Oct 14, 2026
7638c51
Reject sensitive operands before implicit exception messages
jjangg96 Oct 14, 2026
25a5e44
Reject complex conversions over sensitive values
jjangg96 Oct 14, 2026
d9b6a2d
Track conversion callables through defaults and containers
jjangg96 Oct 14, 2026
a0849e3
Propagate sensitive call arguments into parameters
jjangg96 Oct 14, 2026
6caab1b
Track mutated mapping keys before keys-only exemption
jjangg96 Oct 14, 2026
bdcabb4
Reject subscript keys with sensitive representations
jjangg96 Oct 14, 2026
3eb6aa1
Resolve from-import aliases at the call site
jjangg96 Oct 14, 2026
8ddfa6a
Classify launchers nested in default expressions
jjangg96 Oct 14, 2026
4bab99e
Analyze operand sensitivity with an iterative worklist
jjangg96 Oct 14, 2026
1407f88
H1: rename scanner-internal locals colliding with body-global name pr…
jjangg96 Oct 14, 2026
0c94810
fix(evidence): refuse unsupported scanner AST runtimes
jjangg96 Oct 14, 2026
80ee230
docs: correct issue 79 evidence repository link
jjangg96 Oct 15, 2026
f54ce1d
Close PR103 argument, callable and display provenance gaps
jjangg96 Oct 22, 2026
ca6af56
Merge reviewed Go 1.26.9 main baseline into issue79 candidate
jjangg96 Oct 22, 2026
3496887
fix(evidence): preserve alias and implicit-error provenance
jjangg96 Oct 22, 2026
91e0d30
fix(evidence): close issue 79 handler and provenance review gaps
jjangg96 Oct 22, 2026
f736e2b
fix(evidence): close issue 79 AST provenance review gaps
jjangg96 Oct 22, 2026
0b5b0c5
fix(evidence): close protocol alias and async iteration gaps
jjangg96 Oct 22, 2026
0a805c6
fix(evidence): close callback-name and async iterator gaps
jjangg96 Oct 22, 2026
84e1f11
fix(evidence): close callback and async protocol gaps
jjangg96 Oct 22, 2026
eaa84ce
fix(evidence): close assigned protocol escape gaps
jjangg96 Oct 22, 2026
dc83077
fix(evidence): refuse augmented receiver escapes
jjangg96 Oct 22, 2026
516de3e
fix(evidence): reject augmentation through receiver aliases
jjangg96 Oct 22, 2026
4218cd0
fix(evidence): close context binding and subscription gaps
jjangg96 Oct 22, 2026
8994900
fix(evidence): require proven custom subscription results
jjangg96 Oct 22, 2026
d6e6686
fix(evidence): close subscription provenance and state gaps
jjangg96 Oct 22, 2026
3b44ecc
fix(evidence): refuse unproven subscription dependencies
jjangg96 Oct 22, 2026
66c33aa
fix(evidence): close keyword member hook and callback proofs
jjangg96 Oct 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions docs/decisions/0004-offline-python-ast-regression-tooling.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# ADR 0004: Narrow Python exception for offline Python-AST evidence tests

Status: accepted for the issue #79 evidence-tooling scope upon merge of PR #103;
the candidate remains subject to independent review and exact-head Codex review.

## Context and evidence

[ADR 0001](0001-language-and-boundaries.md) selects Go for the CLI, background
service, scheduler and state reconciliation. That product decision is unchanged.
The [G01 evidence packet](../evidence/g01-recovery-packet.md) already contains a
Python AST-based audit of Python and shell prescriptions. Issue #79 needs tests
of that existing implementation, including Python loop/comprehension targets,
call aliases and definition-time expressions.

At candidate `387a647355e48d44333954fadf48d5b02335290c`, the standard-library
Python harness reproduced the seven recorded finding classes and passed eight
focused cases after their initial corrections. Independent review then found
additional reader/iterator gaps; [Codex review of that exact candidate](https://github.com/1XP-AI/gh-runnerd/pull/103#pullrequestreview-5325780932)
also identified loader and language-policy gaps. Those findings remain blockers
until their correction or evidence-based disposition is reviewed; the eight-test
result is not comprehensive safety proof. The local interpreter used for this
evidence is CPython 3.14.3; no other interpreter/platform coverage is implied.

The harness uses Python's standard-library `ast`, `unittest` and local Git
fixtures, without third-party Python packages. Implementing a separate Python
parser in Go would duplicate the language semantics under test or introduce a
parser dependency. A Go wrapper that invokes the same Python checks would not
remove the interpreter dependency. No comparative maintenance or performance
benchmark has been run; this decision rests on testing the existing AST audit
directly and keeping the exception bounded.

## Decision

Permit Python only for
`scripts/evidence_packet/issue79_regression_test.py` and its offline regression
fixtures for the existing packet audit. This is not permission to implement
product behavior or general repository tooling in Python. Any broader use needs
a separately reviewed decision. The CLI, daemon and production adapters remain
Go; no Python interpreter or package is bundled into release artifacts.

The harness must use only the standard library and explicitly selected local
Git fixture operations. Invoke it with `python3 -I -B`: isolated mode ignores
the current directory, `PYTHONPATH` and user-site imports, while `-B` avoids
bytecode artifacts. Record the actual interpreter and test results. Adding
dependencies, automatic hosted execution, or a broader supported interpreter
matrix requires separate review; this ADR does not claim those checks have run.

## Trust and execution boundaries

- Python/shell regression specimens remain data for AST/token inspection; they
must not be evaluated or launched.
- The scanner functions are the reviewed implementation under test, not
untrusted executable test data. This harness is not a Python sandbox or a
replacement for source review and runner trust policy.
- Loading packet definitions must reject unreviewed imports, decorators and
non-reviewed definition-time expressions before evaluation. A modified packet
must not acquire an import/decorator/default-expression execution path merely
because it contains a matching scanner fence.
- Local Git fixtures use task-owned temporary repositories and synthetic values.
The harness must not contact GitHub, dispatch workflows, access credentials,
or operate existing runners, Docker, Keychain or launchd.
- Repository/PR review, exact-head identity and live-operation authorization
gates still apply. Neither this exception nor green synthetic tests complete
G01/G02 or establish hostile-code isolation.

## Consequences and rollback

Maintainers now have one explicitly scoped interpreter-dependent evidence test.
Its manual focused results must be reported separately from Go/hosted checks;
passing Public CI does not imply this Python harness ran. Reconsider the exception
if the packet audit is extracted or replaced by a reviewed implementation with
equivalent regression coverage.

Rollback is a reviewed revert of the harness and this exception, retaining Go
product code and unrelated evidence. Do not remove an existing safety check
without an explicit replacement or a documented reopening of the affected gate.
Loading