Skip to content

terraform zoom: 247 nodes for 43 resources — decide what is a card before drawing it (#378) #382

Description

@lex00

Child of #378. A design call before either of the other two lands, because it decides what they are drawing.

The number

chant graph --format ir over waterpark's six roots: 247 nodes for 43 resources.

kind count
Terraform::Variable 108
Terraform::Output 53
Terraform::Resource 43
Terraform::Terraform 14
Terraform::Locals 10
Terraform::Data 8
Terraform::Module 7
Terraform::Provider 4

Four fifths of the estate graph is not infrastructure. A terraform {} block is a card. Every variable is a card. The picture that results is a 275KB SVG in which the resources are a minority of the ink.

This is the lexicon being right: it reads every block because the post-synth checks and chant audit need every block. It is the renderer's job to decide which of them are cards.

The decision

What is a card at each zoom, and it should be settled once rather than per-lens:

  • Default. Resources, modules, data sources. Twenty-two nodes on waterpark instead of 247. This is the estate.
  • Deeper. Outputs and variables, which are the estate's interface, and which carve's own report already treats as edge endpoints (output.* -value-> …) rather than dropping.
  • Never a card, but reachable. terraform {}, provider {}, locals {} — settings, not estate. They belong in the inspect pane of the root's box, or in a panel row, not on the canvas.

behold has a zoom axis already (ZOOM_OPTS, ?detail=), and chant has its own detail tiers. Worth deciding which one carries this: a behold-side filter is honest about being a view choice, a chant-side one would make every consumer agree. My read is behold-side, because "what is worth drawing" is a rendering opinion and chant should keep emitting everything.

Definition of done

  • A stated rule for which entity kinds are cards at which zoom, written down where the next lens can find it (AGENTS.md, beside the member-kind section).
  • The default view of a Terraform estate leads with infrastructure.
  • Nothing is dropped silently: a filtered-out kind is counted somewhere a person can see, the way edgelessNote says why a view has no edges rather than implying there are none.

Why now

#379 decides what a card says and #380 decides which box it sits in. Both are cheaper to do once against an agreed set than to redo when the default view turns out to be unreadable.

🤖 Claude Code — https://claude.ai/code/session_0124XP1LJTZxgJRy7Dh1UfXt

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestterraformthe plain-Terraform estate lane (#230's remainder)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions