Skip to content

Declare implicit cross-artifact runtime dependencies #879

Description

@williamthorsen

Problem

Skills invoke other skills and subagents at runtime without recording those edges anywhere the resolver reads. They work today only because a fuller set happens to be deployed (the global catalog, or a collection). Under selective declaration the resolver would deploy a skill without its invocation targets, breaking it at runtime: declaring create-pr alone, for instance, deploys it without its create-gh-pr, create-bitbucket-pr, and summarize-change delegates.

Context

#878 retired unconditional install; every catalog artifact now deploys only via declaration, so the original constraint (a declared skill cannot depend on an install-path skill) no longer holds. Every endpoint is already on the declared path, and the full audit is now actionable. #898 introduces {skill:}/{subagent:} tokens the resolver reads as edges; this ticket consumes them. The discriminating work is reading each reference to tell a genuine invocation from a mention, and getting the edge direction right (a delegate's description names its caller, but the edge runs caller → delegate).

Proposed solution

Read every skill body once. Convert each genuine runtime invocation of another skill or subagent to a {skill:}/{subagent:} token. Leave references that merely name an artifact untokenized: downstream data-flow notes (commit naming summarize-change), doc cross-references, and a delegate naming its caller. Record non-inline edges in dependencies: frontmatter: rulebook dependencies, references that are not an inline invocation (design-and-plan's shared template with plan), and subagent dispatches expressed in pipeline tables or Task-tool parameters rather than inline prose. Verify the resolved closure with tests.

Acceptance criteria

Must have

  • Every genuine runtime invocation of one skill or subagent by another is recorded as an edge the resolver reads: a {skill:}/{subagent:} token for inline invocations, or a dependencies: frontmatter entry for non-inline edges.
  • capture-feedbackcapture-event and collaboratecapture-feedback are recorded.
  • References that name an artifact without invoking it are not recorded as edges.
  • The recorded edges are covered by closure-resolution tests.

Dependencies

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions