Skip to content

feat: the k3d/floci estates render whole — cluster root, helm releases, honest component status - #159

Merged
lex00 merged 1 commit into
mainfrom
feat/see-inside-the-cluster
Aug 7, 2026
Merged

lex00 merged 1 commit into
mainfrom
feat/see-inside-the-cluster

Conversation

@lex00

@lex00 lex00 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Verified against a live kubemicrovm-ops (k3d + floci, tier prod-ha) and fountain-ops. Five gaps, one theme: what the estate actually runs was invisible or wrongly painted.

  • Component status: an ABSENT deploy unit (stack: {name} — no status, no healthy) painted accent as if mid-deploy, outranking its own all-present rollup; five of kubemicrovm's seven components read "in flux" on a green estate. Only healthy: false decides now; absence falls through to the rollup.
  • The cluster build root: the estates declare their k3d cluster as chant source in cluster/, deliberately outside sourceDir, so no view ever saw it — the k8s half rendered inside a synthetic cluster <env> box. clusterRootGraphIr reads that root the way the estates' own justfiles do; the merged K3d::Cluster is painted from k3d cluster list and becomes the cluster box.
  • Cluster anchoring: K3d::Cluster joins MANAGED_CLUSTER_KINDS, and the bound kube context (the dead-code contextBindsCluster, finally wired, now k3d-aware) breaks the multi-cluster tie — fountain-ops's two declared clusters anchor to the one the reads actually land on instead of declining.
  • Helm releases: a deploy-step estate (helm-upgrade units, no declared Helm::Chart nodes) observed its releases and had nothing to hang them on — helm was invisible on every zoom. Observed releases matching no declared chart synthesize as Helm::Release nodes: component-owned ones good/warn by helm status, the rest warn (foreign). The logical view places them in their namespace boxes. The artifact join + synthesis + wrong-tier note now also run on /api/refresh and the logical overlay branch.
  • Substrates: the Floci probe accepts chant-floci alongside floci; the Helm pill reports the project's bound context instead of the ambient one; the /api/apply Floci writes: delegated Adopt — foreign node → ReconcileOp → PR (#8) #16 pre-flight only fires when applies actually target Floci — on a k8s/helm estate a re-apply is the normal sync gesture and used to 409 with an error naming an emulator the project doesn't use.

Also bumps pinhole to ^0.2.5 (reserved _-attrs off cards, finite childless boxes, group-box status tint).

Live receipts (kubemicrovm-ops, all against the running estate): components zoom went from {accent:5, good:1, neutral:1} to {good:3, neutral:4}; the logical cluster box is localCluster · Cluster (good tint) instead of cluster dev; the Helm pill reads context k3d-kubemicrovm-local (bound) where it previously named an unrelated real EKS cluster; SVGs carry zero _status: card-text occurrences (was 7–19 per view).

🤖 Generated with Claude Code

https://claude.ai/code/session_01NEtbXBSwLiYFMKv2o4VMb4

…s, honest component status

Verified against a live kubemicrovm-ops (k3d + floci, tier prod-ha) and
fountain-ops. Five gaps, one theme: what the estate actually runs was
invisible or wrongly painted.

- Component status: an ABSENT deploy unit (`stack: {name}` — no status, no
  healthy) painted accent as if mid-deploy, outranking its own all-present
  rollup; five of kubemicrovm's seven components read "in flux" on a green
  estate. Only `healthy: false` decides now; absence falls through to the
  rollup.

- The cluster build root: the estates declare their k3d cluster as chant
  source in `cluster/`, deliberately outside sourceDir, so no view ever saw
  it — the k8s half rendered inside a synthetic `cluster <env>` box.
  `clusterRootGraphIr` reads that root the way the estates' own justfiles
  do; the merged K3d::Cluster is painted from `k3d cluster list` (running →
  good, declared-but-absent → accent) and becomes the cluster box.

- Cluster anchoring: `K3d::Cluster` joins MANAGED_CLUSTER_KINDS, and the
  bound kube context (k8s.profiles.<env>.context — the dead-code
  contextBindsCluster, finally wired, now k3d-aware) breaks the multi-
  cluster tie, so fountain-ops's two declared clusters anchor to the one
  the reads actually land on instead of declining.

- Helm releases: a deploy-step estate (helm-upgrade units, no declared
  Helm::Chart nodes) observed its releases and had nothing to hang them on
  — helm was invisible on every zoom. Observed releases matching no
  declared chart synthesize as Helm::Release nodes: component-owned ones
  (release names scraped from *.component.ts, the same convention ops.ts
  uses) good/warn by helm status, the rest warn (foreign). The logical view
  places them in their namespace boxes, creating the box under the cluster
  for an observed-but-undeclared namespace. applyHelmArtifacts + the
  synthesis + the wrong-tier note now also run on /api/refresh and the
  logical overlay branch, which silently dropped them.

- Substrates: the Floci probe accepts `chant-floci` (chant emulator up's
  container name) alongside `floci`; the Helm pill reports the PROJECT'S
  bound context instead of the ambient current-context (observed live: an
  estate bound to k3d-kubemicrovm-local whose pill named a real EKS
  cluster); the /api/apply Floci #16 pre-flight only fires when applies
  actually target Floci — on a k8s/helm estate a re-apply is the normal
  sync gesture and used to 409 with an error naming an emulator the project
  doesn't use.

pinhole ^0.2.5: reserved `_`-attrs stay off cards (no more `_status: good`
printed on every overlay card), childless containers lay out finite, and
group boxes carry the container node's status tint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NEtbXBSwLiYFMKv2o4VMb4
@lex00
lex00 merged commit f1346f0 into main Aug 7, 2026
1 check passed
@lex00
lex00 deleted the feat/see-inside-the-cluster branch August 7, 2026 05:39
lex00 added a commit that referenced this pull request Aug 7, 2026
… no phantom docs (#160)

Moving every write into the ⌘K palette (#73) left the header with zero action
buttons: behold looked read-only unless you happened to press ⌘K, the docs
still said "click Run floci-apply" about buttons that no longer existed, and
an estate had three differently-named routes to the same apply. Concretely:

- The PRIMARY deploy gesture is a header button again. A committed ApplyOp
  gets `▶ Deploy (<op>)` (+ `Approve <gate>` beside it when gated); a
  project with only components gets `▶ Deploy…`, which opens the dial's
  component picker. One intent, one word — the tooltip carries the
  mechanism. Everything else stays in ⌘K.

- The dial no longer vanishes wordlessly when no env is picked — it says
  what's missing and where to pick it. A static export keeps the silence
  (there is genuinely nothing to offer).

- Errors get a toast at the point of gesture, not only a line in a bottom
  log pane that is display:none until something writes to it. Successes
  toast too ("running <op> — output streams in the log below"), so a
  palette action no longer closes into dead air.

- The Floci #16 warnings (re-apply collides on the emulator) only appear
  when the estate actually targets Floci — a k3d/helm estate used to be
  warned about an emulator it doesn't use, in dialogs and in the 409 (the
  server side of this gating landed in #159).

- Docs describe the UI that exists: README, example-k8s/README, run-it.mdx,
  and acting.mdx's action table (button vs palette, per action).


Claude-Session: https://claude.ai/code/session_01NEtbXBSwLiYFMKv2o4VMb4

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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