Repository navigation
feat(issue-ci): add read-only review readiness receipts - #76
Merged
Merged
Conversation
Reuse trusted applicability and current-attempt snapshots for ready/wait/fail review prerequisites, independently from lifecycle label authority. Bind exact head/base/policy, recursive source pins and nonzero assertion contracts; verify receipts against their successful trusted producer and fresh GitHub evidence. Preserve failure-only handoffs and legacy review receipts. Leave consumer activation, readiness index publication and reviewer session leases separate. References #75
Reject explicit and multiline YAML mapping keys rather than overlooking hidden uses references. Reject multiline quoted keys in the narrow subset; GitHub runner acceptance of those special forms remains untested. Use one strict JSON object-pairs hook for metadata, policy, wake events, assertion and producer logs, and receipt files. Refuse duplicate keys at any depth, including equal values and escape-equivalent names. Add regressions for both review findings; preserve identity, freshness and legacy lifecycle behavior. Affected isolated suite: 130 passed.
Replace line-oriented key discovery with PyYAML 6.0.3 scanner tokens and BaseLoader representation nodes. Reject explicit/split/complex keys in block and flow contexts, aliases, tags, duplicate keys and bounded resource overflow without constructing YAML objects. Pin all official PyPI wheel hashes. Only readiness operations bootstrap a run-local isolated venv; legacy operations and aw package dependencies stay unchanged. Missing or different parser versions refuse readiness. Reproduce the flow-adjacent split-key bypass with scanner and producer fixtures. Affected isolated suite: 135 passed, including unchanged JSON, identity, freshness, journal and reclaim regressions. No workflow executed.
chrischeng-c4
marked this pull request as ready for review
October 24, 2026 12:29
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
References #75.
Repeated review polling reconstructs deterministic CI prerequisites, while the existing qualifier also mixes those prerequisites with done-label authority. Add one shared read-only readiness result and authenticated receipt interface for later thin consumers, without six controller forks.
Behavior
New parser dependency / execution supply
Readiness only: PyYAML==6.0.3, official release https://pypi.org/project/PyYAML/6.0.3/ .
scripts/readiness-requirements.txtlocks all 72 official wheel SHA256 values from the release's PyPI JSON metadata; no source builds or transitive packages are accepted. Lock SHA256:eef6794465b73b5dc4ef909500bf5bcc56761b93bb1521a05a97746d1f7f298d.Only readiness/verify-readiness create a run-local venv below RUNNER_TEMP, install from
https://pypi.org/simpleusing isolated pip,--no-deps --only-binary=:all: --require-hashes, and execute the evaluator in Python isolated mode. The immutable aw reference binds action/code/lockfile. Legacy validate/qualify/handoff skip that bootstrap; main aw package dependencies/uv.lock and permissions are unchanged. No global package or credential change. Missing or different parser versions refuse readiness.Validation
python -B -m unittest discover -s plugins/faberline/skills/issue-ci/tests -p 'test*.py' -q: 135 passed (89 existing lifecycle/qualification cases plus 46 readiness/distribution/parser cases). Final runtime-scope fixture also passed under-I.Deliberate first-phase limits
No live consumer/prompt/frequency changes, readiness index publisher, dispatcher/session lease, completion-ledger v2, native webhook/pre-model hook or done activation. Tape #40/#35 still owns the first actual consumer gate; its docs validator is not reimplemented here. Missing index remains an integration blocker, never an empty queue.
Assertion enforcement and actual executed head/base must be established in reviewed real consumer CI; mocked fixtures are not pilot evidence. Pin proof covers declared action/workflow references and enforcement sources, not arbitrary-language imports or a hermetic build. External local-uses checkout context remains unsupported. Verification currently recollects bounded evidence for one named PR; no receipt-only cache or zero-token desktop polling is promised. GitHub has no cross-resource CAS, so consumers must reverify immediately before review/findings.
Draft for independent re-review at
7d5aa3facaa1461c7d22263499a2e2e15b8e9a0e. Do not merge or deploy consumers in this scope.