Skip to content

docs: suite settings spec, re-root spec (ruled 2026-08-21) and plan - #15

Merged
m4ttheweric merged 4 commits into
mainfrom
goodwinmattheweric/rt-50-keys-wave
Aug 21, 2026
Merged

docs: suite settings spec, re-root spec (ruled 2026-08-21) and plan#15
m4ttheweric merged 4 commits into
mainfrom
goodwinmattheweric/rt-50-keys-wave

Conversation

@m4ttheweric

@m4tthewericm4ttheweric commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Design records for the settings program: the suite settings migration spec, the home-repo re-root spec (Matt's 2026-08-21 ruling, opus-reviewed two rounds), and the re-root implementation plan. Docs only.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added a specification and implementation plan for reorganizing the home repository under a dedicated user directory.
    • Documented new locations for personal, machine-specific, and team settings.
    • Defined machine profile selection based on hostname or an override.
    • Added migration, compatibility, initialization, and verification guidance.

m4tthewericand others added 4 commits August 21, 2026 11:01
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… authority, migration ordering
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…phrasing)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented Aug 21, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 45ff6efe-07a4-4808-b765-d047e2091853

📥 Commits

Reviewing files that changed from the base of the PR and between 4ff8f7c and 88d5279.

📒 Files selected for processing (2)
  • docs/superpowers/plans/2026-08-21-home-repo-reroot.md
  • docs/superpowers/specs/2026-08-21-home-repo-reroot.md

📝 Walkthrough

Walkthrough

The specification and plan define a re-rooted home repository under ~/.mattstack/user, updated settings and sops paths, revised initialization behavior, fixture changes, and an orchestrator-only migration sequence.

Changes

Home repository re-root

Layer / File(s)Summary
Repository layout and path contracts
docs/superpowers/specs/..., docs/superpowers/plans/...
Defines the new user, machine, and team settings paths, machine-key rules, repository boundaries, and collision handling.
Path and sops integration
docs/superpowers/specs/..., docs/superpowers/plans/...
Specifies path-authority updates, team and machine settings handling, and synchronized sops configuration changes.
Home initialization flow
docs/superpowers/plans/...
Replaces root-repository adoption with ordered state creation, user-repository cloning, machine-key provisioning, profile creation, and guarded compatibility links.
Migration and validation
docs/superpowers/specs/..., docs/superpowers/plans/...
Defines fixture and documentation updates and an ordered live migration with backup, repository replacement, cleanup, service restart, and verification.

Estimated code review effort: 1 (Trivial) | ~5 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch goodwinmattheweric/rt-50-keys-wave

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

@m4ttheweric
m4ttheweric merged commit eee34c0 into mainAug 21, 2026
1 of 2 checks passed
m4ttheweric added a commit that referenced this pull request Aug 22, 2026
R-T7-a (#1): tool.daemon's launchd/worktrees sub-facts are real negative
signals now, not folded into a "ready" detail — either failing flips the
row to "invalid" with the specific fact named.
R-T7-b (#4): the legacy split-state branch (required, invalid) carries a
{type:"steps"} merge-by-hand remedy instead of action:null; the detail also
gets verify's plural handling back.
R-T7-c (#6): fixes the bundle-memo hazard at its source. appBundleRoot()
(lib/bundle-layout.ts) now memoizes only the true default
(exists === existsSync); an injected exists (every Probes-driven caller)
never reads or writes it. Validator tests drop the reset ceremony this made
unnecessary.
R-T7-d (#12): tool.rt-link's needs-you branch carries a {type:"run"} action
to fix the link in one step.
#2/#3: tool.fzf and tool.rt now distinguish "genuinely absent" (127) from
"resolved but won't run" (any other exit) — the latter is "error", never
"ready"/"missing".
#5: tool.daemon and tool.app get recheck:"on-activate" (Task 6's convention
for out-of-band, leave-the-app-and-come-back rows).
#7: the five optional rows carry real optionalNotes.
#8: tool.app's legacy note names the exact hit path(s), matching verify's
phrasing.
#9: interceptsRow wraps shimReport()/staleIntercepts() so a throw degrades
to an "error" row instead of rejecting the whole plan.
#10: tool.daemon's Login Items action is imported from permissions.ts
(now exported as LOGIN_ITEMS_SETTINGS_ACTION) instead of a duplicate
literal.
#11: lib/shell-integration.ts gains detectShellFrom()/shellRcPathFor(),
pure functions the real detectShell()/shellRcPath() now delegate to and
tool.shell reuses over Probes; an unrecognized shell gets an honest
"can't write automatically" detail instead of "Install writes it".
#13: the tool.daemon describe saves/restores DAEMON_CONFIG_PATH's
pre-existing content around the whole block instead of only deleting it,
so status-fallback.test.ts's absence assumption can't be poisoned.
#14/#15: header comment no longer cites the brief's table, the rt-link
"no app" test asserts its reason string, and commands/verify.ts's docblock
is trimmed to the one load-bearing line.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@m4ttheweric
m4ttheweric deleted the goodwinmattheweric/rt-50-keys-wave branch August 24, 2026 17:50
m4ttheweric added a commit that referenced this pull request Aug 24, 2026
docs: suite settings spec, re-root spec (ruled 2026-08-21) and plan
m4ttheweric added a commit that referenced this pull request Aug 24, 2026
R-T7-a (#1): tool.daemon's launchd/worktrees sub-facts are real negative
signals now, not folded into a "ready" detail — either failing flips the
row to "invalid" with the specific fact named.
R-T7-b (#4): the legacy split-state branch (required, invalid) carries a
{type:"steps"} merge-by-hand remedy instead of action:null; the detail also
gets verify's plural handling back.
R-T7-c (#6): fixes the bundle-memo hazard at its source. appBundleRoot()
(lib/bundle-layout.ts) now memoizes only the true default
(exists === existsSync); an injected exists (every Probes-driven caller)
never reads or writes it. Validator tests drop the reset ceremony this made
unnecessary.
R-T7-d (#12): tool.rt-link's needs-you branch carries a {type:"run"} action
to fix the link in one step.
#2/#3: tool.fzf and tool.rt now distinguish "genuinely absent" (127) from
"resolved but won't run" (any other exit) — the latter is "error", never
"ready"/"missing".
#5: tool.daemon and tool.app get recheck:"on-activate" (Task 6's convention
for out-of-band, leave-the-app-and-come-back rows).
#7: the five optional rows carry real optionalNotes.
#8: tool.app's legacy note names the exact hit path(s), matching verify's
phrasing.
#9: interceptsRow wraps shimReport()/staleIntercepts() so a throw degrades
to an "error" row instead of rejecting the whole plan.
#10: tool.daemon's Login Items action is imported from permissions.ts
(now exported as LOGIN_ITEMS_SETTINGS_ACTION) instead of a duplicate
literal.
#11: lib/shell-integration.ts gains detectShellFrom()/shellRcPathFor(),
pure functions the real detectShell()/shellRcPath() now delegate to and
tool.shell reuses over Probes; an unrecognized shell gets an honest
"can't write automatically" detail instead of "Install writes it".
#13: the tool.daemon describe saves/restores DAEMON_CONFIG_PATH's
pre-existing content around the whole block instead of only deleting it,
so status-fallback.test.ts's absence assumption can't be poisoned.
#14/#15: header comment no longer cites the brief's table, the rt-link
"no app" test asserts its reason string, and commands/verify.ts's docblock
is trimmed to the one load-bearing line.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto 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.

1 participant

@m4ttheweric