treewide: drop operation ids from the v0.1 wire contract #298
No reviewers
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!298
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-296"
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?
Implements the decision on #296: remove operation ids from the v0.1 contract (option 1).
Why
No message ever read the daemon's landing records back, so the minted token named a fan-out nothing could ask about: the CLI and the bridge report
queuedand exit, and the shipped agent skill lists the switch verbs under the surfaces it does not cover. Freezing<incarnation:016x>-<sequence>as contract before the consumer that reads it exists is the worst of both options, since a field whose meaning arrives later cannot change shape when it does. Adding the id back is an additive minor whenever a consumer appears.Scope of the removal
OperationId,OperationEcho,OpsSwitched.operation_id,PushReattach.operation,PushRetargetHost.operation,SessionAttach.operation. Tags are left free, not reserved; the break is acknowledged with abase:entry incrates/felis-protocol/proto/BREAKING.md, and the codegen is regenerated.MINOR_OPERATION_IDSand its re-export, the four gated-field entries and their tests, the domain types, and the converts. The minor-8 ledger row keepsSpawn/Createdand theaccepted→queuedrename.src/operations.rsand theOperationshandle on the pool, the mint at theOpsSwitchhandler, thelandcall at the attach path, and the per-target stamping in the session task. A switch push now answers with a count rather than the list of attachment ids nothing reads.felis-client-core(connector.rs,dial.rs) andfelis-client;attach_landingfolds back intoattach.operation_idleaves theswitch,sshandwindow retargetobjects and the bridge results, andcrates/felis-cli/schemas/felis-cli-v1.schema.jsonis regenerated. The bridge goldens held no successfulsessions.switchresult, so a success-path test now pins{from, to, queued}.queuedas the sole completion claim,not_queuedas its error kind.docs/reference/ipc.md(Switch/Switched, the deleted "Operation ids" section, the minor-8 row),docs/reference/cli.md, the rewritten "What a switch reply can report" indocs/explanation/architecture/ipc.md, and aCHANGELOG.mdentry for the machine-output and bridge-result key.The skew outcome is stated in
BREAKING.mdrather than handled: the removed fields decode as unknown and therefore absent in both directions, so the switch path works between a daemon and a client on either side of the change.Verification
just checkgreen (fmt, clippy, tests, prose-check, skill-check, docs-links, deny, proto-compat, release-check). The pre-commitbuf breakinghook has no acknowledgment path, so the commits skip that one hook; the CI gatejust proto-compatreadsBREAKING.mdand passes.grep -rn 'OperationId\|OperationEcho\|MINOR_OPERATION_IDS\|operation_id' crates/ docs/ skills/returns onlyBREAKING.md.openai-codex/gpt-5.6-solreviews: round 1 PASS with two non-blocking findings (vestigialVec<u64>inPushOutcome; the nonzero-queued-at-minor-0 invariant left unpinned), both fixed in9403ccef; round 2 PASS with no findings.Closes #296