Skip to content

docs: feint is to hold durable resources, and the safety argument changes with it (#196, #733) - #881

Closed
stephrobert wants to merge 1 commit into
mainfrom
decide/733-feint-holds-durable-resources
Closed

stephrobert wants to merge 1 commit into
mainfrom
decide/733-feint-holds-durable-resources

Conversation

@stephrobert

Copy link
Copy Markdown
Owner

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.md is 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 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.

Type of change

  • A route added or changed
  • Bug fix
  • Refactor
  • Documentation
  • Chore / tooling
  • Security / supply chain

Checklist

Always

  • mise run check passes
  • No new external Go dependency
  • internal/core still knows no provider — no Go file is touched
  • Nothing in the diff could be written identically for another provider
  • mise run testplan was run, and what it printed was run — docs:check and limits:check for a prose diff, both green

When a model wrote a substantive part of this

When a route is added or changed

N/A.

When behaviour a client can observe changes

  • No behaviour changes today. The section is a direction, and it says so in its second paragraph rather than letting a reader take it for a description
  • docs/limits.md updated — it is the subject

When .github/workflows/ is touched

N/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/machine and 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

…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)
@stephrobert

Copy link
Copy Markdown
Owner Author

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.

main is unchanged and correct: docs/limits.md carries "The lab is disposable, and that is the boundary" from #879. Nothing needs reverting in code — only this pull request withdrawing, and the five issues and two milestones going back to closed, which is done.

#880 closes with it: it was filed as a consequence of the homelab direction and has no subject without it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant