call-graph-output
Generated at build time from
skills/call-graph-output/SKILL.md. Do not edit this page directly.
call-graph-output is an output convention, not a reasoning workflow.
It renders a graph that another skill or analysis has already established.
reasoning / implementation / orchestration ↓ known relationships ↓ call-graph-output ↓ compact human-readable graphIt does not decide:
what product behavior should existwhat architecture should existhow implementation should be designedwhether work should be delegatedwhat dependencies existwhat testing strategy is correctwhether a security issue existsThose decisions belong to the relevant domain skill.
1. Use a graph only when it helps
Section titled “1. Use a graph only when it helps”Use this skill when the user benefits from seeing:
call hierarchyruntime pathresponsibility/dependency flowbranch and joinproduction vs test substitutionplanned vs implemented executiondelegated execution DAGintegration pathfailure/recovery pathDo not emit a graph merely because code changed.
For a trivial local change:
function renamedsmall conditional changedCSS adjustedsingle obvious test addedplain prose is usually better.
Core rule:
Use the graph when relationships are easier to understandthan they would be in prose.2. Preserve semantics; do not invent them
Section titled “2. Preserve semantics; do not invent them”The graph must come from established evidence:
codediffengineering contractdesign-thinking graphgraph-protocol DAGtest topologyruntime tracereview findingDo not infer extra nodes or edges just to make the diagram look complete.
If the source only proves:
Handler→ Service→ Repositorydo not add:
CacheQueueEventBusbecause they would be architecturally plausible.
A rendering skill must never create architecture by presentation.
3. Choose the graph shape that matches the question
Section titled “3. Choose the graph shape that matches the question”Linear call path
Section titled “Linear call path”Use for a mostly sequential path:
HTTP request → BookingHandler → BookingService → BookingRepository → PostgreSQLBranch
Section titled “Branch”Use when one node fans out:
CreateOrder ├→ Inventory.reserve ├→ Payment.authorize └→ Audit.recordDo not imply concurrency merely because the graph branches.
If execution semantics matter, label them explicitly.
Parallel / join
Section titled “Parallel / join”Use only when parallelism is established:
LoadDashboard ├─parallel→ loadProfile └─parallel→ loadActivity │ └────────┐loadProfile ───────────────┤ ↓ composeDashboardPrefer a simpler representation when exact join topology is not important.
Execution DAG
Section titled “Execution DAG”For orchestration, render contracted outcomes and typed edges:
Define booking invariant ─decision→ Implement persistence guarantee ─data────→ Design concurrency proof
Implement persistence guarantee ─data────→ Integrate booking flow
Design concurrency proof ─data────→ Integrate booking flow
Integrate booking flow → Final verificationDo not revert to wave barriers if the actual orchestration uses dependency readiness.
Conflict
Section titled “Conflict”When scheduling conflict matters:
Refactor UserService ─write-conflict─ Add UserService featureA conflict edge means:
not safe to mutate concurrentlyIt does not necessarily mean one node consumes the other’s output.
4. Use explicit edge labels when semantics matter
Section titled “4. Use explicit edge labels when semantics matter”Default arrow:
A → Bmeans only:
A leads to / calls / passes control or output to BWhen the distinction matters, use labels such as:
A ─data──────→ BA ─order─────→ BA ─decision──→ BA ─parallel──→ BA ─retry─────→ BA ─fallback──→ BA ─write-conflict─ BDo not over-label every edge.
Label only when an unlabeled arrow would hide an important semantic distinction.
5. Name nodes by responsibility or outcome
Section titled “5. Name nodes by responsibility or outcome”Prefer:
Validate booking requestReserve room atomicallyPersist bookingEmit confirmationover:
booking.tsservice.tsrepo.tsline 84Prefer component/service names when they are the actual architectural vocabulary:
BookingHandlerBookingServiceBookingRepositoryPostgreSQLUse filenames only when the file itself is relevant to the explanation, such as:
migration fileworkflow fileconfiguration fileFor orchestration graphs, nodes should normally be contracted outcomes, not worker names:
Bad:
Agent A→ Agent B→ Agent CBetter:
Implement backend contract→ Integrate UI behavior→ Verify end-to-end flowWorker identity may be shown secondarily when it matters.
6. Production and Tests are conditional sections
Section titled “6. Production and Tests are conditional sections”Do not always emit both.
Use separate sections only when the dependency/call graph materially differs.
Example:
Production:
HTTP handler → OrderService → PaymentClient → OrderRepository → PostgreSQLTests:
HTTP handler → OrderService → FakePaymentClient → MemoryOrderRepositoryIf production and tests share the same meaningful graph, show one graph and mention the substitution in prose if needed.
Do not imply that a fake proves semantics that belong to a real dependency.
Example:
business rule test→ FakeRepository may be representative
transaction isolation proof→ real PostgreSQL boundary requiredThat proof decision belongs to test-engineering; this skill only renders it.
7. Planned vs implemented graphs are not required to be identical
Section titled “7. Planned vs implemented graphs are not required to be identical”When comparing expected and actual implementation, render both only when the comparison materially helps.
Example:
Expected contract:
Booking request → enforce no-overlap invariant → persist one valid bookingImplemented:
Booking request → BookingRepository.create → PostgreSQL exclusion/unique constraintThese graphs are structurally different but may be contract-equivalent.
Do not annotate:
Mismatchmerely because internal nodes differ.
Use the owning review/orchestration skill to establish whether:
required outcome changedconstraint was violateddependency contract brokescope materially driftedverification failedOnly then visualize the meaningful difference.
Core rule:
contract equivalence≠structural equality8. Surface deviations explicitly when relevant
Section titled “8. Surface deviations explicitly when relevant”For delegated or adaptive work, a worker may legitimately discover a different implementation path.
When that discovery matters to the reader, show it concisely:
Delegated outcome → Idempotent webhook handling
Discovery → Existing unique event ID already provides dedup boundary
Implemented → WebhookHandler → EventRepository.insertUnique → duplicate event → no-opDo not print a full orchestration retrospective.
Show only deviations that affect:
contractarchitecturedependencyscopeverificationintegration9. Integration is a first-class graph when it matters
Section titled “9. Integration is a first-class graph when it matters”Independent local results do not prove integrated behavior.
When multiple outputs meet, show the join:
Backend contract ─────┐ ├→ IntegrationUI behavior ──────────┘ ↓ Final verificationOr:
Persistence guarantee ─┐ ├→ Booking integrationUI completion behavior ─┘ ↓ E2E verificationDo not imply:
backend green+frontend green=feature greenunless integration itself was actually verified.
10. Render evidence separately from execution
Section titled “10. Render evidence separately from execution”Do not mix test commands into the main call graph unless verification is itself part of the execution being explained.
Preferred:
Execution:
BookingHandler → BookingService → BookingRepository → PostgreSQLVerification:
Concurrent integration test → two overlapping requests → one commit → one rejected/conflicted → no-overlap invariant preservedFor delegated work:
Outcome node ↓local verification ↓integration ↓final verificationUse verification/evidence labels only when the user needs to see how the result was proven.
11. Keep failure paths proportional
Section titled “11. Keep failure paths proportional”Show failure/recovery branches when they are central to the explanation.
Example:
CompleteTask → submit completion ├→ response received │ → mark success │ └→ response lost → refresh task ├→ completed │ → treat as success └→ still active → show failureDo not enumerate every theoretical exception.
Only render failure paths already established as meaningful by the owning reasoning/review skill.
12. Formatting rules
Section titled “12. Formatting rules”Default format:
plain-text graphinside a `text` code blockPrefer:
→├→└→│─data→─order→─decision→─parallel→─write-conflict─Keep indentation consistent.
Use concise node names.
Avoid:
MermaidGraphvizASCII boxes around every nodedecorative bordersemojilong prose inside nodesunless the user explicitly asks for another format.
A graph should be scannable in a few seconds.
13. Relationship to other skills
Section titled “13. Relationship to other skills”design-thinking
Section titled “design-thinking”Supplies implementation/runtime relationships.
design-thinking→ implementation graph→ call-graph-outputCall Graph Output does not perform implementation reasoning.
engineering-design
Section titled “engineering-design”Supplies responsibilities, boundaries, contracts, and critical flows.
engineering-design→ system graph→ call-graph-outputdesign-graph
Section titled “design-graph”Already owns interface graph reasoning.
Use call-graph-output only when a compact text rendering of that relationship is useful.
Do not replace richer interface reasoning with a generic call graph.
graph-protocol
Section titled “graph-protocol”Supplies the adaptive execution DAG.
graph-protocol→ contracted nodes→ typed edges→ integration/final verification→ call-graph-outputCall Graph Output may render:
data dependenciesordering dependenciesdecision dependencieswrite conflictsintegration joinsbut must not invent them.
code-review
Section titled “code-review”May supply expected vs actual implementation paths or a concrete failure path.
Call Graph Output renders that evidence when visualization helps explain a finding.
test-engineering
Section titled “test-engineering”May supply a test topology or proof path.
Call Graph Output renders it without deciding whether that proof is faithful.
14. Proportionality
Section titled “14. Proportionality”Use the smallest graph that answers the question.
one simple call chain→ linear graph
one meaningful branch→ branch graph
multiple dependent outcomes→ compact DAG
production/test differ materially→ separate Production / Tests
planned/actual differ materially→ separate Expected / Actual
integration is the risk→ show integration joinDo not show every layer of the repository.
Do not reproduce a whole architecture when one critical path is the point.
Output Pipeline
Section titled “Output Pipeline”KNOWN RELATIONSHIPS ↓"What question should the graph make obvious?" ↓choose:call path / branch / DAG / comparison / integration ↓"Which nodes materially matter?" ↓use responsibility/outcome labels ↓"Do edge semantics matter?" ↓label only important data/order/decision/conflict edges ↓"Do environments differ?" ↓Production / Tests only when materially different ↓"Is there a meaningful deviation or integration proof?" ↓show only if relevant ↓PLAIN-TEXT GRAPHRender the relationships that are already known. Do not let the output format become a second architecture or orchestration method.