This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

Lifeboats Carry RepoPrompt Workspace Definitions Forward

intentplannedminorstandaloneitd-7

Follows itd-6 (ruled 2026-09-21 by the product thinker): the RepoPrompt route is one opt-in reviewer adapter, which shipped with itd-6 on 2026-10-12, though itd-6 counts as finished only after the live RepoPrompt run iss-2610252224353794 still owes; this record is planned as written and its spec follows that adapter. It is not in the autonomous run.

Two more prerequisites do not exist yet (recorded 2026-09-29, iss-2609240227447110). The pull hangs on abcd dev-sync, which has no verb and no code: the command tree carries none, and the only record of it is the draft itd-13 (scheduled dev-sync). The lifeboat route is missing too: embark writes only the four record families in embarkFamilies (internal/core/lifeboat/embark_types.go: ADRs, issues, intents and specs) and reports every other file as one it does not write, so .abcd/rp/workspace.json has no path from a lifeboat into a target repository, as acceptance criteria 6 and 7 (the two embark criteria) require. Specifying this record needs both, beside itd-6.

Press Release

When the RepoPrompt adapter is configured, abcd packs the RP workspace definition into the lifeboat. When dev-sync runs (and as part of /abcd:disembark), abcd reads the project's RepoPrompt workspace definition from ~/Library/Application Support/RepoPrompt/Workspaces/ and writes it into .abcd/rp/workspace.json in the repo. On /abcd:embark, the workspace is read back and offered for registration with RepoPrompt on the new machine. For personas who drive RepoPrompt, migrating to a fresh user account no longer means rebuilding workspace boundaries by hand for every active project.

"I switched user accounts and dreaded rebuilding RP workspaces for a dozen active projects from memory," said Frank, DevOps engineer. "abcd's workspace pull meant each project's .abcd/rp/workspace.json came along with the lifeboat. Embark on the new account asked whether to register each one. Thirty seconds per project instead of half an hour."

Why This Matters

The RepoPrompt adapter already pulls review content from RP's Application Support. That's the lifeboat-valuable output of RP. The parallel state that's also project-shaped and lifeboat-valuable is the workspace definition — which files RP considers part of the project's context, the partition strategy, the project boundaries. Workspace definitions are fiddly to recreate from memory; they encode real curation work.

All of this is scoped to the RepoPrompt adapter: it runs only when that adapter is configured, and every surface degrades gracefully when RP is absent. RP is one optional adapter, never a hard dependency — abcd assumes nothing about it being present.

This intent ships workspace pull only. Presets and routing are global RP state with cross-project complications; they need a richer scoping design before shipping. --preset and abcd rp link are convenience layers that need workspace pull as a foundation and are out of scope here.

See research/legacy-harvest.md for the broader v0 cleanup context.

What's In Scope

  • A RepoPrompt workspace-state adapter — new adapter in the native adapter layer. Reads the workspace whose root path matches the current repo from ~/Library/Application Support/RepoPrompt/Workspaces/. Workspace identity match: walk all workspaces, parse each workspace.json's root-path field, match against git rev-parse --show-toplevel. Multi-match: prefer the most-recently-modified.
  • Pull on dev-sync: writes .abcd/rp/workspace.json with ~/-relative path normalisation (per privacy rules). Visibility-driven gitignore handling: private repos commit; public repos exclude.
  • Pack on /abcd:disembark: dev-sync runs as a pre-pack step (already in brief). Workspace state goes into the lifeboat naturally.
  • Unpack + reconnect on /abcd:embark:
    • workspace.json is read; user is asked "register this workspace with RepoPrompt now?" — if yes, abcd writes a workspace entry under ~/Library/Application Support/RepoPrompt/Workspaces/ on the embarking machine.
    • If RP isn't installed: warn gracefully ("RepoPrompt not detected; .abcd/rp/workspace.json preserved for later sync") and continue without failing.
  • Schema validation for workspace.json. The JSON Schema ships with the RP adapter in the Go binary (internal/core/...); abcd dev-sync validates against it.
  • PII scrub on read: workspace files may include absolute paths (/Users/<username>/...). Pre-commit scrub rewrites to ~/-relative form. Same approach as session-log schema.

What's Out of Scope

  • Preset pull — Presets/ directory. Presets are global in RP; copying all into every repo's .abcd/rp/presets/ risks cross-project leakage. Explicit scoping (tag-based, or per-project preset list) is needed before this is shipped.
  • MCP routing scoping — mcp-routing.json carries 44 KB of entries across many contexts. This intent does not try to extract project-scoped subsets; that depends on a settled scoping rule.
  • --preset <name> selection — runtime preset selection at task time. Depends on preset pull; out of scope with it.
  • abcd rp link window helper — workspace-window linking via RP MCP. Workspace pull covers the migration use case; window-linking is a convenience layer for a follow-up intent.
  • Active workspace monitoring — watching for changes in RP's Application Support and auto-syncing to .abcd/rp/. Dev-sync-triggered only.
  • Auto-attach RP window to current repo session — beyond abcd rp link reporting the window ID, automatic window selection / activation.
  • Per-command preset binding — declaring in .abcd/config.json "this preset for review-collator runs, that preset for press-release-composer runs."
  • Backend switching mid-session — switching the backend RP routes to (Claude Code vs local model vs Codex) without leaving the abcd command.
  • Cross-tool portability — pulling equivalent state from another harness's workspace tooling. Couples to itd-22-harness-portability.
  • CodeMapCaches / Partitions / windowSessions / Settings — pure tool state, not project-shaped. Stays in RP's Application Support; not pulled.
  • Workspace partitioning auto-derivation — abcd inferring an RP partition strategy from .gitignore + repo structure if no workspace exists. Heuristic; out of scope.

Scope Conditions

None stated.

Acceptance Criteria

BDD format, per itd-1-acceptance-gates. This acceptance block uses Given-When-Then directly.

  • Given an abcd repo with an existing RP workspace defined in ~/Library/Application Support/RepoPrompt/Workspaces/ whose root matches the repo, when abcd dev-sync runs, then .abcd/rp/workspace.json exists and matches the source workspace definition (with ~/-relative path normalisation applied).
  • Given an abcd repo with no matching RP workspace, when abcd dev-sync runs, then the command logs a one-line note ("no RP workspace matches this repo") and continues without failing; no .abcd/rp/workspace.json is created.
  • Given an abcd repo with multiple matching RP workspaces, when abcd dev-sync runs, then the most-recently-modified workspace is selected and .abcd/rp/workspace.json is written from it.
  • Given a public repo (per brief visibility setting), when dev-sync runs, then .abcd/rp/ is added to .gitignore and not committed.
  • Given a private repo, when dev-sync runs, then .abcd/rp/ is committed (and visible in git status).
  • Given a lifeboat containing .abcd/rp/workspace.json, when /abcd:embark from <path> runs on a fresh account/machine with RP installed, then the user is interactively asked whether to register the workspace; if yes, the workspace is written to RP's Application Support and registered.
  • Given the embarker has no RP installed, when embark encounters .abcd/rp/, then the command warns gracefully ("RepoPrompt not detected; .abcd/rp/workspace.json preserved for later sync") and continues without failing.
  • Given an RP workspace whose workspace.json contains absolute paths under /Users/<username>/, when abcd dev-sync reads it, then the written .abcd/rp/workspace.json has those paths rewritten to ~/-relative form.

SOTA

Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the harness, interop and lifeboats SOTA note.

  • RepoPrompt's documentation is served as plain text at repoprompt.com/llms.txt (read in the 2026-10-23 adjudication; the HTML pages are script-rendered and returned a title only). It publishes no on-disk workspace file schema, so the format this record would validate is undocumented; it does document a manage_workspaces MCP tool (list, switch, create, delete, add_folder, remove_folder and tab actions), which registers a workspace by name and folders only, and it says that presets, not workspaces, save and restore the file selection, prompt and settings.
  • Apple's file system guide describes Application Support as "app-specific data and support files … that your app creates and manages", under the app's bundle identifier, and says nothing about another app reading or writing there; writing a workspace entry into RepoPrompt's directory on embark writes into a store abcd does not own.
  • Fowler's Tolerant Reader is the pattern for an undocumented file: take only the elements used, make minimal structural assumptions, confine parsing to one place; schema-bound readers "tend to break when the provider adds a field".
  • abcd's existing RepoPrompt route is an MCP client on loopback that starts no process and reads no file (internal/adapter/repoprompt).
  • Where the research contradicts this planned record: the in-scope lines that a JSON Schema ships with the adapter and that embark writes under ~/Library/Application Support/RepoPrompt/Workspaces/. The ruling (planned as written, its spec to follow itd-6, which shipped on 2026-10-12) stands; the spec-writing interview can weigh this.

Path 2 — carry the workspace file as an opaque, provenance-stamped artefact read tolerantly (path strings rewritten only where provably home-rooted), and on embark offer it to the person and to RepoPrompt's own interface rather than writing another app's store. That interface is now concrete and limited: manage_workspaces can create a workspace by name and folders, not restore its selections or prompts. The independent fit-challenge is still owed before the build, and the questions below are kept for it.

Questions this pass raised for the fit-challenge before the build. They are kept here, not under Open Questions, so they do not hold a build the record already rules ready:

  • RepoPrompt exposes a workspace-registering MCP tool (manage_workspaces, name and folders only): is calling it on embark acceptable where writing its Application Support directory is not, and is a workspace re-created by name and folders, without its selections and prompts, worth the call?

Open Questions

  • Workspace identity disambiguation when multiple match. Most-recently-modified is the proposed default; should the user be prompted instead? Probably no (keep dev-sync non-interactive), revisit if the heuristic misfires.
  • Provenance field: should .abcd/rp/workspace.json carry a _source field noting which RP install / Library version produced it? Helps debugging cross-version issues. Recommended yes; confirm during implementation.
  • Conflict resolution on embark: if the embarker has a workspace with a clashing UUID (unlikely but possible), what's the policy? Probably: rename the embarked one with a suffix (<name>-from-lifeboat).

Audit Notes

Empty. Populated by intent-fidelity-reviewer when intent moves to shipped/.

References

Frontmatter

iditd-7
typeintent
lifecycleplanned
kindstandalone
severityminor

Referenced by9

mentions18