Skip to content

[G01] Harden seven evidence-packet review boundaries - #103

Merged
jjangg96 merged 136 commits into
mainfrom
orca/issue-79-evidence-hardening
Oct 24, 2026
Merged

jjangg96 merged 136 commits into
mainfrom
orca/issue-79-evidence-hardening

Conversation

@jjangg96

@jjangg96 jjangg96 commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Delivered — merged and validated

Merged as 1eb30fcfe010f25c16bfe1a87c69c0189a7bfc62, with a source tree identical to reviewed head 9d9b86460402fb200deb9e7a0846e665d9f22e9f.

  • Exact-head Codex review: completed, no major issues; historical and new finding triage retained.
  • Matching PR quick: PASS.
  • Frozen packet qualification: PASS, 261 shell commands / 86 Python bodies / zero violations, 2409.790s; packet 125ea92e4566304a23488948d559ec2e684ba595, harness 69b1f698609071823bb7dea4a0d92a48560ca7d6.
  • Automatic same-main-SHA Public CI: all seven checks PASS, including root/race, three offline modules and vulnerability checks. No manual workflow replay.
  • Issue #79 CLOSED; its Project item Done. Local clean main fast-forwarded to the merge SHA.

The separate-internal-review replacement was approved for this PR only, not as a global policy change. G01 #1 / G02 #2 remain OPEN/incomplete and the parent goal remains paused. No live canary or runner/credential operation was performed or authorized. No general Python sandbox guarantee. Historical failed scans and candidate summaries below retain their original identities/results; they are not relabeled as passes.


Current correction candidate — 9d9b864

Head 9d9b86460402fb200deb9e7a0846e665d9f22e9f replaces private AST-coordinate getattr returns with direct fixed attributes guarded by hasattr. For parser-created AST metadata it retains fallback -1, end-field precedence and existing None; it makes no promise about arbitrary side-effecting attribute overrides. No reflection policy, result authority or allowlist changes.

The preceding 5536e60 whole qualification FAILED, one reflective-helper-result finding / 2286.539s, despite clean review/quick CI. A focused extraction of the actual position helper and caller reproduced the same finding RED0.455s/GREEN0.469s. Final 194 PR103 methods PASS14.558s, 54 getter methods PASS18.546s, aggregate 206/328/7 PASS19.965s; selectors overlap. The complete actual scanner definition source passes the filesystem-alias guard 446.103s; later signal/indirect-execution gates pass too. These targeted preflights do not replace whole-packet qualification. Packet 125ea92e4566304a23488948d559ec2e684ba595; harness 69b1f698609071823bb7dea4a0d92a48560ca7d6.

Fresh exact-head review requested; matching quick, finding triage and successful fresh stable-head whole-packet qualification remain mandatory. The maintainer-approved separate-internal-review replacement is PR-specific. No unavailable internal approval, live/canary operation, completed-goal or general Python sandbox claim. #79 remains In review; older receipts below are historical.


Current correction candidate — 5536e60

Head 5536e6006b465e52af2a4dacca6ae1d36a99c078 only renames colliding private scanner identifiers: 44 local call Name references in seven helper scopes, plus one scalar-index predicate and four references. Immutable-source AST comparison confirms an alpha-renaming-only scanner delta: no expressions, literals, public signatures, alias rules or allowlists changed. The added fast actual-source regression covers callback and direct-call targets across new helpers too.

The preceding cc6a499 full-packet qualification FAILED, one callback-target finding / 1938.693s, despite clean GitHub review and quick CI. That failure and a latent index-collision RED discovered before the next slow scan are preserved in the ledger. Final 193 PR103 methods PASS 16.893s, 54 getter methods PASS 15.242s, aggregate 206/328/7 PASS 16.306s; counts overlap. Packet 3ee10900f24c7a467acbd762096679681e72e435; harness 46620589f228f11ba556373dc1cd237ec2bead39.

Fresh exact-head review requested. Matching quick CI, all-finding triage and successful fresh whole-packet qualification remain mandatory before merge; the slow qualification follows stable review. The maintainer-approved replacement of separate internal review with GitHub Codex is PR-specific, not a claim of unavailable internal approval. No live/canary/runner operation, completed-goal claim or general Python sandbox guarantee. #79 remains In review; older receipts below are historical only.


Current correction candidate — cc6a499

Head cc6a49928b002fc1a264eb0ff848129410158aa2 replaces the remaining conditional reference-point initializer in v22_closed_call with an equivalent explicit if. The conservative launcher rule is unchanged. A new fast actual-source test checks all conditional assignments, avoiding first-helper-only coverage; it does not replace whole-compiler or whole-packet qualification.

The preceding b8990ff full-packet qualification FAILED, one finding / 1570.462s, at scanner body line 17619 despite its clean GitHub review. The failure is preserved in the ledger, not counted as approval. New RED 0.525s; focused GREEN 0.844s; final 192 PR103 methods PASS 21.615s, 54 getter methods PASS 16.509s, aggregate 206/328/7 PASS 17.593s. Selectors overlap. Packet blob adf98700018c5ea04fb5ec060cf9a868ad5a6a07; harness cbcf97c4d3f633db9a4c2697cd61c635388db42a.

The maintainer approved replacing the separate internal independent review with GitHub Codex review for this PR only (authorization). No unavailable internal approval is claimed. Fresh exact-head GitHub review, matching quick CI, all-finding triage and successful frozen whole-packet qualification remain merge gates. Review requested; full-packet qualification will run after this correction settles. No live/canary/runner operation, completed-goal claim or general Python sandbox guarantee. Project #79 remains In review. Older candidate receipts below are historical only.


Current correction candidate — b8990ff

Head b8990ffa3d6aecabf1ccbe53ab175c0a5376eae4 addresses P1 method/class lexical ownership: class namespaces are excluded regardless of if/try/loop wrappers around method definitions. Class suites remain unsupported proof contexts, and unindexed header bindings invalidate all possible enclosing owners rather than guessing. An adjacent class/global/header rebinding bypass is covered; a read-only nested method remains accepted.

Final packet blob fb07ea1786ae9e61d2f74cc7782b52f29b78a248; harness blob 0556313926baf95a23a6ba1ec31f26c6c2071929. GREEN: 191 PR103 methods (10.865s); 54 getter-fixture methods (12.581s); focused review/prior-helper/owned-path controls 12 (0.816s); expanded preflight 206/328/7 (13.960s). Counts overlap. New RED: four assertions / two methods (0.324s). All prior findings and failed/interrupted qualification receipts remain in the ledger.

Fresh exact-head GitHub review requested. The mandatory fresh full-packet qualification will run after review settles this frozen source, to avoid repeatedly scanning superseded candidates; it is not waived or passed yet. Current review/finding triage, matching quick CI, mandatory review requirements and complete packet qualification remain merge gates. Older candidate results below are historical only. No live/canary/runner operation, unavailable independent approval, completed-goal/merge-ready claim or general Python sandbox guarantee is made. Project #79 remains In review.


Current correction candidate — f53732c

Head f53732cd8a5d5170f4e5eb358a146872c28784fe addresses both P1 findings from fa8aa39: outermost comprehension input references resolve outside the comprehension, and global/nonlocal declarations resolve to actual binding owners. Additional first-class namespace getter probes are corrected: globals/locals cannot be data, vars requires one explicit object without callable escape, and namespace getters cannot be obtained through attributes/reflection. Direct vars(obj) remains accepted. An equivalent explicit if replaces the scanner's conditional AST-parameter assignment without weakening the launcher rule.

Final packet blob 94ab93cc66705f386c23d65c19ff69cb1d97808c; harness blob 3096b1a116180d048903cc9cc714759e3fbbf9cc. GREEN: 189 PR103 regression methods (10.789s); 52 getter-fixture methods (12.324s); expanded preflight 206/328/7 (13.832s). Selectors overlap. Red cases, actual-helper extraction, failed historical full packet scans and interrupted/superseded runs are recorded in the candidate ledger; no incomplete scan is called a pass.

Fresh exact-head GitHub review requested. Current full-packet qualification is running, not yet a pass. Older receipts below remain historical. Final review/finding triage, matching quick CI, mandatory review requirements and complete packet qualification remain merge gates. No live/canary/runner operation, unavailable internal approval, completed-goal/merge-ready claim or general Python sandbox guarantee is made. Project #79 remains In review.


Current correction candidate — fa8aa39

Head fa8aa396adbcdda479f888c65a2fe061ac3ec3fb addresses both P1 ownership findings from completed review of 3023373: class-qualified callers and same-name default captures. Class-owned/class-suite contexts do not establish caller/nonescape completeness; definition headers resolve outside the new function, and unindexed header-walrus bindings invalidate the proof. Adjacent same-spelling class exports and reflected-accessor extraction are refused. The unchanged runtime-type gate also admits the scanner again after literal predicates were rewritten without runtime type construction, preserving integer bool exclusions and declaration-owner semantics.

Final inputs: packet blob 8aca669e430aedd3e1573ee6682ca16dd9d5d556; harness blob 93641a03d9942d77e741c4c119b2fff7798b4951. GREEN: 185 PR103 regression methods (10.769s); 49 getter-related methods (12.451s); targeted review/native protocol/type/owned-path controls 10 (1.721s); aggregate preflight 206/328/7 (14.121s). Counts overlap. The ledger preserves RED evidence for both GitHub findings and adjacent namespace probes, plus the failed historical full packet scan and its correction.

Fresh exact-head GitHub review requested; current full-packet static qualification is running, not a pass. Older review/CI/test receipts below are historical only. Current review/finding triage, matching quick CI, mandatory review requirements and final packet qualification remain merge gates. No specimen execution, live/canary/runner operation, unavailable internal approval, merge-ready claim or general Python sandbox guarantee is made. Project #79 remains In review.


Current correction candidate — 3023373

Head 3023373c91251d51b07e86721b7291c766d6c3ad preserves two existing safe getter fixtures after the preceding security fix: zero-argument single-return literal member helpers and explicit/default member parameters from completely known named callers. Metadata/alias/callback/default escape, rebinding, unknown returned values and unknown argument expansions refuse the proof. Receiver-independent complete member domains and all prior P1 corrections remain in place.

TDD: existing local-return positive RED (9 methods, 1 failure, 0.352s); broader getter audit RED (45 methods, 1 failure, 12.346s). Final source: 46 getter-related methods PASS (13.345s), 181 PR103 regression methods PASS (10.227s), aggregate preflight PASS (206/328/7, 14.834s). Counts overlap. Packet blob 6dbd21ff2509ea94748ad8bef7a5a8d8e06100ee; harness blob 56173ad9a0a387cef73076288218bb23a74fe535.

Fresh exact-head GitHub review requested; whole-packet qualification is running. The preceding 46e15a3 no-major-issues review, CI, 200-method regression and 86-body namespace delta are historical only, not approval of this new head. All final-head review/finding triage, quick CI and packet qualification gates remain required. No live/canary/runner operation, unavailable internal approval, merge-ready claim or general Python sandbox guarantee is made. Project #79 remains In review.


Current correction candidate — 46e15a3

Head 46e15a3b6da05be57e219699f4cde56562082664 addresses P1 wrapped callable reflection from the completed review of d278433. Member-name domains must be complete and bounded regardless of receiver identity; unknown alternatives are never dropped. Reflective accessor escapes are refused. Closed literal key-iteration preserves the unchanged stream-capture body, with mutation/escape/closure controls.

TDD: new wrapped/opaque cases RED (3 assertions, 0.368s); wrapped protocol-getter RED (1 assertion, 0.321s); intermediate strict-domain compatibility failure recorded (200 methods, one failure, 14.374s), not hidden. Final focused boundary/native protocol/path/default controls: 11 methods PASS (0.595s). Aggregate preflight PASS (206/328/7, 15.086s). Packet blob a439036c4099032175eeb326ffe6a8076b789bb9; harness blob 831136307994ae7b1072bfe0682c1ab4d42c672a.

Current combined regression and whole-packet static qualification are running; no pass is claimed yet. The old d278433 combined regression completed 199 methods PASS (646.963s), but it and its hosted quick success are historical evidence only. Fresh exact-head GitHub review requested. All final-head finding triage, matching quick CI and packet qualification remain required before merge. No specimen execution, live/canary operation, unavailable independent approval or general Python sandbox guarantee is claimed. Project #79 remains In review.


Current correction candidate — d278433

Current head: d2784333608433ae5c1c33d4ffe2fc7eefa3dd4f. The completed review of preceding head 5024b6f reported one P1, reproduced and corrected in this batch. A coordinator-reproduced function-global namespace alias bypass is corrected as well. Only singleton matching key domains can strongly replace selected-value facts; possible writes preserve UNKNOWN. Execution-namespace handles are refused at the existing admission gate, with alias/default/computed-member controls.

  • TDD: initial two new methods RED (15 assertions, 0.426s); additional unbound-getter RED (one assertion, 0.385s).
  • GREEN: five focused methods (0.485s), expanded seven boundary/default/module methods (0.437s), aggregate compatibility preflight (206/328/7; 23.152s).
  • Frozen packet blob 3c4241aaea257f20c2392ce8d7f414cdeb2cbcce, harness blob e4ba5c4055e273fddaaa70ac1d891b247ebf2d13.
  • Combined regression and fresh full-packet static qualification are running; completion is not claimed. No specimen program is executed. The previous head's CI does not qualify this head.
  • Fresh exact-head GitHub review requested. No independent approval or general Python sandbox guarantee is claimed. Final review, all finding triage, matching quick CI and packet qualification remain merge gates. No live/canary/Docker/runner operation is authorized.

The candidate ledger carries immutable finding links and historical evidence. Project #79 is In review. Earlier candidate receipts below remain historical, not current-head approval.


Current candidate: 5024b6f7f6add0cf5b5f7b7452cfe6a5ae02e217

This checkpoint supersedes historical candidate summaries below.

  • Issue P2 hardening: close seven G01 evidence-packet review gaps #79 remains the scope. The three P1s at [G01] Harden seven evidence-packet review boundaries #103 (comment) and the additional inherited mapping-output gap have local reproductions/corrections carried in the chronological finding ledger.
  • Review focus: ordered store-point/key-domain/alias/capture closure; strict separation of selected VALUE from nominal native TYPE and independent constructor/field/process/buffer effects; class/callable applicability domains never return SAFE or discharge primary sensitive/repr arms. Class- and encoder-domain baseline caches are separate from the primitive baseline.
  • Actual combined focused result: 197 methods PASS / 589.829s, including the unchanged canonical safe-positive and all prior 12 failed assertions, on packet blob 98a1913dc6d920d4f02ea54a8c165cfd71bcb61c and harness f2f73605c8824ed60151d8f87af9806401bb5176. Final harness fb6ee136383edb684702cb60e71bd7d0d5eebc9d adds only four negative constructor variants; that expanded method separately PASS / 0.304s on the identical packet.
  • Expanded aggregate preflight: PASS / 25.517s, 206 root helpers / 328 called original helper names / seven retained scoped regex proofs, zero new collisions/lost proofs. Diff and added-line private-path/key/token checks passed.
  • Pending: matching hosted PR quick check, completed exact-head GitHub code review, finding triage, and fresh frozen whole-packet qualification. Historical internal approvals and whole-packet receipts do not approve this head. No unavailable independent approval is claimed; current maintainer direction is GitHub code review.
  • Specimens remain inert AST data. No specimen execution/import/eval, live canary, token/registration, runner, Docker or workflow-dispatch operation occurred. No general Python sandbox guarantee or Go/race/live pass is claimed.
  • Durable commands, actual RED/GREEN, rejected intermediate approaches and rollback are in the finding ledger. The superseded combined run was stopped and is not counted as a pass.

Issue #79 — keyword, member, hook and callback proof closure

Head: 66c33aa19ab72603e48a8deb67fbe7d11064da6f. Refs #79; G01/G02 remain open.

The immutable ledger retains historical source-scoped findings and addresses the four-P1 exact-3b44ecc report.

  • Wrapper origins include keywords and double-star values through existing projections.
  • Mutable-dependency refusal includes attribute/member provenance.
  • Descriptor construction hooks are unsupported: direct/assigned hooks and explicit hook member/setter installation refuse, including computed receiver aliases.
  • Protected callable-state targets require existing parameter invocation closure before default-based disjoint identity proof. Known direct-only mutators retain safe controls.
  • No descriptor/higher-order execution model, interface expansion or allowlist relaxation. Harmless unsupported cases are policy evidence, not runtime leak claims.

Actual evidence

Initial RED4methods15failed assertions/zero errors0.287s (9sensitive6policy); additional computed-hook closure RED1method4failures0.249s (2sensitive2policy). Final GREEN22methods0.632s; 145 focused methods PASS22.030s; identical expanded preflight PASS12.456s206/328helpers7regexzero collisions/lostproofs. Earlier144-method receipts retain their own hashes.

Packet 9d9a0dfba93d08f04c62f5cb9f527e48cad5375a; harness 76a232bff88a0da828c6f52f60c329b0a91c1462; ledger 3b7806ef34b59b26fcb1609de2571b514e43736f. Exact three-file hygiene and clean candidate verified. Two independent Codex gpt-6.1-sol / medium exact-SHA source approvals under maintainer override: contract5methods0.289s+8contrasts, security22methods0.639s+12contrasts; keyword-only callback contrasts explicitly policy-only.

Fresh V20 whole-packet qualification: NOT RUN / pending. One scan remains mandatory on the stable GitHub-approved immutable candidate BEFORE MERGE, recorded in a PR comment without amending source. Historical V14 full PASS958.273s is not current evidence; V15–V19 full scans were not run.

Remaining gates / safety

Completed same-head GitHub Codex review, all-finding triage, hosted quick and stable-head packet qualification remain mandatory. Public CI remains postmerge integration evidence.

All specimens/recipes/descriptors/callbacks stayed inert AST data. No live canary, runner/JIT/credential/token/container operation, manual workflow dispatch or specimen execution occurred. Rollback is a reviewed bounded revert preserving historical evidence and reopening removed coverage.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-24T05:07:16.539313Z 9d9b864 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 387a647355

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +12592 to +12596
isinstance(node.func, ast.Attribute)
and node.func.attr in python_path_filesystem_read_methods
and python_path_receiver_expression(
node.func.value, tree, parents
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject Path readers when receiver provenance is unresolved

The new receiver guard skips validation entirely when a Path constructor is aliased: factory = Path; print(factory("synthetic-private").read_text()) now returns no scanner violation, whereas the parent scanner rejected it. Any unrecognized factory or helper returning a Path similarly bypasses all filesystem-reader checks and can expose private files through packet output, so unresolved receivers using these reader names must remain fail-closed.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +9173 to +9176
elif isinstance(node, (ast.For, ast.AsyncFor, ast.comprehension)):
# Values yielded from an environment iterator remain sensitive in
# both loop bodies and comprehension elements.
assignments.append((node.target, node.iter))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Propagate environment taint through iterator wrappers

When an environment iterator is wrapped, recording only the outer iterable expression loses the taint: for _, value in enumerate(os.environ.values()): print(value) and the analogous zip(...) case both pass this scanner. Those snippets still print inherited values, including credentials, so iterable taint must recurse through ordinary iterator-wrapper calls rather than recognizing only a direct os.environ.values() call.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +10166 to +10168
if python_call_derived_command_alias(value, modules):
return True
if isinstance(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Trace launchers through iterable-producing calls

The new helper traverses literal containers but falls through on ordinary calls, so launchers = {"x": subprocess.run}; for launch in launchers.values(): launch(["gh", "workflow", "run", "ci.yml"]) is accepted. This leaves the iterable-alias finding open for dictionary views and container-conversion calls, allowing a hidden workflow replay or other process launch to pass packet certification; the iterable analysis needs to follow reviewed view/wrapper calls back to their source containers.

AGENTS.md reference: AGENTS.md:L8-L8

Useful? React with 👍 / 👎.

Comment on lines +147 to +151
for statement in module.body:
if isinstance(statement, (ast.Import, ast.ImportFrom)):
exec(compile(ast.Module(body=[statement], type_ignores=[]), "<packet-scanner-import>", "exec"), namespace)
elif isinstance(statement, (ast.FunctionDef, ast.AsyncFunctionDef)):
exec(compile(ast.Module(body=[statement], type_ignores=[]), "<packet-scanner-function>", "exec"), namespace)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep packet scanner source non-executing during tests

When the Markdown scanner fence is modified, this setup executes every extracted import and function definition with full builtins before any specimen is inspected. An added import, decorator, or default-argument expression can therefore run arbitrary code merely by invoking the advertised offline regression harness, contradicting its non-executing contract; validate and whitelist these AST nodes without evaluating packet-controlled imports or definition-time expressions.

Useful? React with 👍 / 👎.

Comment on lines 8172 to +8175
def config_violation(assignment):
key = assignment.split("=", 1)[0].lower()
if git_config_include_key(key):
return "Git configuration includes are not allowed before read-only commands"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject every mechanism that enables Git config includes

The new check covers include keys supplied as -c, --config-env, or git config operands but still accepts git config --includes --list and command-prefix injection such as GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=include.path GIT_CONFIG_VALUE_0=/tmp/inc git status. git config -h describes --[no-]includes as “respect include directives on lookup,” and a local probe confirmed the environment form loads values from the referenced file, so these forms can still read sensitive configuration or activate included Git behavior after passing certification; reject include-enabling flags and inspect Git configuration environment assignments before wrapper stripping.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@@ -0,0 +1,582 @@
"""Offline, non-executing regression probes for the seven issue #79 findings.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Implement the new regression harness in Go or add an ADR

This commit introduces a Python implementation without an ADR or evidence-backed exception, even though the repository requires Go unless an ADR changes that decision. Reimplement the harness using the repository's Go tooling or add the required accepted ADR before introducing this non-Go maintenance surface.

AGENTS.md reference: AGENTS.md:L14-L14

Useful? React with 👍 / 👎.

Comment on lines +8728 to +8729
executable = executable_basename(tokens[0])
if executable == "set":

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject env invocations that print the inherited environment

The environment-dump check handles set and export but still accepts bare env and forms such as env -0 or env -u NAME; the wrapper parser then strips env, finds no child executable, and certifies the command. env --help explicitly states, “If no COMMAND, print the resulting environment,” so an executable shell fence can still emit every inherited credential despite this hardening; reject env whenever wrapper parsing reaches the no-command case.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

Triage checkpoint: Codex completed review of 387a647 with seven P1 findings. All are being treated as unresolved premerge blockers; current quick-check success does not override them. Independent contract/security reviews also reproduced overlapping reader/iterator gaps. A single correction batch with focused red/green evidence is in progress; no merge until final-head independent delta review, a fresh @codex review completion and quick checks. No live operations or workflow replay are authorized by this fix batch.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 387a647355

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

)
):
raise SystemExit("Git packet blob query was outside the reviewed revision/path")
command = git_query(["show", blob_spec])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Disable replacement refs for the HEAD blob check

When the local repository contains refs/replace/<HEAD>, this git show resolves the replacement object, while rev-parse HEAD and the remote ls-remote comparison retain the original commit ID. I reproduced a clean worktree where the original HEAD contained one packet, a replacement commit contained different bytes, and both this blob query and the worktree returned the replacement bytes while HEAD still matched the original remote SHA. git --help lists the global [--no-replace-objects] option; use it for the exact-head queries or explicitly reject replacement refs, otherwise the template can certify content that is absent from the reviewed remote head.

AGENTS.md reference: AGENTS.md:L16-L16

Useful? React with 👍 / 👎.

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +12296 to +12300
guarded = any(
isinstance(call, ast.Call)
and python_dotted_name(call.func) == "package_dir.relative_to"
and len(call.args) == 1
and python_path_division_names(call.args[0]) == expected_root

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Bind source-fuzz roots to the reviewed repository

When an executable fence defines source_fuzz_guard with these expected variable names but calls it with arbitrary roots, this check only proves that package_dir is below the caller-supplied go_repo_root / module_dir. I loaded the scanner and it accepted a helper invoked as source_fuzz_guard(Path("/"), Path("etc"), Path("")) that prints package_dir.glob("*"), allowing filesystem enumeration to enter packet output. Unlike the unresolved-receiver finding, this uses a directly recognized Path receiver and passes specifically through the new exemption; require provenance for the root or validate every call site rather than trusting the helper's name and parameter spelling.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dac58b4add

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +9223 to +9225
if isinstance(node.func, ast.Name):
local_helpers = python_local_function_candidates(
node.func.id, node, tree, parents

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Trace sensitive returns from every local callable

Restricting helper resolution to calls whose target is an ast.Name lets other local callables launder inherited credentials. For example, a class method that returns dict(os.environ), followed by secret = Snapshot().read(); print(secret), receives no scanner violation and emits the environment; a lambda assigned to a name has the same result because it is absent from the function index. Resolve method/lambda bodies too, or fail closed when their return provenance is unknown.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +9316 to +9319
elif isinstance(node, (ast.For, ast.AsyncFor, ast.comprehension)):
# Values yielded from an environment iterator remain sensitive in
# both loop bodies and comprehension elements.
assignments.append((node.target, node.iter))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Propagate taint through comprehension-produced iterables

When an outer loop consumes a comprehension, this new binding records the whole comprehension as the target's source, but that expression is not recognized as sensitive when its iterator is the call os.environ.values(). The fresh case for secret in [value for value in os.environ.values()]: print(secret) still passes after the enumerate/zip fix and prints inherited credentials; list, set, dict, and generator comprehensions need to propagate taint from their elements and generators.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +10289 to +10292
local_functions = {}
for node in ast.walk(tree):
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
local_functions.setdefault(node.name, []).append(node)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Trace launchers returned by non-function callables

Indexing only FunctionDef/AsyncFunctionDef nodes leaves other local factories outside launcher provenance. I checked factory = lambda: subprocess.run; launch = factory(); launch(["gh", "workflow", "run", "ci.yml"]) and the equivalent class-method factory, and both receive no scanner violation even though they execute a workflow dispatch. Include lambdas and callable methods in return analysis, or reject aliases produced by unresolved local calls.

AGENTS.md reference: AGENTS.md:L8-L8

Useful? React with 👍 / 👎.

Comment on lines +12693 to +12697
current = node
while current in parents:
parent = parents[current]
if isinstance(parent, ast.If):
condition = condition_value(parent.test)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Require the package containment check to be reachable

The reachability evaluator treats unrecognized constant conditions as unknown, so wrapping the containment try in if 1 == 1: pass; else: ... is accepted even though the check can never run; I applied that mutation to the canonical source-fuzz body and inspect_python_heredoc returned no violation. With an escaping package argument, execution continues to package_dir.glob without proving containment, allowing files outside the reviewed module to be inspected. Require the containment try in the direct reachable function body instead of accepting it beneath partially evaluated branches.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +352 to +355
def _verification_function(module: ast.Module, name: str) -> ast.FunctionDef:
for statement in module.body:
if isinstance(statement, ast.FunctionDef) and statement.name == name:
return statement

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject duplicate final-parity helper definitions

Returning the first matching function lets the harness validate a safe definition while Python executes a later override. I inserted a second require_packet_head_parity that simply returns immediately before its call: the packet scanner reported no violation, _verification_function still selected the original verifier, but the live template would bind and invoke the no-op definition, allowing mismatched packet bytes or intent bits to pass. Require exactly one top-level helper with this name before compiling it.

AGENTS.md reference: AGENTS.md:L16-L16

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b79709bf4c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines 14313 to 14320
if (
isinstance(value, ast.Attribute)
and value.attr in python_path_filesystem_read_methods
and not python_known_non_path_reader_call(value, tree)
):
receiver = value.value
elif isinstance(value, ast.Name) and value.id in aliases:
receiver = aliases[value.id]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Trace Path reader callables returned by helpers

Fresh evidence after the direct-receiver fix is def factory(): return Path("synthetic-private/file").read_text; reader = factory(); print(reader()): the current scanner returns no violation and the snippet emits arbitrary file contents. This alias analysis follows only direct attributes and existing names, not call results, even though local return analysis already exists elsewhere; propagate returned Path reader callables or fail closed on the unresolved alias.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +10583 to +10586
if (
isinstance(value.func, ast.Attribute)
and value.func.attr in {"items", "keys", "values"}
):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Trace launchers extracted by mapping methods

Fresh evidence after the dictionary-view fix is launchers = {"x": subprocess.run}; launch = launchers.pop("x"); launch(["gh", "workflow", "run", "ci.yml"]), which the scanner accepts. I checked gh 2.96.0's workflow run --help, which states that this command creates a workflow_dispatch event and triggers the workflow, so limiting attribute-call propagation to items/keys/values still permits an automatic replay through pop; mapping element-producing methods must preserve launcher provenance.

AGENTS.md reference: AGENTS.md:L8-L8

Useful? React with 👍 / 👎.

Comment on lines 9612 to +9617
for node in ast.walk(tree):
if not isinstance(node, ast.Call) or not isinstance(node.func, ast.Name):
continue
function = local_functions.get(node.func.id)
if function is None:
continue
for parameter, argument in call_arguments(node, function):
if python_sensitive_value_expression(
argument, sensitive_names, tree, parents
) and parameter not in sensitive_names:
sensitive_names.add(parameter)
changed = True
for function in python_local_function_candidates(
node.func.id, node, tree, parents
):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Propagate credential taint into callable parameters

Fresh evidence exercises argument flow rather than the previously fixed return flow: class C: def emit(self, payload): print(payload); C().emit(os.environ) receives no violation and prints the inherited environment; an assigned lambda with the same body also passes. The call-site taint pass considers only calls whose target is an ast.Name and resolves only function definitions, so method and lambda parameters never become sensitive; bind arguments for those local callable forms as well.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +6220 to +6224
packet_path = Path("docs/evidence/g01-recovery-packet.md")
intent_result = run_bounded_git_query(
git_query(["ls-files", "-v", "-z", "--", packet_path.as_posix()]),
cwd=Path.cwd(),
env=git_environment,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Check intent bits for every reviewed file

When scripts/evidence_packet/issue79_regression_test.py is marked assume-unchanged or skip-worktree and then edited to weaken or skip its tests, this packet-only intent/blob check still succeeds and the later git status remains empty, so test output from modified code can be paired with the reviewed remote HEAD. I checked the installed git update-index -h, which describes these flags as marking files “not changing” or “index-only”; reject such intent bits and compare HEAD bytes for every changed evidence source, not only the Markdown packet.

AGENTS.md reference: AGENTS.md:L16-L16

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9233241cbd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +9353 to +9355
if isinstance(value, ast.Call) and isinstance(value.func, ast.Name):
class_names.add(value.func.id)
for returned in python_local_call_return_values(value, tree, parents):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Resolve constructor aliases before indexing methods

Fresh evidence after the direct method-return correction is Alias = Snapshot; print(Alias().read()), where Snapshot.read returns dict(os.environ): the scanner reports no violation and prints the inherited environment. This resolver records the called name Alias as the class name without following its assignment to Snapshot, so both sensitive method returns and parameter flows can still be laundered through a class alias; resolve constructor aliases before looking up the method.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +10783 to +10785
isinstance(value.func, ast.Attribute)
and value.func.attr in {"items", "keys", "values", "pop"}
):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Track launchers returned by mapping get

Fresh evidence after the .pop correction is launchers = {"x": subprocess.run}; launch = launchers.get("x"); launch(["gh", "workflow", "run", "ci.yml"]), which the scanner accepts because this mapping-method list omits get. I checked gh 2.96.0's workflow run --help, which says it creates a workflow_dispatch event and triggers the workflow, so mapping lookup can still hide an automatic workflow replay; preserve launcher provenance through get as well.

AGENTS.md reference: AGENTS.md:L8-L8

Useful? React with 👍 / 👎.

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +13024 to +13028
if dotted not in path_preserving_calls and not (
isinstance(node.func, ast.Attribute)
and node.func.attr in {"as_posix", "as_uri"}
):
return False

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve resolved paths through format calls

When a resolved path is converted with the built-in formatter, value = format(Path.cwd().resolve()); print(value) receives no scanner violation and emits the local worktree path. Because an unrecognized call returns False here instead of propagating path provenance from its arguments, the new output-sink protection can be bypassed by format (and similarly ascii or an explicit __str__ call); include these path-preserving conversions or conservatively trace their arguments.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +41 to +43
The harness must use only the standard library and explicitly selected local
Git fixture operations. Invoke it with `python3 -B` to avoid bytecode artifacts
and record the actual interpreter and test results. Adding dependencies,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Run the regression harness in isolated Python mode

When the maintainer environment has PYTHONPATH, a user-site sitecustomize, or another Python startup customization, the prescribed python3 -B command executes that code before the harness's import and definition-time validation. I reproduced this with a synthetic PYTHONPATH containing ast.py, which executed immediately on harness startup; Python's local --help confirms that -B only disables bytecode while -I isolates Python from the user environment. Invoke the harness with isolated mode so external startup/import code cannot access credentials or corrupt the recorded regression result.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a61c35fb8a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +13742 to +13743
for statement in candidate.body
for call in ast.walk(statement)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Require reachable Markdown link containment

When the Markdown link check nests path.relative_to(repository_root) under if False, this broad ast.walk predicate still marks the path as guarded; I applied that mutation to the canonical link-check heredoc and inspect_python_heredoc returned no violation. A repository Markdown target such as ../../private/file#x can then reach path.is_file() and anchors(path) without containment, causing certification to read outside the reviewed repository; require the containment call to be a direct reachable statement in the guarded try.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +14024 to +14026
candidates = tuple(assignments.get(value.id, ())) + tuple(
iterable_bindings.get(value.id, ())
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Resolve regex match aliases within lexical scope

When a function parameter shadows a module-level regex-match variable, this global name-based lookup still classifies the parameter as a regex result. I verified that match = re.match("x", "x"); def expose(match): print(match.group()); expose(Path("/etc/passwd")) receives no scanner violation, even though runtime dispatches Path.group() and performs an unreviewed filesystem metadata read. Scope assignment and parameter bindings before exempting .group() as a regex API.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2c755af9dc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +9706 to +9710
if dotted == "dict" and any(
isinstance(argument, ast.Attribute)
and python_dotted_name(argument) == "os.environ"
for argument in node.args
python_sensitive_value_expression(
value, sensitive_names, tree, parents, seen.copy()
)
for value in list(node.args)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Propagate environment taint through constructor aliases

In the packet's isolated Python heredocs, aliasing a preserving constructor bypasses this name-based check: maker = dict; value = maker(os.environ); print(value) receives no scanner violation and prints the inherited environment. Resolve aliases of the listed container/string constructors before testing the call target, otherwise packet certification can emit credentials despite the new taint propagation.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment thread docs/evidence/g01-recovery-packet.md Outdated
Comment on lines +13249 to +13253
python_imported_function_alias_is_stable(
node.func.id, "sys", "exit", tree
)
or python_assigned_callable_alias(node.func.id, "sys.exit", tree)
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Recognize aliases of every sensitive output sink

The name-based alias branch only resolves sys.exit, so a packet heredoc such as emit = print; emit(os.environ) receives no scanner violation and writes the entire inherited environment; emit = warnings.warn is affected similarly. Extend alias resolution to all sinks recognized by this function so known credential taint cannot be laundered merely by assigning the sink to another name.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +13135 to +13139
assignments_by_name,
seen.copy(),
):
return True
return False

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Treat home-directory constructors as private path sources

In the packet's isolated Python heredocs, print(Path.home()), print(Path("~").expanduser()), and print(os.path.expanduser("~")) all receive no scanner violation while emitting the maintainer's personal home path. This provenance check recognizes Path.cwd() but returns false for these other standard local-path constructors, so include home/expansion operations among resolved local path sources before output-sink certification.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +8767 to +8771
or value not in reviewed_shell_export_assignments
for value in assignments
):
return "shell export requires explicit reviewed assignments"
return None

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject environment reads inside allowlisted shell processors

The new environment-output gate accepts every non-set/export command, but the shell allowlist includes processors with direct environment access: awk 'BEGIN { print ENVIRON["GH_TOKEN"] }' and jq -n env both receive no scanner violation, and local synthetic probes confirmed that each prints the supplied variable. Inspect or reject the environment primitives of these allowlisted processors so executable packet fences cannot emit inherited credentials.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

Comment on lines +269 to +276
def _top_level_assignment(module: ast.Module, name: str) -> ast.Assign | ast.AnnAssign:
for statement in module.body:
if isinstance(statement, ast.Assign) and any(
isinstance(target, ast.Name) and target.id == name
for target in statement.targets
):
return statement
if isinstance(statement, ast.AnnAssign) and isinstance(statement.target, ast.Name) and statement.target.id == name:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject duplicate verification-template assignments

Fresh evidence beyond the duplicate-helper correction is a second top-level issue79_reviewed_evidence_paths assignment after the canonical one: this helper returns the first assignment and the regression assertion still sees both reviewed files, while Python executes the later value and the live parity loop can omit the harness entirely. Requiring each security-relevant template assignment to be unique prevents an assume-unchanged modified harness from being paired with the reviewed remote head after tests validated a shadowed value.

AGENTS.md reference: AGENTS.md:L16-L16

Useful? React with 👍 / 👎.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

https://github.com/1XP-AI/gh-runnerd/blob/1f5f89bc80f09393dbc44f45d20f0141e747005a/docs/evidence/g01-recovery-packet.md#L11329-L11330
P1 Badge Reject launchers invoked through inline named expressions

Fresh evidence after the launcher-alias corrections is import subprocess; (launch := subprocess.run)(["gh", "workflow", "run", "ci.yml"]), which the current scanner accepts. The installed gh 2.96.0 help states that workflow run creates a workflow_dispatch event and triggers the workflow, so limiting NamedExpr handling here to conditional values still permits an automatic replay when the assignment expression itself is the call target; resolve that target or fail closed on such callable expressions.

AGENTS.md reference: AGENTS.md:L8-L8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"traceback.print_exception",
}:
return True
if isinstance(node.func, ast.Name) and tree is not None:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Resolve inline aliases before classifying output sinks

Fresh evidence after the assigned/import-alias fix is import os; (emit := print)(os.environ): the current scanner returns no violation, while Python immediately invokes print and emits the entire inherited environment. This branch only resolves sink aliases when the callable is an ast.Name, so a NamedExpr used directly as the call target bypasses the new protection; resolve callable expressions here or fail closed on unresolved targets.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

for value in assignments
):
return "shell export requires explicit reviewed assignments"
return None

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject indirect shell expansion of credential variables

In an executable Bash fence, name=GH_TOKEN followed by printf '%s\n' "${!name}" receives no scanner violation and prints the inherited token; I confirmed this with a synthetic GH_TOKEN. The new environment-output gate accepts every command other than the special set/export cases, while the earlier parameter regex does not recognize Bash's ${!name} indirect expansion, so an allowlisted printf can still place credentials in packet output; reject indirect expansion or resolve its referenced variable before allowlisting the command.

AGENTS.md reference: AGENTS.md:L9-L9

Useful? React with 👍 / 👎.

@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

https://github.com/1XP-AI/gh-runnerd/blob/3023373c91251d51b07e86721b7291c766d6c3ad/docs/evidence/g01-recovery-packet.md#L27402-L27405
P1 Badge Account for attribute callers of class-owned helpers

For a function defined in a class suite, this Name-only scan misses callers and escapes through C.read, so one harmless bare call inside the suite incorrectly establishes caller completeness. Fresh exact-head evidence is a class defining read(receiver, member="body") to return getattr(receiver, member, None) and calling read(None) in its body: a subsequent namespace = C.read(tuple([f])[0], "".join(["__", "globals__"])), where f is a module-level function, is accepted. Following that with namespace["m"]["x"] = {"value": os.environ}; print(m) also receives no scanner violation, although execution would disclose the inherited environment. The same inert specimen is rejected by 46e15a3. Refuse class-owned definitions here unless class-qualified calls, metadata access, and escapes are also accounted for before treating the parameter domain as complete.

AGENTS.md reference: AGENTS.md:L9-L9


https://github.com/1XP-AI/gh-runnerd/blob/3023373c91251d51b07e86721b7291c766d6c3ad/docs/evidence/g01-recovery-packet.md#L27369-L27372
P1 Badge Resolve default captures in their definition-time scope

When a default captures a helper under a parameter with the same name, this scope lookup mistakes the captured reference for the parameter and skips the escape check. An inert exact-head specimen defines name() returning "body", then def mutate(name=name): name.__code__ = evil.__code__, where evil() returns "".join(["__", "globals__"]). After mutate(), namespace = getattr(tuple([f])[0], name()) obtains the module namespace at runtime, but the scanner still trusts the original literal return. Adding namespace["m"]["x"] = {"value": os.environ}; print(m) receives no violation on 3023373, whereas 46e15a3 rejects the same specimen. Resolve references in defaults against the enclosing definition-time scope before checking helper escapes, so this metadata mutation cannot invalidate the literal-return proof unnoticed.

AGENTS.md reference: AGENTS.md:L9-L9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Please review exact correction head fa8aa39. Both P1 findings in 6378329549 are accepted/reproduced and fixed. Class-owned helpers/class-suite escape contexts cannot establish complete member/caller proofs; defaults/decorators/annotations use definition-time reference ownership, and missing outer header-walrus binders invalidate the proof. Adjacent same-spelling class export and reflected-accessor extraction bypasses are also reproduced/fixed. The batch includes a scanner self-audit compatibility correction: AST literal predicates no longer construct runtime types; integer-only bool exclusion and all declaration-owner consumers remain preserved. Runtime type/metatype policy is unchanged. Final-source PR103 prefix: 185 methods PASS (10.769s); complete getter fixture inventory: 49 PASS (12.451s); targeted native/owned-path/type/review controls: 10 PASS (1.721s); aggregate preflight PASS (206/328/7, 14.121s). Whole-packet qualification is running, not yet a pass. Source is frozen; the ledger records failed/superseded receipts honestly. Please check lexical ownership, escape completeness and the unchanged fail-closed policies. No live operations, internal approval or general sandbox guarantee is claimed.

@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

https://github.com/1XP-AI/gh-runnerd/blob/fa8aa396adbcdda479f888c65a2fe061ac3ec3fb/docs/evidence/g01-recovery-packet.md#L27343-L27346
P1 Badge Resolve comprehension input references in their enclosing scope

Fresh exact-head inert evidence is box = [name for name in [name]]; box[0].__code__ = evil.__code__, where name() initially returns "body" and evil() returns a computed "__globals__". Python evaluates the outermost comprehension iterable in the enclosing scope, but this scope chain resolves its name reference to the comprehension target. The escape scan therefore misses the captured helper and continues trusting its original return. On fa8aa39, following this with namespace = getattr(tuple([f])[0], name()); namespace["m"]["x"] = {"value": os.environ}; print(m) receives no violation, although execution would disclose the inherited environment (f is a module-level function and m starts as a safe mapping). The same specimen is rejected by 46e15a3. Exclude the comprehension scope when resolving references in its outermost iterable.

AGENTS.md reference: AGENTS.md:L9-L9


https://github.com/1XP-AI/gh-runnerd/blob/fa8aa396adbcdda479f888c65a2fe061ac3ec3fb/docs/evidence/g01-recovery-packet.md#L27414-L27417
P1 Badge Follow global declarations when checking helper escapes

When a nested mutator declares global name, the inventory contains a declaration entry in that function, so this first-entry lookup mistakes the declaration scope for the helper's binding owner and skips its metadata access. Fresh exact-head inert evidence defines name() returning "body", then calls mutate() containing global name; name.__code__ = evil.__code__, with evil() returning a computed "__globals__". The scanner subsequently accepts namespace = getattr(tuple([f])[0], name()); namespace["m"]["x"] = {"value": os.environ}; print(m), although execution would disclose the inherited environment (f is a module-level function and m starts safe). Removing global name correctly triggers rejection, and 46e15a3 rejects both variants. Resolve declaration entries to their actual binding owners before deciding whether a helper reference escapes.

AGENTS.md reference: AGENTS.md:L9-L9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Please review exact correction head f53732c. Both P1 findings in 6378504497 are accepted/reproduced and fixed: outermost comprehension iterables use enclosing ownership, and global/nonlocal declarations resolve to their actual binding owners before escape checks. Adjacent list/dict/set/generator captures and nonlocal/default-mutation controls are included. A separate coordinator probe reproduced boxed globals/locals/vars, empty starred vars and builtin-module namespace calls; these namespace callables are now refused as data, while direct vars(obj) is preserved. The actual AST-parameter conditional assignment that tripped the unchanged launcher gate is rewritten equivalently as an explicit if; no command policy exception was added. Current-source 189 PR103 methods PASS (10.789s), all 52 getter-fixture methods PASS (12.324s), expanded preflight PASS (206/328/7, 13.832s). The fast launcher test extracts the changed actual helper; it does not replace the whole scanner check. Fresh full-packet qualification is running, not a pass. Source is frozen, failed/incomplete historical receipts remain recorded, and no live operation, internal approval or general sandbox guarantee is claimed.

@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

https://github.com/1XP-AI/gh-runnerd/blob/f53732cd8a5d5170f4e5eb358a146872c28784fe/docs/evidence/g01-recovery-packet.md#L27385
P1 Badge Exclude class bindings when resolving nested method references

When a method definition is inside class-suite control flow, the inherited scope chain still includes the class namespace, so this resolver can incorrectly attribute a method's global reference to a class member. Fresh exact-head inert evidence defines a module helper name() returning "body", then class C with name = "safe" and, beneath if True, a mutate method executing name.__code__ = evil.__code__. Python mutates the module helper, but the scanner attributes that reference to C.name and continues trusting the helper's original return. With evil() returning a computed "__globals__", the subsequent getattr(tuple([f])[0], name()) obtains the module namespace and permits an indirect mapping mutation that exposes os.environ through print(m) without a violation. The specimen is rejected by 46e15a3; removing the class's if also correctly triggers rejection on this head. Skip class namespaces for method lexical lookup regardless of intervening control-flow nodes.

AGENTS.md reference: AGENTS.md:L9-L9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Please review exact correction head b8990ff. P1 6378874822 is accepted/reproduced and fixed: class scopes are never lexical parents for member-proof method references, regardless of intervening if/try/loop nodes. Unsupported class-suite contexts remain refused. Missing header binders invalidate every possible enclosing owner rather than guessing across class global redirection; an adjacent nested-class/header-walrus bypass is reproduced/fixed. The unchanged read-only method positive remains accepted. Final-source PR103 regression: 191 methods PASS (10.865s); getter fixture inventory: 54 PASS (12.581s); targeted ownership/native-path/prior-review controls: 12 PASS (0.816s); aggregate preflight PASS (206/328/7, 13.960s). All prior P1 triage is retained in the ledger. Source is frozen. To avoid qualifying superseded inputs, mandatory fresh whole-packet qualification will run after the final-head review settles the source; it is not skipped or claimed passed. No live operations, internal approval or general sandbox guarantee is claimed.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: b8990ffa3d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

Final-head GitHub review receipt for b8990ffa3d6aecabf1ccbe53ab175c0a5376eae4:

  • Codex completed this exact-head review and reported no major issues. Current inline, issue-comment and formal-review pages were read; no new finding was returned in that review.
  • Matching hosted PR quick check 40056003583 PASS (head SHA verified).
  • Current source: 191 PR103 regression methods PASS (10.865s), 54 getter-fixture methods PASS (12.581s), 12 targeted controls PASS (0.816s), aggregate preflight PASS (206/328/7, 13.960s). Selectors overlap. The immutable candidate ledger carries all previous P1 reproductions/corrections and failed/interrupted qualification evidence.
  • Mandatory fresh full-packet qualification has now started on packet blob fb07ea1786ae9e61d2f74cc7782b52f29b78a248 and harness blob 0556313926baf95a23a6ba1ec31f26c6c2071929, exactly the frozen current head. It is still running; no pass is claimed.

The source/worktree remains unchanged. Separate required internal security/design approval is not claimed or silently waived; account/provider setup remains outside the maintainer-selected scope. No merge, live/canary execution, runner modification or general Python sandbox guarantee is claimed.

@jjangg96

Copy link
Copy Markdown
Contributor Author

Maintainer authorization update (2026-10-24): the maintainer explicitly approved replacing the separate internal independent-review requirement with completed GitHub Codex review for PR #103 only. This is a narrowly scoped review-route exception, not a claim that an unavailable internal review occurred, not a repository-wide policy change, and not a waiver of exact-head GitHub review, finding triage, hosted quick checks, or the fresh full-packet qualification. The current candidate remains b8990ff. Full-packet qualification is still running; merge remains conditional on its successful result and a final same-head audit. Actual live/canary execution remains separately approval-gated.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Please review exact head cc6a499. Delta from b8990ff: replace the equivalent conditional AST-reference initializer in v22_closed_call with an explicit if, preserving the conservative conditional-launcher rule; add a fast actual-source projection covering ALL conditional assignments, rather than just the preceding primitive helper. No security rule/proof or shared interface is relaxed. Whole-packet qualification on b8990ff failed after 1570.462s at this sole remaining initializer, despite its clean GitHub review; it is explicitly not a pass. Reproduction RED 0.525s, focused GREEN 0.844s; final 192 PR103 methods PASS 21.615s, 54 getter methods PASS 16.509s, aggregate preflight PASS 17.593s (206/328/7). Counts overlap. Packet blob adf98700018c5ea04fb5ec060cf9a868ad5a6a07; harness cbcf97c4d3f633db9a4c2697cd61c635388db42a. Ledger carries the failed qualification and narrow maintainer-approved internal-review replacement for this PR. Fresh same-head review, quick CI, all-finding triage and successful whole-packet qualification remain required before merge. No live/canary execution or general Python sandbox guarantee is claimed.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. What shall we delve into next?

Reviewed commit: cc6a49928b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

Stable correction checkpoint: exact head cc6a499 received completed GitHub Codex review with no major issues at #103 (comment) and matching hosted quick success at https://github.com/1XP-AI/gh-runnerd/actions/runs/40058295714. Current inline and formal review pages add no findings; prior finding dispositions remain in the ledger. A fresh complete packet qualification started on the clean frozen inputs at 2026-10-24T03:29Z: packet adf98700018c5ea04fb5ec060cf9a868ad5a6a07 and harness cbcf97c4d3f633db9a4c2697cd61c635388db42a, isolated CPython 3.14.3 with PATH/locale-only environment. It is RUNNING, not yet a pass. The failed b8990ff qualification remains historical FAIL. Merge stays gated by this current result and the final same-head audit. Maintainer-approved separate-internal-review replacement applies only to this PR; no unavailable internal approval, G01/G02 completion, live/canary operation or general Python sandbox claim.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Please review exact head 5536e60. Delta from cc6a499 is alpha-renaming only: 44 local AST Name references in seven private helper scopes from call to syntax_call, plus one private scalar-index predicate and its four references from index to v22_sequence_index_is_scalar. A read-only immutable-source AST comparison confirms no other scanner operation, literal, expression or public signature changed. The conservative launcher rules/alias inventory are NOT weakened and no whitelist is expanded. A fast actual-source test covers the real callback guard and unresolved direct-call inventory, including new private helpers; it retains only the inspector existing value exception in python_literal_bindings. RED reproduced the whole-scan callback finding (3.230s), then four latent index collisions before another slow scan (3.438s). Final GREEN 3.633s; 193 PR103 methods PASS 16.893s, 54 getter methods PASS 15.242s, expanded aggregate preflight PASS 16.306s (206/328/7). Counts overlap. Packet 3ee10900f24c7a467acbd762096679681e72e435; harness 46620589f228f11ba556373dc1cd237ec2bead39. The cc6a499 full qualification FAILED one callback finding after 1938.693s despite its clean review/quick; failure and prior controls remain in the ledger. Fresh full qualification follows this stable review; it is not waived. Maintainer-approved replacement of separate internal review with GitHub Codex applies only to this PR. All exact-head review/finding/quick/full-packet gates remain; no live/canary operation or general Python sandbox guarantee.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Attribution-only repeat on the SAME unchanged head 5536e60. Please include the reviewed commit SHA in the completed result. The prior cycle was recorded as running on this SHA and returned no major issues at #103 (comment), but its completed metadata has commit_sha=null and its receipt omits Reviewed commit. Do not infer exact-head approval from null. Repeating once because that attribution is inconclusive, not because source changed or to request intermediate reviews. The delta remains private identifier renaming only, with 193 focused methods and 54 getter methods passing; no rule/allowlist changes or live actions.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 5536e6006b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

Stable V32 checkpoint: exact head 5536e60 has completed same-head Codex review with explicit Reviewed commit at #103 (comment) and matching quick success at https://github.com/1XP-AI/gh-runnerd/actions/runs/40061238858. One attribution-only review repeat was needed: the earlier no-findings receipt omitted its SHA and completed metadata was null; that inconclusive receipt was not used for exact-head approval. No source changed between requests. New inline/formal pages add no findings. Current full-packet qualification started 2026-10-24T04:15Z on clean frozen packet 3ee10900f24c7a467acbd762096679681e72e435 and harness 46620589f228f11ba556373dc1cd237ec2bead39, isolated CPython 3.14.3 with PATH/locale-only environment. It is RUNNING, not a pass. Prior FAIL receipts remain in the ledger. Same-head final audit, successful qualification and the other non-waived gates remain required before merge. The PR-specific separate-internal-review replacement is maintainer-approved; live/canary and G01/G02 completion are not authorized or claimed.

@jjangg96

Copy link
Copy Markdown
Contributor Author

@codex review

Review exact head 9d9b864 and include Reviewed commit SHA in the completed receipt. The minimal scanner delta replaces private v22_position nested getattr returns with explicit fixed AST location attributes guarded by hasattr, preserving start-field fallback -1 and existing end-field precedence (including None) for parser-created AST metadata. Arbitrary objects with side-effecting attribute overrides are outside this helper contract. No reflection/helper-return rule or allowlist is relaxed. The preceding 5536e60 full packet scan FAILED 2286.539s at the conservative reflective-helper-result gate despite its clean review/quick; recorded as FAIL. Actual helper+caller projection reproduced the exact definitions alias/body line15653 RED 0.455s, GREEN 0.469s. Final 194 PR103 methods PASS14.558s, 54 getter methods PASS18.546s, aggregate206/328/7 PASS19.965s. Crucially, the COMPLETE actual scanner definition source now passes the filesystem-alias guard (446.103s), not just the tiny projection. Later signal and indirect-execution gates also PASS1.266s. These are targeted preflights, not whole-packet approval. Packet125ea92e4566304a23488948d559ec2e684ba595; harness69b1f698609071823bb7dea4a0d92a48560ca7d6. Prior controls/failure/source identities remain in the ledger. Fresh same-head review/quick, all-finding triage and whole-packet qualification remain premerge gates. PR-specific maintainer internal-review replacement applies; no live/canary or general Python sandbox claim.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit: 9d9b864604

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jjangg96

Copy link
Copy Markdown
Contributor Author

Stable V33 checkpoint: exact head 9d9b864 has completed explicitly attributed Codex review with no major issues (#103 (comment)) and same-SHA hosted quick success (https://github.com/1XP-AI/gh-runnerd/actions/runs/40064876584). New inline/formal pages add no findings. Frozen whole-packet qualification started at 2026-10-24T05:08Z on clean packet125ea92e4566304a23488948d559ec2e684ba595 and harness69b1f698609071823bb7dea4a0d92a48560ca7d6 using isolated CPython3.14.3 and a PATH/locale-only environment. It is RUNNING, not a pass. The preceding 5536e60 full FAIL2286.539s is retained. The exact changed helper+caller projection and complete actual-scanner filesystem-alias preflight PASS446.103s do not replace whole-packet qualification. Final same-head audit and successful qualification remain required before merge; the maintainer-approved internal-review replacement is PR-specific, with no unavailable internal approval, live operation or G01/G02 completion claimed.

@jjangg96

Copy link
Copy Markdown
Contributor Author

FINAL FROZEN QUALIFICATION — PASS

Exact candidate: 9d9b864. Packet blob125ea92e4566304a23488948d559ec2e684ba595; harness blob69b1f698609071823bb7dea4a0d92a48560ca7d6. Input hashes and clean worktree verified again after completion; no source changed after final review.

Actual command: env -i PATH=/opt/homebrew/bin:/usr/bin:/bin LC_ALL=C /opt/homebrew/bin/python3.14 -I -B scripts/evidence_packet/issue79_regression_test.py -k test_current_packet_has_no_static_scanner_violations

Actual isolated CPython3.14.3 result: one test PASS in2409.790s, exit0; 261 shell commands and86 Python heredoc bodies statically inspected, ZERO violations. Specimens remained inert AST data, not executed. Earlier1570.462s/1938.693s/2286.539s FAIL receipts remain historical FAIL in the ledger, not overwritten.

Other final-source receipts: 194 focused methods PASS14.558s; 54 getter methods PASS18.546s; aggregate206/328/7 PASS19.965s; complete actual-scanner filesystem-alias preflight PASS446.103s. Selectors overlap. Completed exact-head Codex review: #103 (comment) . Matching PR quick success: https://github.com/1XP-AI/gh-runnerd/actions/runs/40064876584 .

Final updated issue-comment, inline and formal-review audit adds no findings; historical immutable-source finding triage and reproductions remain in the packet/ledger. No unresolved blocker or pending review was found. PR head is unchanged and mergeable/clean against main3255cf3a990312a65e9ffa4971a468dd12310e3b. Maintainer-approved replacement of separate internal independent review applies ONLY to this PR (#103 (comment)); no unavailable internal approval is claimed. Proceeding with an exact-head constrained merge under the resumed merge authorization. Main Public CI will be recorded separately as integration evidence. No local Go/race/full-matrix PASS, G01/G02 completion, live/canary operation or general Python sandbox guarantee is claimed.

@jjangg96
jjangg96 merged commit 1eb30fc into main Oct 24, 2026
1 check passed
@jjangg96
jjangg96 deleted the orca/issue-79-evidence-hardening branch October 24, 2026 05:50
@jjangg96

Copy link
Copy Markdown
Contributor Author

POSTMERGE INTEGRATION — PASS

Merged at 2026-10-24T05:50:45Z as main1eb30fcfe010f25c16bfe1a87c69c0189a7bfc62. The merge tree matches reviewed/qualified head9d9b86460402fb200deb9e7a0846e665d9f22e9f (no source-tree diff). Local clean main was fast-forwarded to the same merge SHA.

Automatic push-triggered Public CI completed SUCCESS on that exact main SHA: https://github.com/1XP-AI/gh-runnerd/actions/runs/40067852573 . All seven checks passed: root/tooling, root race, G01 offline, G02 offline, R1 credentials offline, vulnerability check and aggregate Go checks. No manual dispatch/replay was used. This is separate postmerge integration evidence, not retroactive merge authority.

Premerge frozen packet PASS261 shell/86 Python bodies/zero violations in2409.790s and same-head review/quick/finding audit are recorded at #103 (comment) . A postmerge audit found no late inline, formal or issue-comment findings. #79 acceptance is satisfied; closing that issue and marking its Project item Done. G01#1/G02#2 remain open/incomplete and the parent goal remains paused. No live/canary/runner/credential operation or general Python sandbox guarantee is claimed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant