Skip to content

chore: sync pnpm-lock.yaml with opencode-local package.json - #208

Closed
MumuTW wants to merge 1 commit into
paperclipai:masterfrom
MumuTW:fix/update-pnpm-lockfile
Closed

chore: sync pnpm-lock.yaml with opencode-local package.json#208
MumuTW wants to merge 1 commit into
paperclipai:masterfrom
MumuTW:fix/update-pnpm-lockfile

Conversation

@MumuTW

@MumuTW MumuTW commented Mar 7, 2026

Copy link
Copy Markdown
Contributor

CI is currently broken on master — every PR fails at pnpm install --frozen-lockfile:

ERR_PNPM_OUTDATED_LOCKFILE: pnpm-lock.yaml is not up to date with packages/adapters/opencode-local/package.json

specifiers in lockfile: @types/node ^22.12.0
specs in package.json:  @types/node ^24.6.0

This PR runs pnpm install to sync the lockfile. 9 lines changed.

pnpm-lock.yaml was out of date — @types/node specifier was ^22.12.0
in the lockfile but ^24.6.0 in package.json, causing CI to fail with
ERR_PNPM_OUTDATED_LOCKFILE on every PR.

@MrFadiAi MrFadiAi 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.

This PR is necessary to unblock CI for all other PRs. The lockfile is out of sync with opencode-local/package.json (@types/node version mismatch). Merging this should be prioritized despite the CI failure (which is caused by the very issue this PR fixes).

@aaaaron

aaaaron commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator

This is resolved by CI now,

  1. pr-policy.yml — Blocks any PR that includes pnpm-lock.yaml in its changeset (unless the branch is
    chore/refresh-lockfile). Fails with "Do not commit pnpm-lock.yaml in pull requests. CI owns lockfile updates."
  2. refresh-lockfile.yml — Runs on every push to master (and manual dispatch). Regenerates the lockfile via pnpm install
    --lockfile-only, then auto-creates/updates a PR from the chore/refresh-lockfile branch if anything changed.

@aaaaron aaaaron closed this Mar 17, 2026
Chadonillo added a commit to MareAnalytica/paperclip that referenced this pull request Jun 3, 2026
…ion core (1/2) (#129)

* feat(ELI-952): Contract C cross-run unresponsive-hang breaker decision core

Pure decision core for the cross-run repeated-hang circuit breaker (Contract C
of the ELI-947 silence-watchdog remediation tree). Contract A (ELI-950) types a
hung invocation as `adapter_no_output_timeout`; Contract B (ELI-951) advances the
fallback chain when that hang lands on a non-primary hop. Neither bounds the hang
*across runs*, so a fresh run re-picking the same (agent, provider) pair hangs
again — the detect -> re-queue -> hang loop.

`decideUnresponsiveRecovery` takes the consecutive cross-run hang count for an
(issue, provider) pair plus whether a healthy alternative exists and returns
failover / bounded retry-same / escalate, enforcing the spec §5 invariants:
healthy alternative always wins; retry-same only within
`maxUnresponsiveRetriesPerProvider`; the N+1th identical hang escalates (opens a
typed operator recovery action) and NEVER re-routes to the hung pair.
`buildProviderHealthAuditEvent` emits the blueprint §4 audit shape (no credential
material). Re-derived from the eli-board `eli-board.provider-health.v1` blueprint
(ELI-961, PR paperclipai#208), not imported — the runtime owns its enforcement copy.

No wiring into the recovery service yet (next increment): the count is sourced
from `issue_recovery_actions.attemptCount` (whose active-fingerprint unique index
keeps it from resetting on re-pickup) and the skip side reuses the ELI-855
cooldown store. 10 unit tests cover all invariants incl. the N+1th-hang acceptance.

Co-Authored-By: Paperclip <noreply@paperclip.ing>

* feat(ELI-952): Contract C provider-health policy surface + cross-run unresponsive cooldown demerit

Wire the cross-run repeated-hang circuit breaker into the runtime
(ELI-947 Contract C / spec eli-board.provider-health.v1 §3.2/§3.4/§3.5):

- provider-fallback-policy: parse + validate the optional
  `providerFallback.providerHealth` block (invocation timeouts, cooldownMs,
  recovery.maxUnresponsiveRetriesPerProvider) with the spec's disabled default
  (omitted block => pre-ELI-961 behavior) and opt-in partial defaults; add
  `resolveProviderHealthPolicy` / `resolveInvocationTimeoutMs`.
- provider-unresponsive-breaker: add `resolveProviderUnresponsiveRecovery`
  composer — derive the healthy alternative from the live fallback chain +
  ELI-855/856 cooldown set, decide failover/retry_same/escalate, and build the
  §4 audit event in one pure call.
- heartbeat: on a no-output adapter hang (provider_unresponsive) on ANY adapter
  — including the primary, which the Contract-B hop path never reaches —
  record a typed `provider_unresponsive` cooldown demerit (window =
  providerHealth.cooldownMs) so the existing root-run skip
  (pickRootRunProviderSelection) starts the next run on a healthy provider
  instead of re-selecting the hung one. Emit the breaker decision + §4 audit
  event onto the run trail. Fully config-gated (cooldownMs=0 => no-op).
- provider-account-cooldown: add the `provider_unresponsive` cooldown source.

Tests: composer failover/escalate/retry invariants incl. the N+1th-hang
acceptance; providerHealth parse/validate/resolve incl. disabled default,
partial opt-in defaults, per-provider timeout overrides, range + slug
validation. Precise N-bound escalate (open a typed operator recovery action via
the cross-run issue_recovery_actions.attemptCount) is the recovery-service
follow-up per spec §7#1.

Co-Authored-By: Paperclip <noreply@paperclip.ing>

---------

Co-authored-by: Paperclip Platform Engineer <noreply@paperclip.ing>
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.

3 participants