ControlCapability gains printer-approval-v1; the historical DeviceControlPollRequest.capabilities and management Device.control.capabilities arrays move from 3 to 4 entries.
New server -> client frame PRINTERS: RealtimePrinters (closed envelope), RealtimePrintersPayload (printers, max 200, open), PrinterApprovalState (printerId Id, enabled boolean, both required, open); added to RealtimeServerMessage.
Verifiers: PRINTERS in the directional server-message check; 4- and 5-capability hellos valid, duplicate/unknown sixth capability and missing realtime-v1 rejected; PRINTERS bounds (0, 200, 201), required fields, boolean type, closed envelope; control poll accepts all four non-realtime capabilities.
Docs: REALTIME.md frames row and "Printer approval" section, VERSIONS.md 2.4.0 row and negotiation rule (minimum 2.4.0), README mention, CHANGELOG 1.1.0 (unreleased), package version 1.1.0.
Semantics
The server sends PRINTERS only on connections whose HELLO advertised printer-approval-v1: after each accepted INVENTORY from that connection (after its ACK) and whenever any printer's approval for the device changes. It lists the complete approval state of the latest accepted inventory; each frame replaces the previous one; not acknowledged, not durable, no job or document data. An empty inventory yields { "printers": [] }.
Contract half of the printer-approval feature (printing semantic extension **2.4.0**, additive). Wire payload stays v1, subprotocol stays `qqq-printing.v1`, every 2.3.0 fixture is unchanged.
## Changes
- `RealtimeHelloPayload.capabilities`: enum gains `printer-approval-v1`, `maxItems` 5.
- `ControlCapability` gains `printer-approval-v1`; the historical `DeviceControlPollRequest.capabilities` and management `Device.control.capabilities` arrays move from 3 to 4 entries.
- New server -> client frame `PRINTERS`: `RealtimePrinters` (closed envelope), `RealtimePrintersPayload` (`printers`, max 200, open), `PrinterApprovalState` (`printerId` Id, `enabled` boolean, both required, open); added to `RealtimeServerMessage`.
- Fixtures: `realtime-printers.message.json`, `realtime-approval-hello.message.json` (five capabilities), `printing-realtime-extension-240.discovery.json`.
- Verifiers: PRINTERS in the directional server-message check; 4- and 5-capability hellos valid, duplicate/unknown sixth capability and missing `realtime-v1` rejected; PRINTERS bounds (0, 200, 201), required fields, boolean type, closed envelope; control poll accepts all four non-realtime capabilities.
- Docs: REALTIME.md frames row and "Printer approval" section, VERSIONS.md 2.4.0 row and negotiation rule (minimum 2.4.0), README mention, CHANGELOG 1.1.0 (unreleased), package version 1.1.0.
## Semantics
The server sends PRINTERS only on connections whose HELLO advertised `printer-approval-v1`: after each accepted INVENTORY from that connection (after its ACK) and whenever any printer's approval for the device changes. It lists the complete approval state of the latest accepted inventory; each frame replaces the previous one; not acknowledged, not durable, no job or document data. An empty inventory yields `{ "printers": [] }`.
## Gates
- `npm run check`: 79 definitions compiled, 82 fixtures passed (realtime directional, bounds, replay checks passed).
- `npm run lint`: 0 problems. `npm run typecheck`: clean.
- `npm run quality`: 17 + 13 tests OK, 6 Python scripts and 7 JavaScript files verified, 18 tracked source notices verified.
- `git diff --check`: clean.
No tag or release. Server (`qbit-printing` 1.1.0 / 2.4.0) and client (`qqq-print-agent` 1.2.0) changes follow in their own repositories.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Add the printer-approval-v1 HELLO capability (maxItems 5), extend
ControlCapability and the historical control-poll/management capability
arrays to four entries, and define RealtimePrinters, RealtimePrintersPayload
and PrinterApprovalState with the union entry. The server sends PRINTERS only
on connections that advertised the capability, after each accepted INVENTORY
and on every approval change; it is not acknowledged and carries no job data.
Add the PRINTERS, five-capability hello and 2.4.0 discovery fixtures, cover
the new frame in the directional and negative verifier checks, document the
frame, the 2.4.0 registry row and the negotiation rule, and record
distribution 1.1.0 as unreleased. Wire payload v1, the subprotocol and every
2.3.0 fixture are unchanged. 79 definitions compile and 82 fixtures pass.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Contract half of the printer-approval feature (printing semantic extension 2.4.0, additive). Wire payload stays v1, subprotocol stays
qqq-printing.v1, every 2.3.0 fixture is unchanged.Changes
RealtimeHelloPayload.capabilities: enum gainsprinter-approval-v1,maxItems5.ControlCapabilitygainsprinter-approval-v1; the historicalDeviceControlPollRequest.capabilitiesand managementDevice.control.capabilitiesarrays move from 3 to 4 entries.PRINTERS:RealtimePrinters(closed envelope),RealtimePrintersPayload(printers, max 200, open),PrinterApprovalState(printerIdId,enabledboolean, both required, open); added toRealtimeServerMessage.realtime-printers.message.json,realtime-approval-hello.message.json(five capabilities),printing-realtime-extension-240.discovery.json.realtime-v1rejected; PRINTERS bounds (0, 200, 201), required fields, boolean type, closed envelope; control poll accepts all four non-realtime capabilities.Semantics
The server sends PRINTERS only on connections whose HELLO advertised
printer-approval-v1: after each accepted INVENTORY from that connection (after its ACK) and whenever any printer's approval for the device changes. It lists the complete approval state of the latest accepted inventory; each frame replaces the previous one; not acknowledged, not durable, no job or document data. An empty inventory yields{ "printers": [] }.Gates
npm run check: 79 definitions compiled, 82 fixtures passed (realtime directional, bounds, replay checks passed).npm run lint: 0 problems.npm run typecheck: clean.npm run quality: 17 + 13 tests OK, 6 Python scripts and 7 JavaScript files verified, 18 tracked source notices verified.git diff --check: clean.No tag or release. Server (
qbit-printing1.1.0 / 2.4.0) and client (qqq-print-agent1.2.0) changes follow in their own repositories.🤖 Generated with Claude Code