Remove the unused Forward Template editor from Messages settings
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 85/100
- Issue type
- Refactor
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- javascript, react
- Domain
- backend, frontend, testing-qa
Research direction
Start in client/src/components/messages/ConfigTab.jsx at the Forward Template state, field, and save handling, then review ConfigTab.test.jsx and server/routes/settings.js:678 to understand nested settings replacement. Remove the inert editor and default while preserving an existing legacy value, and verify the rendered interaction keeps Reply Template and conversational-tone saving intact.
Written by the indexing model from the issue text.
Description
Audited 2026-10-04. Slice: Messages configuration, draft generation route, evaluator callers, tests, and history.
Scope: small. Severity: 4/10.
Problem
Messages Settings offers an editable "Forward Template" under Prompt Templates (client/src/components/messages/ConfigTab.jsx:669). The component loads it at :86, changes it at :676, and saves messages.forwardTemplate through Save Config at :193.
No runtime path reads this setting. Repository-wide identifier search finds forwardTemplate only in that configuration component. The actual generator, server/services/messageEvaluator.js:118, chooses templateOverride or msgConfig.replyTemplate at :123. Its HTTP caller (server/routes/messages.js:235) supplies reply options only; the other production caller in server/services/tribeOutreach.js:577 supplies an outreach override. There is no forwarding entry point selecting the saved Forward Template.
Impact and evidence
A user can edit and save a template intended to affect generated drafts, but it changes no generated message. This is an offered inert setting, not a request to add an unrelated forwarding feature.
The editor was introduced by c700d58b4 with the Messages Config page. Current ConfigTab tests cover OAuth actions; evaluator tests cover reply generation, with no forwarding consumer. Static data-flow inspection is sufficient to prove the missing consumer; no provider call or private data was used.
Decided fix: remove the unsupported surface
In client/src/components/messages/ConfigTab.jsx, remove the Forward Template field, DEFAULT_FORWARD_TEMPLATE, and its editable local state. Do not initialize or save a default for this unsupported feature. Keep the functional Reply Template and conversational-tone controls.
Preserve an existing stored messages.forwardTemplate as opaque legacy passthrough, only when the fetched setting actually contains that key. PUT /api/settings replaces the nested messages slice at server/routes/settings.js:678, so simply omitting it on save would discard the original value. Retain that original key (including an intentionally empty value) when saving supported fields, without inventing a default. Do not add a migration or change global settings merge semantics. A future forwarding workflow can deliberately reuse those values when it supplies a real consumer.
Add a focused rendered configuration regression in ConfigTab.test.jsx: the inert field is absent and saving a Reply Template still sends the supported settings without introducing a default forwardTemplate; an existing legacy value round-trips unchanged. No generation behavior should change.
Dispatch: model:light for a well-specified removal in one component; effort:low because the consumer search proves the setting has no runtime dependency.
Acceptance criteria
- Messages Settings offers no Forward Template editor and no longer initializes or writes a replacement default for it.
- Reply Template and conversational tone remain editable and saved.
- Saving supported settings preserves a pre-existing stored Forward Template instead of clearing it.
- A rendered interaction regression verifies the supported Save Config payload and the absent inert control.
- Dominant language
- JavaScript
- Stars
- 38
- Forks
- 32
- Avg merge
- 33m
- Merged PRs (30d)
- 988
Getting set up
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from atomantic/PortOS
-
Share the test-Chrome resolver with the client browser tests and ci-warm-test-chrome.shPossibly taken @atomantic claimed this today. Opencode-quality effort:medium in-progress model:light planner:sonnet-5-5 tests
atomantic/PortOS#12315 · 1 assignee ·
Maintainers usually reply within 1 day
-
backup.db.test restore older database schema fails in local pregate DB suitePossibly taken @atomantic claimed this today. Openbug in-progress
atomantic/PortOS#12306 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
-
Follow-up fixes for pregate attestation (post-merge review of #12299)Possibly taken @atomantic claimed this today. Openbug effort:medium in-progress model:medium planner:sonnet-5-5
atomantic/PortOS#12302 · 1 assignee ·
Maintainers usually reply within 1 day
-
Test memo: key non-literal native require() sites and importlib imports instead of failing closedPossibly taken @atomantic claimed this today. Openeffort:medium enhancement in-progress model:medium plan tests
atomantic/PortOS#12300 · 1 assignee ·
Maintainers usually reply within 1 day
-
Test memo: record the Vitest setup/environment modules instead of hashing their 179-file static closurePossibly taken @atomantic claimed this today. Openeffort:high enhancement in-progress model:heavy plan tests
atomantic/PortOS#12298 · 1 assignee ·
Maintainers usually reply within 1 day
All issues in atomantic/PortOS
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
SACGF/variantgrid#2341 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Maintainers usually reply within 1 day
-
Unsampled pageload span is profiled when profileLifecycle is 'trace' (browser UI profiling)Possibly taken @Jxxunnn claimed this today. OpenBrowser Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
getsentry/sentry-javascript#25497 · 1 comment ·
Maintainers usually reply within 1 day
-
external-plugin needs-review:HIGH ready-for-review
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
github/awesome-copilot#5162 · 3 comments ·
Maintainers usually reply within 1 day