Skip to content

chore(release): cut miner v3.1.2 - #7107

Closed
JSONbored wants to merge 2 commits into
mainfrom
release-please--branches--main--components--miner
Closed

chore(release): cut miner v3.1.2#7107
JSONbored wants to merge 2 commits into
mainfrom
release-please--branches--main--components--miner

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

🤖 I have created a release beep boop

3.1.2 (2026-07-17)

Fixes

  • miner: bound oauth-device-flow.js's GitHub fetches with a request timeout (cd9aedf)
  • miner: bound oauth-device-flow.js's GitHub fetches with a request timeout (77ca20f)
  • miner: fail closed when a chat-action handler throws (8ba48bd)
  • miner: fail closed when a chat-action handler throws (bdb11d9), closes #6989
  • release: scope MCP publish validation to its own package (86ee117)

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • @loopover/engine bumped from ^3.0.0 to ^3.2.1

This PR was generated with Release Please. See documentation.

@JSONbored
JSONbored force-pushed the release-please--branches--main--components--miner branch from 2a64265 to fce5aa6 Compare July 17, 2026 21:34
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 17, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
loopover-ui 53c23c7 Jul 17 2026, 09:35 PM

@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@JSONbored JSONbored self-assigned this Jul 17, 2026
@codecov

codecov Bot commented Jul 17, 2026

Copy link
Copy Markdown

⚠️ JUnit XML file not found

The CLI was unable to find any JUnit XML files to upload.
For more help, visit our troubleshooting guide.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 17, 2026
@loopover-orb

loopover-orb Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Caution

🛑 LoopOver review result - fixes required

Review updated: 2026-07-17 21:50:41 UTC

4 files · 1 AI reviewer · 1 blocker · CI failing · blocked

🛑 Suggested Action - Manual Review

Review summary
This is an automated release-please version bump PR for @​loopover/miner from 3.1.2, bundling package.json version bumps, manifest updates, CHANGELOG entries, and a lockfile diff — all mechanically generated and consistent with the referenced upstream fix commits. The diff is internally coherent: version strings, manifest, changelog, and lockfile all agree on 3.1.2 and the @​loopover/engine ^3.2.1 bump.

Nits — 4 non-blocking
  • The listed CI failures (validate-tests, validate-code, Build UI preview artifact, etc.) are not attributable to anything in this diff, which touches only version metadata and lockfile — worth confirming these are pre-existing/unrelated failures before merging.
  • package-lock.json shows only a single-line diff excerpt, but per the external brief it's a ~20k-line file; standard for lockfile churn on a dependency bump, not a concern specific to this PR.
  • Verify the CI failures are unrelated to this release PR (e.g., pre-existing on the base branch) since a pure version-bump PR shouldn't affect validate-tests/validate-code/UI build outcomes.
  • Confirm the @​loopover/engine 3.2.1 changes referenced by the bumped dependency don't introduce breaking changes consumed by the miner package beyond what's covered by the linked fix commits.

Why this is blocked

  • No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.
📋 Copy for AI agents — paste into your coding agent
Fix the following blocker(s) from this PR review:

1. No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.

CI checks failing

  • validate
  • validate-tests (5)
  • validate-tests (2)
  • validate-tests (6)
  • validate-tests (3)
  • validate-tests (1)
  • validate-tests (4)
  • validate-code
  • Workers Builds: loopover-ui — Workers Builds: loopover-ui
  • Build UI preview artifact

Decision drivers

  • ❌ Code review — 1 blocker (1 reviewer)
  • ❌ Gate result — Blocking (Repo-configured hard blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ No-issue rationale PR body explains why no issue is linked.
Related work ⚠️ 3 scoped overlaps Top overlaps are listed below; lower-confidence bulk is hidden.
Change scope ❌ 8/20 High review scope from cached public metadata (no linked issue context).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 32 registered-repo PR(s), 25 merged, 368 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 32 PR(s), 368 issue(s).
Improvement ℹ️ Insufficient signal risk: clean · value: insufficient-signal · LLM: minor
Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, Ruby, Go, JavaScript, MDX, Shell, Solidity
  • Official Gittensor activity: 32 PR(s), 368 issue(s).
  • Related work: Titles/paths share 5 meaningful terms. (PR #7109)
  • Related work: Titles/paths share 7 meaningful terms. (PR #7108)
  • Related work: Titles/paths share 5 meaningful terms. (PR #7109, PR #7108)
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Then work through the remaining 4 steps in the Signals table above.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @loopover ask <question> answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat <question> answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 17, 2026
@JSONbored

Copy link
Copy Markdown
Owner Author

Superseded -- #7114 fixed release-please-config.json so engine's release and its dependents (mcp, miner) now land as one combined PR/commit, structurally eliminating the ordering race that made this PR's own branch stale. Closing to let release-please regenerate correctly under the new config.

@JSONbored JSONbored closed this Jul 17, 2026
luciferlive112116 pushed a commit to luciferlive112116/gittensory that referenced this pull request Jul 17, 2026
The actual root cause of the mcp/miner v3.1.x release churn: engine's
release and its dependents' (mcp, miner both carry a real runtime
`dependencies` entry on it) release each landed as SEPARATE PRs/commits.
release-please's node-workspace plugin still bumped a dependent's
`@loopover/engine` version range the moment engine's version changed, but
on the dependent's OWN branch -- so the dependent's package.json ended up
requiring an engine version that existed nowhere (not locally, since
engine's bump lived on a different unmerged branch; not on npm, since it
hadn't published yet). `npm ci` failed with ETARGET until a human manually
walked engine through to publish first, then updated the dependent's
branch -- confirmed live across JSONbored#7086/JSONbored#7087/JSONbored#7107/JSONbored#7108.

merge: true is the plugin's own purpose-built mechanism for exactly this:
it combines a package with the dependents its OWN dependency-bump logic
pulled in as candidates into ONE PR/commit, so engine's new version and
its dependents' bumped ranges land together atomically. npm workspaces
then resolves the dependency from the LOCAL checkout, which always
satisfies the range regardless of npm registry publish timing or ordering
-- eliminating the failure mode structurally rather than papering over it
with an after-the-fact branch-update step. ui-kit has no dependency edge
to any other package here, so it's never pulled into the merge and keeps
its fully independent release cadence.
JSONbored added a commit that referenced this pull request Jul 29, 2026
…t's independent cadence

Review catch on #9753: contract was left out of the "engine-and-dependents"
linked-versions group on the reasoning that it should version independently
"like ui-kit". That reasoning was wrong, and this repo has already paid for the
bug it reintroduces.

mcp-release-please.yml's own header is explicit about what the group is for:
mcp/miner carry a REAL runtime `dependencies` entry, so node-workspace bumps
their range the moment the prerequisite's version changes -- and under
separate-pull-requests: true that bump lands on the dependent's OWN branch,
leaving its package.json requiring a version that exists nowhere (not locally,
since the prerequisite's bump is on a different unmerged branch; not on npm,
since it hasn't published). `npm ci` then fails ETARGET. That was confirmed
live across several release cycles (#7086/#7087/#7107/#7108/#7119/#7120/#7121),
and node-workspace's own `merge` option was already tried and does NOT override
separate-pull-requests.

ui-kit is outside the group because it has NO dependency edge to anything here
-- not because independent versioning is the default. contract has exactly the
edge engine has, so it belongs in the group for exactly the same reason.
Membership tracks the dependency edge, not release cadence; the header now says
so, since "publish it like ui-kit" is the trap that produced this.

The reconciliation ordering added in this PR stays: the group fixes the
release-PR stage (ranges and versions land in one commit), reconciliation fixes
the publish stage (registry propagation and dispatch ordering). Engine needs
both today and contract needs both for the same reasons.

Cost of the fix, stated plainly: contract joins the group's version train
rather than staying at 0.1.0, so its next release will not be 0.2.0. That is a
worse version story than independence and a better correctness story, and
0.1.0 is already published either way.
JSONbored added a commit that referenced this pull request Jul 29, 2026
…omation (#9753)

* ci(release): wire @loopover/contract into the release and publish automation

@loopover/contract is a runtime `dependencies` entry of both @loopover/mcp and
@loopover/miner, but it had no publish path — no publish workflow, and no entry
in release-please's config or manifest. It was the only workspace package shaped
for publishing (no `private: true`, `publishConfig.access: public`, a `files`
allowlist) with no automation behind it.

Left alone, the next mcp/miner release ships uninstallable: both are at 3.15.2
locally against 3.14.x on npm, so the pending publish already carries
`"@loopover/contract": "^0.1.0"` against a package that did not exist.
0.1.0 has now been bootstrap-published by hand (npm's OIDC trusted publishing
cannot create a brand-new package, the same bootstrap @loopover/engine needed),
and a Trusted Publisher is configured against publish-contract.yml — so renaming
that file breaks the connection and every publish with it.

publish-contract.yml mirrors publish-engine.yml/publish-ui-kit.yml: unprivileged
validate resolves the version, verifies the commit is on main, resolves the
release commit from the version string rather than tagging HEAD (#8525), builds,
packs, and smoke-tests; privileged publish tags and pushes the exact tested
tarball via OIDC behind environment `release`. No separate typecheck step —
this package's `build` IS `tsc -p tsconfig.json`.

The secret scan needed one deliberate change. Unlike its siblings, this package
SHIPS the redaction logic: dist/telemetry.js defines SECRET_VALUE_PATTERN, whose
source text contains a literal PEM `PRIVATE KEY` header (plus a doc comment
quoting a full one, describing the bug that alternative fixes). The siblings'
verbatim pattern is a guaranteed false positive on every release — verified
against the 0.1.0 tarball. Excluding that one module keeps the check meaningful
for the other 92 files, and a second, narrower scan still runs across everything
including the excluded module, so a real token-shaped leak there still fails.

mcp/miner depend on contract exactly as they depend on engine, so the
reconciliation job now treats both as prerequisites: contract and engine publish
first, and mcp/miner are skipped entirely if either fails, rather than resolving
a dependency version that exists nowhere and failing ETARGET.

Contract stays independently versioned (like ui-kit) rather than joining the
engine-and-dependents linked-versions group: it has only just shipped 0.1.0, and
renumbering it into the 3.x train before it has any consumers costs more than it
buys. Revisit at its next major.

Also adds the LICENSE file the package declares (AGPL-3.0-only) but never
shipped — engine, mcp and ui-kit all carry one.

Closes #9749

* fix(release): put contract in the linked-versions group, not on ui-kit's independent cadence

Review catch on #9753: contract was left out of the "engine-and-dependents"
linked-versions group on the reasoning that it should version independently
"like ui-kit". That reasoning was wrong, and this repo has already paid for the
bug it reintroduces.

mcp-release-please.yml's own header is explicit about what the group is for:
mcp/miner carry a REAL runtime `dependencies` entry, so node-workspace bumps
their range the moment the prerequisite's version changes -- and under
separate-pull-requests: true that bump lands on the dependent's OWN branch,
leaving its package.json requiring a version that exists nowhere (not locally,
since the prerequisite's bump is on a different unmerged branch; not on npm,
since it hasn't published). `npm ci` then fails ETARGET. That was confirmed
live across several release cycles (#7086/#7087/#7107/#7108/#7119/#7120/#7121),
and node-workspace's own `merge` option was already tried and does NOT override
separate-pull-requests.

ui-kit is outside the group because it has NO dependency edge to anything here
-- not because independent versioning is the default. contract has exactly the
edge engine has, so it belongs in the group for exactly the same reason.
Membership tracks the dependency edge, not release cadence; the header now says
so, since "publish it like ui-kit" is the trap that produced this.

The reconciliation ordering added in this PR stays: the group fixes the
release-PR stage (ranges and versions land in one commit), reconciliation fixes
the publish stage (registry propagation and dispatch ordering). Engine needs
both today and contract needs both for the same reasons.

Cost of the fix, stated plainly: contract joins the group's version train
rather than staying at 0.1.0, so its next release will not be 0.2.0. That is a
worse version story than independence and a better correctness story, and
0.1.0 is already published either way.

* ci(release): derive linked-versions membership from the real dependency graph

Adding contract to the group fixed today's instance. It did not fix the class:
group membership is a function of the dependency graph, nothing enforced that,
and the last time an edge was added the config was not updated. #9521 made
@loopover/contract a runtime dependency of both @loopover/mcp and
@loopover/miner without touching linked-versions, and that sat unnoticed until
#9749 -- by which point the package was not even published, so the next
mcp/miner release would have shipped uninstallable.

check-release-linked-versions.ts derives the requirement instead of trusting
memory. It reads the real package.json edges between release-please-tracked
packages and fails when two are joined by a shipping dependency but not by a
linked-versions group -- the exact ETARGET race mcp-release-please.yml's header
documents, and which node-workspace's own `merge` option provably does not fix.

It also closes a second silent gap found while wiring this: sync-release-manifest
builds its work list from the MANIFEST's own keys (`if (!(workspacePath in
manifest)) continue`), so a package added to release-please-config.json but not
to the manifest is silently exempt from the staleness check that stops
release-please re-proposing an already-published version. Adding a package to one
file and not the other had no feedback at all; now it fails.

Deliberately scoped to dependencies/peerDependencies/optionalDependencies.
devDependencies are excluded because they never reach a consumer, and forcing two
packages into permanent version lockstep over a build-time-only edge costs more
than the failure it prevents -- which surfaces immediately in CI on the branch
that introduced it rather than in a published artifact. That tradeoff is written
down at the constant, so the next person hitting it can revisit deliberately.

ui-kit is the case that proves the check is not merely "group everything": it has
no dependency edge, stays ungrouped, and there is an invariant test asserting it
is never reported -- otherwise the check would drag unrelated packages into
lockstep, which is the opposite of the goal.

Verified both ways: removing contract from the group reproduces the #9521 gap and
exits 1 naming both offending edges; removing its manifest entry exits 1 naming
the consequence; the real config exits 0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autorelease: pending gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chat-action-dispatch.js doesn't catch handler exceptions (unlike its own paramsValidator call)

1 participant