[v0.1/Protocol Review] Freeze the accepted-and-ignored / stub reply set #183
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis#183
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Background
support-matrix.mdcarries a set of⚠️ accepted and ignored/parsed but no-op/stubbedrows: compatibility shims that consume producer bytes without effect. Each one is individually reasonable, but as a set it is not frozen anywhere: there is no recorded list of what felis silently swallows, so a future addition (one more ignored OSC, one more stubbed query) lands without a decision. Since publish freezes observable behavior, freeze the set now — while removals are still free.The current set (all in
support-matrix.md)?9(:97)?1005/ URXVT?1015(:98)?1006is the supported encoding):122):123):133):159):86)CSI 14/15/16 t(:152)0;0:145)Ps=0(unknown); only IRM/LNM report statevt-compliance.md)0$resctest-compatibility.mdrejected cases)0$rQuestions to settle
?1006, OSC 133, Unicode). New ignore-rows should require the same pairing — record that rule inlandscape.mdso "just ignore it" stops being a no-decision default.0;0,Ps=0,0$r) the frozen answers? They are what producers will branch on.vt-compliance.md"Reporting and queries" specifies exact reply payloads for supported queries; the stub answers deserve the same normative table so a future change to them is a breaking change, not a tweak.support-matrix.md:86). It sits besidecursor blinkconfig and the OS reduced-motion question (#122open). Confirm the three agree before freeze.?9— does any real producer still need it swallowed vs refused?), now is the cheapest time to cut it.Proposal
docs/reference/protocols/vt-compliance.md(normative: exact input → exact reply/no-op), covering every row above.docs/explanation/protocols/landscape.md: an ignore-row is accepted only beside its supported alternative, with a Revisit trigger.#122(OS reduced-motion) and the cursor-blink config so the three tell one story.CHANGELOG.mdUnreleased.Acceptance criteria
vt-compliance.md.landscape.mdstates the rule for adding future ignore-rows.#122, and cursor-blink config agree (or the disagreement is a tracked issue).Sources reviewed
docs/reference/protocols/support-matrix.md(rows cited above)docs/reference/protocols/vt-compliance.md("Reporting and queries", rectangular editing notes on DECRQSS)docs/reference/esctest-compatibility.md(9 rejected cases)docs/explanation/protocols/landscape.md(no closed-set rule found)#122(OS reduced-motion query for cursor blink, open)Triage plan (2026-09-07)
Decision (user, 2026-09-07): adopt as proposed. The set is frozen as it stands; nothing is cut (the X10
?9shim stays: refusing it would only turn a harmless no-op into a stray-bytes hazard for an old producer).Approach
Docs-only PR:
docs/reference/protocols/vt-compliance.md: one normative "Consumed without effect" table, one row per input in the issue's list, columns: input, exact reply (or "none"), the supported alternative. Stub replies (0;0,Ps=0,0$r) are stated as the frozen answers.docs/explanation/protocols/landscape.md: the pairing rule (an ignore-row is accepted only beside its supported alternative) with a "Revisit if …" trigger.support-matrix.md:86, the cursor-blink config key reference, and #122's premise tell one story; if they disagree, correct the doc that is wrong and cite #122 rather than opening a new issue.support-matrix.mdrows link to the new table rather than repeating the reply text.Tests
just prose-check; the docs-tree guards; and, if felis-vt has a unit test per stub reply, cite the test name in the table so the normative row is executable. Do not add tests for behavior that already has one.Cascade
No CHANGELOG entry (nothing cut). Grep sweep:
accepted and ignored,stubbed,0$r,parsed butacrossdocs/.