FE-1443: Declare protocol edges for import-invisible boundaries - #9246
Draft
kube wants to merge 1 commit into
Draft
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 11:21
fbd1b4e to
77d0ee9
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 15:49
77d0ee9 to
bf4fd28
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 21:12
bf4fd28 to
99caa55
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 21:44
99caa55 to
710e04c
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 21:53
710e04c to
021b281
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 19, 2026 23:45
ddbcaf2 to
7eb763a
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 00:26
7eb763a to
dbd2d52
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 00:29
dbd2d52 to
3a06f93
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 00:50
3a06f93 to
1264f15
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 01:12
1264f15 to
ba3ef72
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 01:56
ba3ef72 to
c9f11df
Compare
kube
force-pushed
the
cf/fe-1443-arch-docs-declared-protocol-edges-for-import-invisible
branch
from
August 20, 2026 09:31
c9f11df to
caaebda
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🌟 What is the purpose of this PR?
Proposal for FE-1443: the architecture graph derives every edge from imports, so couplings that cross a process or thread boundary are invisible. The Python bindings spawn the CLI and speak JSON lines with no import in either direction, so the
clilayer shows no consumers.This adds one annotation. In the boundary file's doc comment or docstring:
The declaring file's own layer is the edge source. The edge renders dashed with the protocol as its label, and layer pages list it under a separate "Declared" block.
Sits on top of stack #9226: the seed declaration lives in the Python bindings package, which FE-1414 below made scannable.
🔗 Related links
🔍 What does this change?
libs/@local/petrinaut-arch-docs:tags.ts):@talksTo <layer-id> via <protocol>collected by the same TS-comment and Python-docstring scan as@layerRoot/@role. Repeatable; malformed tags are diagnostics.model.ts):Edgebecomes a discriminated union onprovenance("imports"|"declared"); declared edges carryprotocol.graph.ts): declared edges append after import aggregation. Build errors on an unknown target, on a pair the imports already prove, and on a duplicate declaration.d2.ts): declared edges render dashed with the protocol label in all three diagram kinds; a declared neighbour bypasses the 12-neighbour cap so it cannot be elided.mdx.ts): a "Declared" table (Layer | Protocol) under "Depends on" and "Depended on by", separate from the import tables.check.ts): forbidden-edge rules apply to import edges only.cli; the bundle gains exactly one edge (197 → 198).AGENTS.mdvocabulary claim updated from two tags to three.Open question for review:
ARCHITECTURE_MODEL_VERSIONstays at 1. The only in-repo consumer readsmanifest.json, notedges; bump it if you consider the edge shape part of the bundle contract.Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
🛡 What tests cover this?
tags.test.ts: parsing in TS comments and Python docstrings, malformed tags, miscasing suggestion.graph.test.ts(new): resolution, unknown target, duplicate-of-import, duplicate declaration.d2.test.ts/mdx.test.ts: dashed edge with protocol label; the Declared block, both directions.❓ How to test this?
yarn workspace @local/petrinaut-arch-docs lint:arch-docs— reports 198 edges, one declared.turbo run dev --filter @apps/petrinaut-docs— thepython-bindingsandclilayer pages show the declared edge dashed in their neighbourhood diagrams and in a "Declared" table.🤖 Generated with Claude Code