Skip to content

fix(access): verify and name policy-sharing neighbours before removal - #55

Merged
Slokh merged 4 commits into
mainfrom
access-shared-policy-siblings-followup
Nov 11, 2026
Merged

Slokh merged 4 commits into
mainfrom
access-shared-policy-siblings-followup

Conversation

@Slokh

@Slokh Slokh commented Nov 11, 2026

Copy link
Copy Markdown
Collaborator

Follow-up to #54, tightening how pnpm earn access remove finds and checks stacks that share a TIP-403 policy.

  • Neighbours are decided from their verified profile/record pair (loadEarnProfileBundle), not the authored profile alone, so a neighbour whose profile no longer matches its record stops the removal instead of being skipped. Neighbours on another genesis of the same chain ID are ignored.
  • A neighbour with only deployment.pending.json on the same chain and policy stops the removal: its contracts may already be bound to the policy.
  • Symlinked neighbour directories are followed, since existsSync replaces Dirent.isDirectory.
  • Every neighbour failure, including an unparseable profile.json, names the profile and includes the underlying reason in the message, not only in cause.
  • A refusal caused by a sibling names that stack, its EarnVault and the policy.
  • A neighbour's own .env.<id> now wins over the shell. TEMPO_RPC_URL/USERNAME/PASSWORD come from it as a group when it sets any, so a shell endpoint is never paired with a neighbour's credentials.
  • The docs name the remaining limit: stacks without a record beside a profile (kept elsewhere, or an earlier version superseded by a redeployment) are not discovered.

Tests: new cli.test.ts covers unpublished, unparseable and symlinked neighbours, plus a membership case for naming the blocking stack. pnpm check, pnpm check:types and pnpm --filter @tempoxyz/contracts test --run (755 passed) pass locally.

@tempoxyz-bot

tempoxyz-bot commented Nov 11, 2026 •

Copy link
Copy Markdown

✅ Cyclops Security Review: safe to merge

✅ Reviewed 486c977 (latest) · Coverage: full · no open findings · report

# Severity Finding Introduced Status
1 🟢 Low Malformed sibling targets bypass removal safety checks 3a2eca5 ✅ Fixed in 9708368
2 ⚪ Informational Credential-only sibling configuration sends private RPC credentials to the public fallback 9708368 ✅ Fixed in 486c977

@claude claude Bot 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.

Findings marked 🟡 are optional suggestions and need no follow-up push.

@claude claude Bot 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.

No new blocking issues. 1 optional suggestion (a nit or a note on pre-existing code) was found and not posted.

@claude claude Bot 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.

Code review found no issues

No high-confidence issues detected in this change.

@claude claude Bot 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.

Code review found no issues

No high-confidence issues detected in this change.

@Slokh
Slokh merged commit b799fed into main Nov 11, 2026
32 checks passed
@Slokh
Slokh deleted the access-shared-policy-siblings-followup branch November 11, 2026 04:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants