Skip to content

Non-AWS substrate parity for live/drift/logical/reconcile layers (tracking) #74

Description

@lex00

Background

behold renders a chant infra project as a live graph. chant supports many substrates via lexicons — aws, azure, gcp, k8s, helm, gitlab, github, forgejo, docker, fly, temporal (../chant/lexicons/). behold's marketing promise is a mixed-substrate estate in one graph.

Today, the base source graph and component DAG are substrate-neutral — behold paints whatever chant graph --format ir returns, so a non-AWS project's source graph renders fine. But the richer live layers are AWS/CloudFormation-shaped and were only ever exercised against the AWS-based Loom demo. This is a tracking issue for reaching non-AWS parity on those layers. It is a larger, separate track from the "open your own project" MVP (which delivers the source graph for any substrate).

Where the AWS coupling lives

  • Logical zoomsrc/logical.ts. Header states "AWS-lexicon only, by design"; HEADLINE_KINDS are literal AWS::* CloudFormation types (VPC/subnet/ELB/etc.). Non-AWS projects get no logical architecture view.
  • Component statussrc/component-status.ts, via chant components status <env> --live --json. Single-substrate AWS, resolved from each component's CloudFormation stack. No CFN → no live status.
  • Live overlay edges — reconstructed per-substrate and "never cross providers" (per ../chant/docs/.../cli/graph.mdx). Cross-substrate topology exists only in the source graph. --live is also managed-only: it needs each resource to carry chant's ownership marker (ownership.stack set in chant.config.ts).
  • Deploy targets / axessrc/server.ts deployTargets() derives a single target from AWS_ENDPOINT_URL; AWS-centric.
  • Substrate mappingsrc/substrates.ts detectSubstrates() only surfaces aws→Floci and k8s→k3d (plus .gitlab/.forgejo dir markers), all gated on Docker. Other lexicons aren't surfaced as substrates at all.

Scope of this track (break into follow-up issues as sized)

This issue is a placeholder to plan and decompose. Candidate sub-work:

  1. Logical zoom beyond AWS — decide whether a logical/architecture view is meaningful for k8s/GCP/Azure/Fly and, if so, define per-lexicon HEADLINE_KINDS and grouping. Otherwise, make the logical zoom gracefully unavailable (not broken) for non-AWS projects.
  2. Live status per substrate — generalize chant components status --live consumption beyond CloudFormation, or clearly gate the status overlay to substrates chant can report on.
  3. Cross-substrate topology — the source graph already has cross-provider edges; decide how much of that to preserve in live/overlay views (chant reconstructs per-substrate and won't cross providers live).
  4. Substrate strip coverage — surface the other lexicons (azure/gcp/fly/helm/temporal/github) in src/substrates.ts where a bring-up/emulator concept exists, or show them read-only.
  5. Deploy target genericization — replace the AWS_ENDPOINT_URL-derived single target with per-substrate targets.

Not blocking "open your own project"

The MVP goal only requires the substrate-neutral source graph to render for an arbitrary chant project — which it already does. This track is the follow-on to make drift/status/logical/reconcile first-class for non-AWS substrates. Prioritize per real demand (which substrates users actually open).

Acceptance criteria (for the track, not a single PR)

  • A concrete decomposition into sized follow-up issues exists.
  • Each AWS-shaped layer above is either generalized or gracefully degraded (never a broken/blank view) for non-AWS projects.

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 request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions