Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
1371020
docs(architecture): chart this repository as a single-system landscape
claude Sep 8, 2026
8eb390b
docs(architecture): lock the map-landscape redesign brief
claude Sep 10, 2026
2cb2c1a
fix(architecture): separate runtime scope from development scope in p…
claude Sep 10, 2026
3bc25b1
docs(architecture): regenerate the landscape artifacts from the corre…
claude Sep 10, 2026
a5ef14b
feat(architecture): extract typed reference edges from a repository's…
claude Sep 10, 2026
e2de646
docs(architecture): draw the reference graph in the landscape
claude Sep 10, 2026
35465ae
feat(architecture): record the landscape and report drift against it
claude Sep 10, 2026
8f55c30
feat(architecture): render both landscape dialects from the record
claude Sep 10, 2026
b1c125d
feat(architecture): default map-landscape to this repository and its …
claude Sep 10, 2026
4ce96d0
docs(architecture): mark archived repositories, and hold --check read…
claude Sep 10, 2026
c9a7139
Merge branch 'main' into claude/architecture-map-landscape-3fuoh1
claude Sep 10, 2026
9e3f926
fix(architecture): clear the three hygiene gates this branch tripped
claude Sep 11, 2026
c971100
fix(architecture): stop the landscape record feeding itself, and four…
claude Sep 11, 2026
9315a81
fix(architecture): regenerate the catalog and cheat sheet for the new…
claude Sep 11, 2026
7cbb9b2
fix(architecture): close the five review findings on map-landscape
claude Sep 11, 2026
81115d4
Merge remote-tracking branch 'origin/main' into claude/architecture-m…
claude Sep 11, 2026
1a69a26
docs(architecture): refresh the landscape record for the merged base
claude Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ plugin manifests and kept in sync by CI — never hand-edit it; the category voc

## Design

- [`architecture`](../plugins/architecture) — Scans an existing codebase for module-level architecture friction — shallow modules, seam leaks, and locality gaps — using Ousterhout's deep-module lens, presents candidates as a self-contained HTML report, and runs an interview loop on the selected candidate before handing off for planning. Also charts a discovered set of repositories as a C4 system landscape plus an application-portfolio table, and records an architecture decision into the repository's existing ADR convention.
- [`architecture`](../plugins/architecture) — Scans an existing codebase for module-level architecture friction — shallow modules, seam leaks, and locality gaps — using Ousterhout's deep-module lens, presents candidates as a self-contained HTML report, and runs an interview loop on the selected candidate before handing off for planning. Also charts a repository and the systems it references as a C4 system landscape plus an application-portfolio table, committing the result as a record that later runs check for drift, and records an architecture decision into the repository's existing ADR convention.
- [`prototype`](../plugins/prototype) — Builds throwaway code to answer a design question before committing to architecture — a logic facet (an interactive terminal app over a portable state model) and a UI facet (radically different visual variants on one route).
- [`planning`](../plugins/planning) — Pre-implementation planning pipeline: chart a too-big, foggy effort as a decision map, diverge on candidate approaches, lock product intent and the engineering contract, route resolved domain language to the domain-driven-design glossary steward, explore the design space, stress-test adversarially, and produce a structured implementation plan with an approval gate.
- [`domain-driven-design`](../plugins/domain-driven-design) — Domain-driven-design practice skills. Today: actively maintains a consuming project's ubiquitous-language glossary — resolves ambiguous or overloaded terms, records canonical language and rejected synonyms, sharpens what-it-IS definitions, and routes entries to already-known bounded contexts without discovering boundaries.
Expand Down
2 changes: 1 addition & 1 deletion docs/SKILL-CHEAT-SHEET.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ owned by [docs/CATALOG-TAXONOMY.md](CATALOG-TAXONOMY.md).

| Skill | Plugin | What it does |
| --- | --- | --- |
| [`/architecture:map-landscape`](../plugins/architecture/skills/map-landscape/SKILL.md) | `architecture` | Chart discovered repositories as a C4 system landscape plus an application-portfolio table |
| [`/architecture:map-landscape`](../plugins/architecture/skills/map-landscape/SKILL.md) | `architecture` | Chart a repository and the systems it references as a C4 system landscape and portfolio table |
| [`/discovery:blindspot`](../plugins/discovery/skills/blindspot/SKILL.md) | `discovery` | Surface your unknown-unknowns and sharpen the prompt before unfamiliar work |
| [`/discovery:explore`](../plugins/discovery/skills/explore/SKILL.md) | `discovery` | Explore code, history, tests, and config before changing anything |
| [`/discovery:trace-intent`](../plugins/discovery/skills/trace-intent/SKILL.md) | `discovery` | Reconstruct why a thing was built this way, from evidence outside the code |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Chart a landscape from references and commit it as a record

- Status: accepted
- Date: 2026-09-11

## Context

`/architecture:map-landscape` charted only repositories that were local
checkouts, and it drew a relationship only where a collected fact in one
checkout named another. In a cloud session, or on any machine holding one
repository rather than a fleet, that yields a single box: this checkout names
nineteen other organisation repositories in its workflows, marketplace sources
and docs, and the skill saw none of them.

Two further defects came out of the same pass. The facts probe mixed runtime
and development dependencies, so a repository of shell and markdown whose CI
installs `ruff` reported a Python runtime. And the artifacts were rendered by
hand from collected JSON, so two runs over identical facts produced different
files and nothing recorded what had changed between them.

## Decision

**A repository's own references are the landscape.** A bare invocation charts
the current repository plus every repository its tracked files name, one hop
out. Edges are extracted by a script, typed by the syntax that carries them,
and counted; `--repos` and `--root` remain as explicit overrides. The working
directory is still never walked for nested repositories.

**Each edge type trusts exactly one syntax.** `uses-workflow` a workflow
`uses:` step, `installs-plugin` a marketplace source, `depends-on` a module
path, `cites` a github.com URL or a bare `owner/repo` whose owner matches the
subject's own. A single `owner/repo` regex over all tracked text is rejected.

**Runtime versus development is a scope axis, not a path bucket.** A manifest's
scope is read from the manifest, with one override: anything under a
dot-directory is development scope whatever its content says.

**The answer is committed as a record, and the artifacts derive from it.**
`landscape.json` holds facts and edges; both rendered artifacts are produced
from it by a script doing only reasoning-free work. A later run compares before
it writes and reports what moved, and `--check` makes that comparison a CI gate.

**A repository outside the subject's own owner is read-only reference.** It is
drawn and recorded, never written to, and never fetched from unless the
explicitly opt-in `--remote=all` is passed.

## Evidence

**Every surveyed dependency standard separates runtime from development on
scope, and none on path.** CycloneDX carries a `scope` field
(`required`/`optional`/`excluded`); SPDX types the relationship
(`RUNTIME_DEPENDENCY_OF`, `DEV_DEPENDENCY_OF`, `BUILD_TOOL_OF`,
`TEST_TOOL_OF`); npm splits `dependencies` from `devDependencies`; PEP 735
adds `[dependency-groups]`; the GitHub dependency-submission API takes
`scope: runtime|development`. A separate `ci_tooling` bucket keyed on path was
considered and rejected against this evidence.

**The dot-directory override has its own precedent.** GitHub Linguist vendors
`(^|/)\.github/` out of a repository's language statistics, on the same
reasoning: what a repository's automation installs is not what the repository
runs on.

**A naive reference regex is not merely imprecise, it is wrong on this
repository.** Over all tracked text, `owner/repo` matches `sponsors/…` from a
funding URL, `en/…` from a documentation path, and every `acme/billing` in
every test fixture. Each surviving edge type anchors on a syntax that only ever
names a repository, or requires the owner to match the subject's own.

**Committing the record is what makes drift reportable.** Without it each run
is a snapshot with no memory, and nothing distinguishes a system that was
removed from one that was never charted. Two fields are deliberately excluded
from the comparison: the collector's `path`, because a committed artifact
naming one machine's directory layout differs on every other machine that
regenerates it, and `last_touched`, because the subject repository advances its
own HEAD on every commit and a check lane red for that gets turned off.

## Consequences

A referenced repository that is not checked out is a node with edges and no
probed facts. That is the honest answer without `--remote`, and the portfolio
reports it as `unknown` rather than filling it in.

`cites` outnumbers every other edge type several times over on a
documentation-heavy repository. It means a name appears in tracked text and
nothing more; a high count is not a dependency.

The landscape is bounded at one hop. A repository named by a repository this
one names is not charted.
23 changes: 23 additions & 0 deletions docs/architecture/landscape-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Annotations

Everything above is extracted. Everything here is annotation: the extractor reports
that a repository is referenced and how, never what it is for. Edit this file
freely; the renderer appends it and never overwrites it.

| System | What it is for |
|---|---|
| `claude-code-plugins` | This repository. The plugin marketplace and its skills. |
| `ci-workflows` | The reusable workflows and composite actions every lane here calls. |
| `standards` | The engineering conventions this repository restates and defers to. |
| `github-iac` | GitHub organisation and repository configuration as code. |
| `medley` | An application repository that consumes these plugins. |
| `provisioning` | Machine provisioning. |
| `dotfiles` | Developer environment setup. |
| `knowledge-corpus` | Source material the writing and research skills draw on. |
| `anthropics/claude-code` | The CLI these plugins target. External, read-only. |
| `actions/checkout` | The GitHub Action every workflow here starts with. External, read-only. |

The `cites` counts dwarf every other edge type because this repository is mostly
prose about tooling. A high `cites` count means the two repositories talk about
each other, not that one runs on the other. `uses-workflow` is the edge that
carries a real runtime dependency.
Loading
Loading