feat(protocol)!: name the four dimensions of a status resource row #75
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!75
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/status-resource-scopes-26"
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?
Fixes #26.
felis daemon statusprinted every resource asused / limit, althoughsome values are daemon-wide totals and some the deepest single subject,
while limits may be global, per-session, or per-subscriber. Every ratio
was dimensionally ambiguous, and the one that mattered — how close a
subject is to being refused — could not be told from the one that did
not.
The change
ResourceReportcarries four named dimensions in place of two:total_used,max_subject_used,per_subject_limit,global_limit.Dimensions that do not apply are omitted, never nulled.
LimitScopebecomes
SubjectScopeand names the subject a row counts per.and names the scope on every row, so no ratio crosses denominators.
The row's shape is keyed on
scope, so a reply from a daemon olderthan this repack renders
max <scope> unavailablerather thancollapsing into a daemon row.
sessionscounts admitted slots, reservations included, so it cannotread below what the next create is charged against; each subscriber
outbox is sampled once, so a row's total and its deepest subject
agree.
episode: the notice is claimed under the same lock that makes the drop
decision, so a child that queries in a loop while refusing to read its
stdin cannot grow the daemon's log.
crates/felis-protocol/proto/BREAKING.md, which theproto-compatgate requires, and the skew is documented as silent in both directions
(restart the daemon after rebuilding).
Doc cascade
docs/reference/cli.md(the normative row table, the machine object,the
--formatstability bullet),docs/reference/ipc.md(theStatusReplyentry and what the sample is),docs/reference/spec.md,docs/explanation/architecture/control-surfaces.md(the argument fornaming the dimensions, and the corrected claims about what the deepest
subject predicts),
docs/explanation/architecture/session-lifecycle.md,skills/felis/SKILL.md,CHANGELOG.md, andcrates/felis-protocol/proto/BREAKING.md.The machine surface keeps
"v":1: the epoch is one number for everyverb, so moving it would invalidate every other object's parser over one
verb's rename. The pre-release rule that permits this — a rename lands
under the same epoch with a CHANGELOG entry — was implicit in the tree's
history (
sessions.detach→sessions.evict) and is now recorded inevery copy of the contract, with a "Revisit when" trigger at the first
tagged release.
Rebased onto current
main; the commits this branch shared with thealready-merged #15 stack are dropped, as are the ones
mainsupersededwith a different fix.
Verified: just check green (fmt, clippy, nextest, deny), pi review PASS
(sol, 4 rounds; two blockers in rounds 1–3 — the unacknowledged epoch
contradiction and an unbounded drop-warning flood — fixed, final round
PASS with two non-blocking doc corrections applied).