Repository navigation
docs: feint is to hold durable resources, and the safety argument changes with it (#196, #733) - #881
stephrobert wants to merge 1 commit into
Conversation
…nges with it (#196, #733) This reverses the decision recorded yesterday in #879. That one answered "feint never manages a resource whose loss would matter" and refused #553, #554 and #555. The maintainer's answer is the other one, and it is the maintainer's to give: **feint materialises a homelab's durable resources on one host, under one personality. A multi-host cloud with its own scheduler is another project.** That is the wording #733 itself offered as a candidate, and the issue was explicit that it asked for the decision to be *written*, not for a particular outcome. The previous text is not amended in place: it is replaced, because leaving two readings is the exact state #733 described — two current texts, neither citing the other, for two months. ## What moved, and what did not The boundary moves from **persistent** to **multi-host**. `docs/roadmap.md`'s "and then the runtime is somebody else's project" is superseded in part and kept whole, per the journal rule, with a block saying which half moved: the other project's API, its scheduler, its IPAM and its authentication are still not issues here, and #195 still describes the HTTP contract a second backend speaks across. Durable does not mean distributed. ## The section states a direction and says so `docs/limits.md` is the page of measured limits, and this is not one. So the section separates them rather than blurring them: today nothing feint holds is durable, the store is memory, and the one place real bytes live is bounded by a byte budget under a directory feint owns and swept with everything else. A reader deciding whether to point feint at something they care about is sent to the table below, not to this section. #551, #553, #554 and #555 are the work that changes it. ## The cost, named before it is met The argument that makes feint safe to aim at an operator's own station is *it only touches what it made, and what it made is disposable.* The first half is enforced and stays. **The second half is what makes the first affordable, and it is the half that expires.** `feint clean --force` removes everything carrying the label after naming each row, with no confirmation, no backup and no recovery path — correct for a lab, indefensible for a volume somebody wants back. The same holds for `feint down --cleanup` and for every conformance suite, which sweep on entry and exit by design. That is #880, and it is filed **before** the durable work rather than after, because the cheap order is the wrong one: if #555 lands first, every sweep becomes dangerous at the same instant, in paths nobody edited. It is the shape of defect this repository has paid for before — a property true at t0 and false later, with no control re-asking it. ## Tracker #733, #196, #553, #554 and #555 are reopened, each carrying the reversal and its reason. The milestones `Reality wins` and `The homelab is not disposable` are reopened with the same note in their descriptions, so a reader of either finds why they closed and why they did not stay closed. Assisted-by: Claude Code (claude-opus-5)
|
Closing unmerged. This pull request reversed #879 on a misreading of my own making. The decision was taken cleanly against three stated options — the lab stays disposable, the record may persist. I then asked a follow-up in prose, "if you want feint to become the tool that builds a durable homelab, say so and I will do it", and read the answer to that leading question as overturning the decision. It did not; it answered the question I posed badly.
#880 closes with it: it was filed as a consequence of the homelab direction and has no subject without it. |
Summary
This reverses #879, merged yesterday. That decision answered "feint never manages a resource whose loss would matter" and refused #553, #554 and #555. The maintainer's answer is the other one, and it was always the maintainer's to give: feint materialises a homelab's durable resources on one host, under one personality. A multi-host cloud with its own scheduler is another project.
That is the wording #733 itself offered as a candidate. The issue was explicit that it asked for the decision to be written, not for a particular outcome — and I wrote the wrong one.
The previous text is replaced, not amended. Leaving two readings is the exact state #733 described: two current texts, neither citing the other, for two months.
What moved, and what did not
The boundary moves from persistent to multi-host.
docs/roadmap.md's "and then the runtime is somebody else's project" is superseded in part and kept whole, per the journal rule #722 asks for, with a block naming which half moved. The other project's API, its scheduler, its IPAM and its authentication are still not issues here, and #195 still describes the HTTP contract a second backend speaks across. Durable does not mean distributed.The section states a direction, and says so
docs/limits.mdis the page of measured limits, and this is not one. So the section separates them instead of blurring them: today nothing feint holds is durable, the store is memory, and the one place real bytes live is bounded by a byte budget under a directory feint owns and swept with everything else. A reader deciding whether to point feint at something they care about is sent to the table below, not to this section.#551, #553, #554 and #555 are the work that changes it.
The cost, named before it is met
The argument that makes feint safe to aim at an operator's own station is it only touches what it made, and what it made is disposable. The first half is enforced and stays — labels,
Binding.ours, the driver's ownership probe, and an audit's forced instance deletion refused by exactly those checks.The second half is what makes the first affordable, and it is the half that expires. The sweep removes everything carrying the label after naming each row, with no confirmation, no backup and no recovery path. Correct for a lab; indefensible for a volume somebody wants back. The same holds for the lifecycle's cleanup flag and for every conformance suite, which sweep on entry and exit by design.
That is #880, filed before the durable work rather than after. If #555 lands first, every sweep becomes dangerous at the same instant, in paths nobody edited — the shape of defect this repository has paid for before: a property true at t0 and false later, with no control re-asking it.
Tracker, already done
#733, #196, #553, #554 and #555 are reopened, each carrying the reversal and its reason rather than a bare state change. The milestones
Reality winsandThe homelab is not disposableare reopened with the same note in their descriptions, so a reader of either finds why they closed and why they did not stay closed.Type of change
Checklist
Always
mise run checkpassesinternal/corestill knows no provider — no Go file is touchedmise run testplanwas run, and what it printed was run —docs:checkandlimits:checkfor a prose diff, both greenWhen a model wrote a substantive part of this
Assisted-by:trailer names the tool and the model versionWhen a route is added or changed
N/A.
When behaviour a client can observe changes
docs/limits.mdupdated — it is the subjectWhen
.github/workflows/is touchedN/A.
When a machine runtime is involved
N/A for this diff, and #880 is where it stops being N/A: every destructive path in
internal/core/machineand in the CLI's sweeps currently answers only "is it mine", because losing what it destroys costs a re-apply.Related issues
Reverses #879. Reopens #733, #196, #553, #554, #555. Opens #880, which is a prerequisite of #555.
🤖 Generated with Claude Code