Skip to content

ci: align secp feature-base workflows with provisioned runner images - #5167

Open
infraclaw-dash wants to merge 3 commits into
dashpay:chore/bump-rust-dashcore-secp-033from
infraclaw-dash:ci/secp-feature-runner-image-20260929
Open

infraclaw-dash wants to merge 3 commits into
dashpay:chore/bump-rust-dashcore-secp-033from
infraclaw-dash:ci/secp-feature-runner-image-20260929

Conversation

@infraclaw-dash

Copy link
Copy Markdown
Contributor

Issue being fixed or feature implemented

infraclaw: current-head PR5113 targets chore/bump-rust-dashcore-secp-033, not a development branch. Its Kotlin job fails in setup-android when attempting to write the root-owned prebaked SDK (cmdline-tools, permission denied). Fixing v4.2/v4.3 alone will not adopt a fix on this feature base.

What was done?

Backport the CI-only Rust/Kotlin image integration proposed in #5166 directly to this exact target branch, with no application history:

  • Pinned AMD64/ARM64 manifests and repository Rust 1.98.1, full-status/provenance selector, and reviewed controller 7d901150bd3d0789d50c46f365b058f2f5f1f52d.
  • Verify provisioned dependencies instead of sudo/setup-android writes; retain native/unit/instrumented application tests and existing same-repository/thepastaclaw fork gates.
  • Hosted credential-free selector/workflow tests for fork review.
  • Add only this exact feature-base name to the candidate workflow target filter, not a chore/* wildcard. This does not change fork admission or allocator trust.
  • Preserve this feature branch's Rust package test list (in particular, do not import v4.3's additional moderation-charters package).

NPM/release migration and newer image-controller adoption remain separate. This does not change PR5113 application code or its independent Storage Explorer coverage failure.

How Has This Been Tested?

  • 31 focused tests pass, including exact target filter, retained fork guards, toolchain parity and Kotlin test invocations.
  • Shell syntax and diff checks pass; clean cherry-pick of CI-only integration with branch-specific application test list retained.
  • Actual target adoption and PR5113 execution remain to be verified after an ordinary reviewed merge. Historical runs are not blindly rerun or represented as passing.

Breaking Changes

None. No application/test assertion changes, release publication, fork trust expansion or protection bypass.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have assigned this pull request to a milestone

@coderabbitai

coderabbitai Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: dashpay/platform/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 3630711b-7c2e-4cb0-aed4-ddcb11125cd2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thepastaclaw

thepastaclaw commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Final review complete — no blockers (commit ad105ea) · triage: normal

@ktechmidas
ktechmidas requested a review from shumkov September 29, 2026 02:33

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Final validation — Phase 1 + Phase 2

Verified both reported issues against the exact PR head: the new ARM64 validation path has no workflow caller, and the runner-contract failure message references missing documentation. Both are non-blocking suggestions. All 31 focused tests, shell syntax validation, and diff checks passed locally; live image publication and provisioned-runner execution remain unverified.

🟡 2 suggestion(s)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: architecture-layering); reviewer 3: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 4: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)

  • Triage: normal by gpt-6-astra (effort low) — This substantial CI integration changes runner selection, provisioning verification, and Rust/Kotlin workflow behavior across 12 files, but the diff does not modify any qualifying critical surface.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — architecture-layering (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 13% left, 5h 100% left), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-verifier
  • Phase 2 reviewers: gpt-6-astra — general (completed, effort high); agent phase2-reviewer, gpt-6-astra — architecture-layering (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `.github/scripts/runner-image.py`:
- [SUGGESTION] .github/scripts/runner-image.py:130-134: Wire ARM64 validation into orchestration before relying on a separate job
  This branch excludes ordinary ARM64 capacity when its manifest changes, relying on the separate ARM64 validation job described in the comment. However, the only repository caller of tests-rs-workspace.yml is tests.yml, and it supplies neither runner-architecture: ARM64 nor validate-arm64-image: true. No workflow therefore selects the new validation-only pool. The Rust change filters also omit the manifests, while runner-image-candidate.yml watches only the AMD64 manifest. An ARM64-manifest-only PR consequently has hosted contract-test coverage but no ARM64 runtime validation; the contract tests mock ci-image-contract execution. Runtime verification still fails closed, so this is a validation gap rather than a trust-boundary bypass. Add a guarded caller and ARM64-manifest trigger in tests.yml or a dedicated workflow, preserving the existing fork-admission policy, and test that this caller passes both validation inputs.

In `.github/actions/rust/action.yaml`:
- [SUGGESTION] .github/actions/rust/action.yaml:44-48: Contract-failure error points to a doc file missing from this branch
  The new self-hosted runner guard directs operators to .github/SELF_HOSTED_RUNNER.md, but that file does not exist at this PR head. A runner rejected by the contract guard therefore receives a broken troubleshooting pointer precisely when provisioning guidance is needed. Include the relevant maintained setup documentation or replace the pointer with existing resources such as .github/runner-requirements.json and .github/workflows/runner-image-candidate.yml.

Comment on lines +130 to +134
if not arch and kind == "rust" and changed_requirements(pr, ARM64_MANIFEST):
# Only validation capacity has the new ARM64 image before rollout.
# Keep this PR's ordinary job on unchanged AMD64 capacity while its
# separate ARM64 job proves the new manifest on the validation pool.
labels = fallback = ["self-hosted", "Linux", "X64", "rust-ci"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🟡 Suggestion: Wire ARM64 validation into orchestration before relying on a separate job

This branch excludes ordinary ARM64 capacity when its manifest changes, relying on the separate ARM64 validation job described in the comment. However, the only repository caller of tests-rs-workspace.yml is tests.yml, and it supplies neither runner-architecture: ARM64 nor validate-arm64-image: true. No workflow therefore selects the new validation-only pool. The Rust change filters also omit the manifests, while runner-image-candidate.yml watches only the AMD64 manifest. An ARM64-manifest-only PR consequently has hosted contract-test coverage but no ARM64 runtime validation; the contract tests mock ci-image-contract execution. Runtime verification still fails closed, so this is a validation gap rather than a trust-boundary bypass. Add a guarded caller and ARM64-manifest trigger in tests.yml or a dedicated workflow, preserving the existing fork-admission policy, and test that this caller passes both validation inputs.

source: gpt-6-astra (phase2-reviewer: general, architecture-layering)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in 8251ef7. Added the image input filters and a dedicated ARM64 reusable-workflow caller with runner-architecture: ARM64 / validate-arm64-image: true, retaining the existing callee fork guards and application test entrypoints. Routing regressions cover AMD64/ARM64 manifest-only changes, selector/action inputs, the ARM64 caller, and shielded-test invalidation.

Re-ran python3 -m unittest discover -s .github/scripts/tests -v: 38 tests passed on that exact head. The hosted contract check also passed. These are source/contract results, not a claim of ARM64 runtime execution or downstream adoption. Please verify the incremental fix in the ordinary review; I have not marked this thread resolved or counted the old-head review as current coverage.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Resolved (re-reviewed at 8251ef7a): Verified your ARM64 manifest filter and dedicated reusable-workflow caller pass runner-architecture: ARM64 and validate-arm64-image: true, with both existing callee fork guards retained. The routing regressions pass locally; this resolves the orchestration gap without claiming that ARM64 runtime validation has completed.

Comment on lines +44 to +48
run: |
if [ "$(cat /opt/ci/contract-version 2>/dev/null)" != 1 ]; then
echo '::error::This runner needs the versioned dashpay/dash-selfhosted-image (contract 1); see .github/SELF_HOSTED_RUNNER.md.'
exit 1
fi

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🟡 Suggestion: Contract-failure error points to a doc file missing from this branch

The new self-hosted runner guard directs operators to .github/SELF_HOSTED_RUNNER.md, but that file does not exist at this PR head. A runner rejected by the contract guard therefore receives a broken troubleshooting pointer precisely when provisioning guidance is needed. Include the relevant maintained setup documentation or replace the pointer with existing resources such as .github/runner-requirements.json and .github/workflows/runner-image-candidate.yml.

source: muse-spark-1.3-contributor (phase1-reviewer: general)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in 8251ef7. Replaced the absent .github/SELF_HOSTED_RUNNER.md pointer with existing .github/runner-requirements.json and .github/workflows/runner-image-candidate.yml. The regression verifies both references exist on this exact branch.

Re-ran python3 -m unittest discover -s .github/scripts/tests -v: 38 tests passed on that exact head. The hosted contract check also passed. These are source/contract results, not a claim of ARM64 runtime execution or downstream adoption. Please verify the incremental fix in the ordinary review; I have not marked this thread resolved or counted the old-head review as current coverage.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Resolved (re-reviewed at 8251ef7a): Verified your replacement troubleshooting references at the exact head: both .github/runner-requirements.json and .github/workflows/runner-image-candidate.yml exist, and the regression checking those references passes locally.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Re-review — Final validation — Phase 1 + Phase 2

Reviewed the complete diff at 8251ef7 and confirmed both prior findings are fixed. One blocking bootstrap issue remains: the selector requires a candidate published by a trusted workflow that does not yet exist on this PR's target branch. All 38 focused Python tests, shell syntax validation, and diff checks passed locally; these checks do not establish successful execution on provisioned runners.

🔴 1 blocking

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: architecture-layering); reviewer 3: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 4: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); reviewer 5: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 6: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)

  • Triage: normal by gpt-6-astra (effort low) — The cross-cutting CI changes introduce runner-image selection, provenance validation, and Rust/Kotlin workflow routing across 14 files, requiring substantive review but not modifying any qualifying critical surface.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — architecture-layering (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 13% left, 5h 100% left), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-verifier
  • Phase 2 reviewers: gpt-6-astra — general (completed, effort high); agent phase2-reviewer, gpt-6-astra — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6-astra — general (completed, effort high); agent phase2-reviewer, gpt-6-astra — architecture-layering (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `.github/scripts/runner-image.py`:
- [BLOCKING] .github/scripts/runner-image.py:150-161: Bootstrap PR cannot publish the candidate image required by this selector
  This PR adds both the AMD64 requirements manifest and its candidate publisher, but neither exists at the target base commit 49ad468a215fc4935eb43d74e4e8662a52b73f69. Adding the manifest makes the Rust and Kotlin selectors enter this candidate-wait path. However, GitHub loads pull_request_target workflows from the base branch, so the newly added runner-image-candidate.yml cannot publish a candidate for this PR before that workflow is installed on the target branch. The selector also requires the status to reference a successful pull_request_target run of that exact workflow, so an ordinary provisioned image or unrelated publisher cannot satisfy it. Consequently, admitted Rust and Kotlin PR jobs time out after the default two-hour wait without reaching their application tests. Install the trusted publisher separately on the exact target branch before enabling candidate-dependent selection, or provide an explicit first-adoption mechanism that preserves the publisher and image-verification trust checks.

Comment on lines +150 to +161
if changed:
# Use the exact PR requirement, not an accidental merge-tree mix
# after both branches edited this file. Rebase such a PR first.
import base64
remote = api("contents/" + MANIFEST + "?" + urllib.parse.urlencode({"ref": head}))
expected = json.loads(base64.b64decode(remote["content"]))
require(fingerprint(expected) == fingerprint(manifest),
"Merge-tree requirements differ from PR head; rebase before building a candidate")
deadline = time.monotonic() + wait_seconds
context = f"Runner image candidate / PR {pr['number']}"
while True:
candidate = latest_status(head, context)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🔴 Blocking: Bootstrap PR cannot publish the candidate image required by this selector

This PR adds both the AMD64 requirements manifest and its candidate publisher, but neither exists at the target base commit 49ad468. Adding the manifest makes the Rust and Kotlin selectors enter this candidate-wait path. However, GitHub loads pull_request_target workflows from the base branch, so the newly added runner-image-candidate.yml cannot publish a candidate for this PR before that workflow is installed on the target branch. The selector also requires the status to reference a successful pull_request_target run of that exact workflow, so an ordinary provisioned image or unrelated publisher cannot satisfy it. Consequently, admitted Rust and Kotlin PR jobs time out after the default two-hour wait without reaching their application tests. Install the trusted publisher separately on the exact target branch before enabling candidate-dependent selection, or provide an explicit first-adoption mechanism that preserves the publisher and image-verification trust checks.

source: gpt-6-astra (phase2-reviewer: general)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Independent bootstrap verification (2026-09-29): confirmed. The exact target 49ad468a215fc4935eb43d74e4e8662a52b73f69 has neither the publisher caller nor requirements manifest, and this head has no candidate run. I have opened the separate prerequisite #5175 at 7b63fc6ef4964cafd8e40113955c37b4aa276a57: only the vetted 33-line trusted publisher caller, byte-for-byte the caller here. It leaves all candidate-dependent consumers and manifests disabled/absent in that prerequisite. Twelve focused trust/bootstrap checks and YAML/diff checks pass; this is not installed-target or runtime proof.

This finding remains blocking until that prerequisite has cleared normal reviews/owner gates, is actually merged onto this exact target, and the consuming branch is normally synchronized with fresh exact-head publication evidence. No selector bypass, fabricated status, expanded fork admission, review dismissal or thread resolution has been used. Existing fork worker skips remain intentional. I am leaving this reviewed consumer head unchanged while the narrowly scoped prerequisite is reviewed.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I checked 7b63fc6ef4964cafd8e40113955c37b4aa276a57: relative to the target commit, it adds only the 33-line publisher caller, byte-for-byte identical to this PR’s, with no manifests or candidate-dependent consumers. That separation addresses the bootstrap dependency once installed. Merging the prerequisite alone won’t trigger publication for this already-open PR; the planned head synchronization supplies the synchronize event the caller handles. I agree this stays blocking pending installation on the exact target and successful publication evidence for the synchronized head.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Resolved (re-reviewed at ad105ea8): The reviewed base now contains the trusted pull_request_target candidate publisher, pinned to the reviewed controller and explicitly enabled for chore/bump-rust-dashcore-secp-033. The selector can therefore obtain the exact candidate status required by this PR without relying on a workflow introduced only in the consuming change.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Re-review — Final validation — Phase 1 + Phase 2

The exact reviewed range is clean and remains limited to CI runner-image selection, provisioned dependency verification, Kotlin emulator execution, and ARM64 validation routing. The three prior findings are fixed at this head, and the focused contract tests, Python syntax checks, and diff checks pass.

🔴 0 blocking | 🟡 0 suggestion(s) | 💬 0 nitpick(s)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: architecture-layering); reviewer 3: muse-spark-1.3-contributor (agent: phase1-reviewer, role: security-auditor); reviewer 4: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 5: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); reviewer 6: gpt-6-astra (agent: phase2-reviewer, role: security-auditor); reviewer 7: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 8: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); reviewer 9: gpt-6-astra (agent: phase2-reviewer, role: security-auditor); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)

  • Triage: normal by gpt-6-astra (effort low) — The diff introduces substantial cross-workflow CI behavior, runner provenance selection, and provisioned-image validation with supporting tests, but changes none of the critical surfaces required for the critical tier.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — architecture-layering (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — security-auditor (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 13% left, 5h 100% left), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-verifier
  • Phase 2 reviewers: gpt-6-astra — general (completed, effort high); agent phase2-reviewer, gpt-6-astra — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6-astra — security-auditor (completed, effort high); agent phase2-reviewer, gpt-6-astra — general (completed, effort high); agent phase2-reviewer, gpt-6-astra — architecture-layering (completed, effort high); agent phase2-reviewer, gpt-6-astra — security-auditor (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify the current code and confirm that no unresolved issues remain.

No unresolved findings remain from the prior review on this head.

This branch has not been deployed

No deployments
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.

2 participants