Skip to content

docs(epic-14): reconcile architecture + roadmap for E14B (text-filter commands) - #55

Merged
Joncallim merged 1 commit into
masterfrom
epic/14b-text-filter-commands
Sep 6, 2026
Merged

docs(epic-14): reconcile architecture + roadmap for E14B (text-filter commands)#55
Joncallim merged 1 commit into
masterfrom
epic/14b-text-filter-commands

Conversation

@Joncallim

Copy link
Copy Markdown
Owner

What this changes

Prepares the next PR for issue #15 (E14's remaining scope): user local text-filter commands + command-palette integration ("E14B"). This PR is documentation-only — it reconciles planning/epic-14-implementation.md against what PR #54 actually shipped, and updates planning/epics/README.md's E14 row. No production code changes.

Why

PR #54 shipped E14's first half (contribution SPI, TOCContribution, Preview/Export integration) with a 10-finding adversarial-review remediation that changed the Preview/Export adapter shapes from what epic-14-implementation.md originally specified (§6.6/§7.1). Per planning/epics/README.md's own working rule — "Older architecture work is not automatically binding after its product/release contract changes; it must be refreshed before implementation" — the text-filter half's architecture (§6.5, §7.2, §9, §10, §11, §14, §16, Slices 5-8) needs this baseline confirmed accurate before anyone starts implementing it.

How it works

  • Adds an as-built note (matching this repo's existing amendment convention, see planning/epics/README.md's E02/E03 note) pointing §6.6/§7.1/§16's now-stale PreviewContributionAdapter.merged(...)/ExportContributionAdapter.exportContributions(from:) references to §19 (added by EPIC-14: Extension points — first-party contributions + text filters #54), which records the actual final compose(...)/adapt(...) shapes.
  • Marks Slices 1-4 done (✅, shipped in EPIC-14: Extension points — first-party contributions + text filters #54) and Slices 5-8 not started (🔲) directly in each slice's header, so a reader scans the document and immediately sees what's left.
  • Confirms Slices 5-8 need no other changes. Re-reading them against this PR's own thread of discussion, they already specify: command discovery under ~/Library/Application Support/MacDown 2/Commands; a typed TextFilterCommand (not arbitrary shell snippets); structured Process launch with arguments: [] (stdin only, never shell interpolation); an explicit, bounded working directory and environment (§10); a hard timeout + cooperative cancellation; bounded stdout/stderr with a documented byte cap; a TextFilterError case per failure mode (launch/non-zero/timeout/cancel/oversize), every one of which preserves the original selection; a single undoable editor mutation on success only, reusing the existing applyAssistOutcome idiom; Commands-menu + command-palette integration with discovered commands visibly distinguished from built-in app commands (§10); a full failure-mode test matrix (§9/§14) plus an end-to-end uppercase-selection journey (J4); and the post-1.0 JavaScriptCore extension-API design document (Slice 8) issue [EPIC-14] Extension points: first-party contribution seam + user text-filter commands #15 promises.
  • Updates planning/epics/README.md's E14 row from open to reflect the partial shipment, naming what's done and what's deferred.

Out of scope

Implementing Slices 5-8 themselves — this PR is the architecture-reconciliation step before that work starts, matching this repo's established pattern of a dedicated architecture pass before implementation begins.

Verification

Documentation-only change; no build/test impact. Reviewed by re-reading §6.5/§7.2/§9/§10/§11/§14/§16/§17 (Slices 5-8) against issue #15's live scope and confirming no further architecture changes are needed before implementation begins.

Links

🤖 Generated with Claude Code

PR #54 shipped Slices 1-4 (contribution SPI, TOCContribution, Preview/
Export integration) with a 10-finding remediation not anticipated when
epic-14-implementation.md was first drafted. Adds an as-built note
pointing §6.6/§7.1/§16's now-stale merged(...)/exportContributions(
from:) references to §19's authoritative final shape, and marks
Slices 1-4 done / Slices 5-8 (text filters) not started in the slice
headers. Slices 5-8 themselves are unchanged — they already specify
command discovery, a typed command model, structured (no-shell)
process execution, explicit working directory/environment, timeout +
cancellation, bounded stdout/stderr, fail-closed error handling that
preserves the original selection, one undoable editor mutation,
Commands-menu + palette integration with built-in/user-installed
visual distinction, and the post-1.0 extension-API design doc — this
is the exact, still-current scope for the next PR ("E14B").

Also updates planning/epics/README.md's E14 row from "open" to
reflect the partial shipment (E13's row was already corrected on the
epic/14 branch and is unaffected here).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Joncallim
Joncallim marked this pull request as ready for review September 6, 2026 13:17
@Joncallim
Joncallim merged commit 9e2e177 into master Sep 6, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

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.

1 participant