Skip to content

Fold develop-v1.19.0 back into develop for 1.19.0 - #664

Merged
pithead-reviewer[bot] merged 13 commits into
developfrom
fold/develop-v1.19.0-into-develop
Nov 8, 2026
Merged

pithead-reviewer[bot] merged 13 commits into
developfrom
fold/develop-v1.19.0-into-develop

Conversation

@pithead-developer

@pithead-developer pithead-developer Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

What's the problem

develop-v1.19.0 was created on 2026-11-07 to keep feature work off develop while 1.18.1 was overdue. 1.18.1 is now published, so that reason is gone. On 2026-11-08 the owner ruled that RigForge moves on to 1.19.0 with no 1.18.2, and that the integration branch folds back into develop.

The branch holds seven merged feature PRs that are not on develop:

It is also 9 commits behind develop, which carries the v1.18.1 release and #661.

How I fixed it

  1. fold/develop-v1.19.0-into-develop starts at develop-v1.19.0 (eb50ae22) and merges develop (d41b6d3a).
  2. Five files conflicted. Each had one hunk, resolved like this:
    • Makefile, tests/run.sh: kept both sides' new test entries.
    • tests/e2e-pithead.sh: kept both sides' new test sources.
    • rigforge.sh: the conflict is comments only. Both sides deleted overlapping comment lines, and both deletions are kept, with no code change.
    • tests/coverage.sh: kept Verify cached jq before use and preserve fresh coverage proofs #643's early rm -rf "$OUT". The branch still had the old wipe after the source proofs are written, which would delete source-files.sha256. The merged file equals develop's plus the branch's intended changes: util/config-apply-state.sh in the coverage include pattern and the header wording.
  3. This PR squash-merges into develop as one commit.
  4. After the merge:

Here is the proof

🤖 Generated with Claude Code

pithead-developer Bot and others added 8 commits November 7, 2026 10:14
* Expose appliance mode and baked ref in the sister feed

Part of #452. Implemented by an operator-run GPT session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Drop added test comment

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Automate docs replay, API allowlist, and uninstall checks

Part of #586. Implemented by an operator-run GPT session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: register the allowlist kernel test in CI and drop the replay wrapper (#586)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Add an opt-in shared-host resource profile

Part of #577. Implemented by an operator-run gpt-6-astra session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: remove added source comments

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* test: allow the nft teardown call in the shared-host uninstall stub

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* test: run the shared-host suites under coverage and cover dedicated uninstall and lockdown doctor paths

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* test: report shared-host suite output when it fails under run.sh

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* test: give the shared-host lifecycle suite the envsubst stub and stay inside the run.sh budget

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* test: pass the stub directory only to the lifecycle suite and keep the donation exit status

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix: size and isolate the shared-host build within the memory ceiling

Compute build parallelism from memory_max_mb in shared mode and stop a running
miner before compiling, so the compiler and the miner never compete for the
same cgroup memory ceiling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: add an opt-in shared-host tier4-e2e phase on a real rig

Switches the rig to shared_host, verifies the effective slice limits, the
miner's cgroup, the generated XMRig settings, status and an accepted share,
then restores the dedicated configuration and compares unrelated host
settings before, during and after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: let a capability-less shared-host miner write its log, harden the shared-host e2e phase

The shared unit keeps no capabilities, so a root miner could not write the
operator-owned xmrig.log after re-own (bench job 3494 saw no stratum job in
the log). Re-own now gives the generated config and log to the miner account
in shared mode. The e2e phase removes its marker as soon as the profile is
applied, prints unit and log diagnostics on failure, survives a missing
dataset line and checks the slice by load state and miner cgroup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: stop the owned shared-host slice when the profile is disabled

Removing the slice's unit file left the started slice active (bench job 3495).
Removal now waits until the miner has left the slice, then stops the slice,
deletes the owned fragment and reloads systemd; apply, upgrade and setup run
it again after their restart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: clear an empty leftover shared-host slice before the e2e phase applies the profile

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: judge shared-host slice removal by fragment and active state

systemd synthesizes any slice name on demand, so LoadState stays loaded after
the owned fragment is gone (bench job 3502).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep the shared-host config operator-readable and never stop a busy slice

Without miner_user the generated config is now root-owned with the operator's
group and mode 0640, so non-root doctor and support-bundle still read it.
Slice removal now defers while any process (miner or helper) is in the slice,
when the cgroup cannot be read, or when the stop fails, and only then deletes
the owned fragment. The e2e pre-step requires an existing, empty, non-transient,
unreferenced slice, the final check requires an inactive slice, and failure
diagnostics no longer print the miner journal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Qualify historical RigForge benchmark claims

Part of #580. Implemented by an operator-run gpt-6-astra session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: drop pre-GA coordination and restore the THP stock-gap caveat

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: source the benchmark provenance and qualify the THP caveat

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: match the README benchmark row to the index wording

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: re-head after removing closing keywords from the PR body (#580 stays open)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Support solo daemon pools and report node health

Part of #528. Implemented by an operator-run GPT session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Remove explanatory comments from rigforge.sh

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Cover daemon node warnings in apply and stopped-miner doctor

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Keep daemon pool tests under the file budget

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Render the daemon proof config to a regular file

The atomic config install reads config.json back, which blocks on a FIFO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Warn when source configuration changes after generation

Part of #445. Implemented by an operator-run gpt-6-astra session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Remove added source comments

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Skip the apply stamp for staged generation

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
* Add JSON doctor reports with stable check IDs

Part of #440. Implemented by an operator-run gpt-6-astra session at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: ignore synthetic empty-token fixture in gitleaks history

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Move doctor check helpers into util/doctor-report.sh to fit the file budget

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Drop the explanatory comment on the doctor dispatch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Give daemon-pool doctor rows the pool-connection ID

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Cover the stopped-service daemon doctor row

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: pithead-developer[bot] <328836012+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: pithead-developer[bot] <4933481+pithead-developer[bot]@users.noreply.github.com>
Co-authored-by: Vijit Singh <vijit.n.singh@gmail.com>
Conflicts resolved in Makefile, tests/run.sh and tests/e2e-pithead.sh (both sides' entries kept), rigforge.sh (comment-only, both deletions kept) and tests/coverage.sh (develop's early output wipe kept so the source proofs survive).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pithead-developer pithead-developer Bot added this to the v1.19.0 milestone Nov 8, 2026
@pithead-developer pithead-developer Bot added the stage/needs-review green or pending CI, no reviewer verdict on the head yet label Nov 8, 2026
pithead-developer Bot and others added 3 commits November 8, 2026 11:47
The fold adds #606's five doctor-JSON rows to connect and #617's allowlist row to network, so the harness now retains connect 8, network 10 and 9 for each replay group (which nests connect). tests/worker-proof.py and docs/dev/worker-proof.md still carried the develop-side totals (3, 9, 4, 4), so every valid receipt for those groups was rejected and test-worker-proof.py failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fixture's stub connect and network phases still emitted the develop-side totals (3 and 9), so its receipts no longer matched tests/worker-proof.py after the fold. The replay stub nests connect and now totals 9 without its own change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After the fold, phase_network calls #617's phase_api_allowlist. The settle subshell from #654 never stubbed it, so it ran an undefined command and printed a FAIL row while the test still passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pithead-developer Bot and others added 2 commits November 8, 2026 12:28
…n its budget

#606's doctor JSON requires every check to carry a stable ID, but #609's generated-configuration rows had none, so the daemon-pool doctor-JSON cases failed. The 1.19.0 tip fails the same four cases; pushes to develop-v1.19.0 never ran CI. The rows now report config-apply.

The fold took tests/e2e-pithead.sh to 569 lines against its 563 ceiling, which may not rise. The allowlist helper is sourced in the existing control/tokens chain (same order) and its result row is a one-line if, with identical behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#643's test pinned the kcov include pattern to rigforge.sh and util/proposed-grub.sh. The fold keeps 1.19.0's addition of util/config-apply-state.sh to tests/coverage.sh, so the fake kcov refused the run as out of scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pithead-developer pithead-developer Bot added stage/needs-review green or pending CI, no reviewer verdict on the head yet and removed stage/needs-work returned by the reviewer, red CI, or conflicts with the base labels Nov 8, 2026
@pithead-reviewer

Copy link
Copy Markdown
Contributor

Adversarial review of the fold at 1539c4f5 (2026-11-08)

Scope: the conflict resolutions, plus every place where a 1.19.0 feature (#637, #617, #611, #639, #645, #609, #606) meets code that v1.18.1 rewrote after that feature was reviewed. Four reviewers each took one lens: render pipeline, lifecycle, feed and security, tests and CI. Each serious finding was re-checked by an independent skeptic, and six further notes were verified separately.

Merge interactions found and fixed on this branch. Neither side was wrong on its own.

Checked and clean:

Real, but already on the 1.19.0 side, so filed rather than fixed here: #665 (watchdog guard ahead of the thermal stop), #666 (shared-host render temp file left on disk) and #667 (e2e proof gaps). Three notes were refuted: the daemon feed connection shape is deliberate and pinned by a test, the daemon wallet in the feed is a public address already served, and the shared-host rebuild downtime is documented.

Local proof at this head:

  • test-doctor-json.sh: 51 passed, 0 failed.
  • test-worker-proof.py: 24 OK; test-worker-proof.sh: 21 passed.
  • test-config-apply-state.sh, test-coverage-cache.sh, and every test-suite command after the doctor test, which CI never reached on the earlier head.
  • The file-budget gate against develop.
  • shellcheck on all shell files. Local shfmt 3.13.1 differs from CI's 3.14.1 only on lines this PR does not touch; pure develop shows the same differences.

CI at this head: all 10 checks green (test suite, shellcheck + shfmt, coverage, both stock-home setups, Docker end-to-end, markdownlint, yamllint, zizmor, gitleaks).

🤖 Generated with Claude Code

@pithead-developer pithead-developer Bot added stage/awaiting-merge the reviewer's PASS is on the head; merging when checks and the base allow and removed stage/needs-review green or pending CI, no reviewer verdict on the head yet labels Nov 8, 2026
@pithead-reviewer
pithead-reviewer Bot merged commit 5bf1bd8 into develop Nov 8, 2026
11 checks passed
@pithead-reviewer
pithead-reviewer Bot deleted the fold/develop-v1.19.0-into-develop branch November 8, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stage/awaiting-merge the reviewer's PASS is on the head; merging when checks and the base allow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant