Spec Studio

Pinned declarations

Recipe 24 with recipe 51's entry citations.

  • 231 pinned declarations.
  • 61 Specs pin declarations.
231 of 231 shown

A TypeScript-carried Spec can be converted to Markdown

findingIds

import/refusal

Cited at

no citation recorded

dryRun

sdp import <path...> --dry-run

Cited at

no citation recorded

An example step may carry a key that survives rewording

stepMarker

<keyword> [#<key>] <text>

Cited at

no citation recorded

markerRefusal

step key markers must be [#<lower-camel ASCII key>] followed by one space and text

Cited at

no citation recorded

keyOnTwoSteps

step key "<key>" names two steps; a step key names one step within a Spec

Cited at

no citation recorded

twoKeysOnStep

step "<skeleton>" carries two step keys; a step carries one key within a Spec

Cited at

no citation recorded

conflictingKey

contracts/conflicting-step-key

Cited at

no citation recorded

keyedBinding

bindExample(contract, () => world, { cartSize: (world, { items }) => { … }, "the probe runs": (world) => { … } })

Cited at

no citation recorded

Address resolution and dependency cycles stay executable graph recipes

addressFinding

{ validatorId: "unresolved-address", subjectId, severity, message }

Cited at

no citation recorded

cycleFinding

{ validatorId: "dependency-cycle", subjectId, severity, message, file, line }

Cited at

no citation recorded

severityDiagnostic

{ diagnostics: [{ parameter: "severity", problem: "Expected error or warning." }] }

Cited at

no citation recorded

Recipe answers fit an agent's context and explain their misses

impactSummary

{ changedFiles, totals, impactedSpecs: [id], impactedPacks: [id], atRisk: { incomingSpecs: [id], outgoingSpecs: [id], other: [id] }, coverageUnknownFiles, unlinkedUnits: [id], leftOut }

Cited at

no citation recorded

packDesignSummary

{ id, specKind, statedReadiness, floorReached, statedNextRung, holds: [{ clauseId, targets: [id] }], openQuestions, blockingQuestions, implementedBy, referencedBy }

Cited at

no citation recorded

The evaluation sink runs one body and prints its return

recipesBinding

recipes(number, parameters?)

Cited at

no citation recorded

callRejections

recipes: the catalog holds no recipe <number>

Cited at

no citation recorded

evaluatorExport

evaluateBody(body: string, input: { graph: GraphSchema; report?: ValidationReport; params?: Readonly<Record<string, unknown>> }): Promise<unknown>

Cited at

no citation recorded

Example spaces report which values their examples cover

exampleSlot

{ name: string; type: "number" | "string" | "boolean" | "enum"; values?: string[]; step: string }

Cited at

no citation recorded

boundPoint

{ example: string; values: Record<string, string | number | boolean> }

Cited at

no citation recorded

coverageSpace

{ spec: string; examples: string[]; slots: CoverageSlot[] }

Cited at

no citation recorded

coverageSlot

{ name: string; type: string; step: string; enumerable: boolean; values: { value: string | number | boolean; examples: string[] }[]; unbound: string[] }

Cited at

no citation recorded

coverageTotals

{ spaces: number; slots: number; enumerable: number; values: number; uncovered: number }

Cited at

no citation recorded

Recipes take parameters as data and ship as runnable files

acceptsPreamble

const accepts = [...]; const unknownParams = Object.keys(params).filter((name) => !accepts.includes(name)); if (unknownParams.length > 0) return { unknownParams, accepts };

Cited at

no citation recorded

unknownAnswer

{ unknownParams, accepts }

Cited at

no citation recorded

Register questions stay executable graph recipes

familyShape

{ prefixes, scope, totals: { rows, specs, byPrefix }, rows }

Cited at

no citation recorded

familyRow

{ key, spec, section, value, file, line }

Cited at

no citation recorded

The capability map reads every epic and its refinement descendants

nodeRow

{ id, title, specKind, altitude, statedReadiness, floorReached, deliveryFacts, questions, parents, children, epicIds }

Cited at

no citation recorded

edgeRow

{ from, to, claim: "declared", reason }

Cited at

no citation recorded

epicRow

{ id, title, parentEpicIds, descendantIds, rollup }

Cited at

no citation recorded

Every verb answers --help, and one verb writes every projection root

A context bundle is composed per invocation within a stated budget

bundleShape

{ scope, budget, declarations, used, tokenEstimate: { value, method }, leftOut, pack, members, boundary }

Cited at

no citation recorded

memberShape

{ id, file, title, specKind, altitude, statedReadiness, floorReached, statedNextRung, holds, narrative, sections, questions, footing, declarations, examples, design, decisions, implementedBy, referencedBy, verifiers }

Cited at

no citation recorded

exampleRow

{ id, member, file, statedReadiness, enabled, steps }

Cited at

no citation recorded

pointer

{ line }

Cited at

no citation recorded

footingCut

{ refines, dependsOn, constrainedBy, decidedBy }

Cited at

no citation recorded

budgetExceeded

{ scope, budget, declarations, budgetExceeded: true, protectedLength, leftOut }

Cited at

no citation recorded

partsExceeded

{ scope, budget, declarations, part: { index, of: null }, budgetExceeded: true, oversized: [{ item, length }], leftOut }

Cited at

no citation recorded

Designs are compared between a base commit and the working tree at entry grain

diffShape

{ base: { schemaVersion, specs }, head: { schemaVersion, specs }, diagnostics, totals, specs: { added: [id], removed: [id], changed }, packs, bindings, leftOut }

Cited at

no citation recorded

packRows

packs

Cited at

no citation recorded

A slice reads a Pack as one design, with the architecture it touches and what each member needs next

sliceAnswer

{ scope, totals, members, structure, boundary, architecture, decisions, questions }

Cited at

no citation recorded

sliceTotals

{ members, exampleMembers, relations, depth, cycles, heldBelowNextRung, waitingForAuthor, restsOn, holdingOutside, restedOnBy, verifiedBy, supersededBy, components: { touched, throughMembers, throughRestsOn, throughDesigns, outside }, designs: { total, realized, matching, unrealized, differing, unreadable }, componentUses: { inside, outside, planned }, decisions, decisionsBelowReady, openQuestions, blockingQuestions }

Cited at

no citation recorded

memberRow

{ id, title, specKind, altitude, statedReadiness, floorReached, statedNextRung, holds, depth, restsOn, restedOnBy, exampleOf, exampleMembers, design, rules: { total, keyed }, examples: { total, enabled }, verifiers: { total, enabled }, implementedBy, referencedBy, components }

Cited at

no citation recorded

memberSummary

{ id, specKind, statedReadiness, floorReached, statedNextRung, holds, depth, restsOn, exampleOf, design, rules, implementedBy, referencedBy }

Cited at

no citation recorded

structureShape

{ edges: [{ from, to, type, orders, reason }], cycles: [{ members, cycle }], unresolved: [{ from, to, type, reason }] }

Cited at

no citation recorded

componentRow

{ id, label, layer, context, members: { satisfies, references }, restsOn, designs }

Cited at

no citation recorded

componentSummary

{ id, layer, context, members: { satisfies, references }, restsOn, designs }

Cited at

no citation recorded

designRow

{ spec, componentId, layer, context, role, uses, anchorExists, realized, differing, unreadable }

Cited at

no citation recorded

componentUse

{ from, to, count, outside, units }

Cited at

no citation recorded

plannedUse

{ design, from, to, outside }

Cited at

no citation recorded

outsideRow

{ id, label, layer, context, anchored, reachedBy }

Cited at

no citation recorded

architectureShape

{ components, designs, uses, plannedUses, outside, unplaced }

Cited at

no citation recorded

decisionRow

{ id, title, statedReadiness, floorReached, member, shapes, refines, supersedes, supersededBy, openQuestions, blockingQuestions }

Cited at

no citation recorded

questionRow

{ address, spec, origin, index, question, blocking, deferral, decider, links, provisional, trigger, holds }

Cited at

no citation recorded

The CLI names the engine that produced a result

File-level imports show where curation is missing

importsFlag

sdp build --imports PATH

Cited at

no citation recorded

importsFile

{ "schema": "sdp-imports/1", "adapter": "typescript", "exclude": ["src/generated"], "files": [{ "file": "src/a.ts", "imports": ["src/b.ts"] }] }

Cited at

no citation recorded

A change proposal is addressed, based and checked before it lands

proposalDocument

{ "schema": "sdp-proposal/1", "base": "<commit>", "reason": "<one line>", "changes": [change] }

Cited at

no citation recorded

proposalChange

{ "scope": ["<spec id or entry address>"], "request": "<words an agent can apply>", "text": "<exact entry text>", "replaces": "<entry address>", "follows": "<entry address>", "relation": { "action": "declare", "from": "<spec id>", "type": "dependsOn", "target": "<spec id>" }, "reason": "<one line>" }

Cited at

no citation recorded

An Obsidian vault lets a person iterate on designs from the one graph

fileList

{ "schema": "sdp-vault/1", "files": { "<path under sdp/>": ["<sha256 hex of the file's bytes>"] } }

Cited at

no citation recorded

outsideExtractionMessage

sdp vault: the vault <out> lies inside the root and would be read as source; choose a directory under generated/, under an excluded prefix, or outside the root

Cited at

no citation recorded

buildOwnedMessage

sdp vault: the vault <out> overlaps <path>, which every build rewrites or removes; choose another directory, such as generated/obsidian-vault/

Cited at

no citation recorded

indexNote

sdp/index.md

Cited at

no citation recorded

findingLine

- <severity> · <validator id> · <file>:<line> · <message>

Cited at

no citation recorded

A Pack's members and the standing queries are tables over the reader's values

packFilter

sdp/packs/<note>.base

Cited at

no citation recorded

bindingFormulas

implementation: 'if(implementationBinding, "present", "none")'

Cited at

no citation recorded

Every Spec, Pack, code unit and keyed term is a note, and every relation is a link

noteName

<namespace>.<path>

Cited at

no citation recorded

linkForm

[[<path from the vault>.md|<id or address>]]

Cited at

no citation recorded

blockId

<section>-<key>

Cited at

no citation recorded

caseCollisionMessage

sdp vault: <first id> and <second id> name notes whose paths differ only in case; nothing was written

Cited at

no citation recorded

The readiness planner orders the statements a person can make

queueAnswer

{ decider, totals: { waiting, firstRound, rounds, cycles, questions, blockingQuestions, withoutDecider, blockingWithoutDecider }, statements, cycles, questions }

Cited at

no citation recorded

statementRow

{ place, round, id, title, specKind, packs, statedReadiness, floorReached, restsOn }

Cited at

no citation recorded

cycleRow

{ members, cycle }

Cited at

no citation recorded

questionRow

{ address, spec, index, question, blocking, decider, holds }

Cited at

no citation recorded

A Pack is read from a named perspective

perspectiveObject

{ "name": "models", "select": { "kinds": ["model"] } }

Cited at

no citation recorded

A roadmap orders the next bodies of work, and the graph says what each still needs

entryRow

{ place, id, title, specKind, altitude, need, statedReadiness, floorReached, statedNextRung, holdsNextRung, work, workRows, buildNow, blockingQuestions, decisions, restsOn, restedOnBy, earlierStatements, packs, sharesScopeWith }

Cited at

no citation recorded

workRow

workRows

Cited at

no citation recorded

questionRow

{ address, spec, index, question, blocking, decider, provisional }

Cited at

no citation recorded

decisionRow

{ id, title, statedReadiness, blockingQuestions }

Cited at

no citation recorded

restsOnRow

{ id, via, from, need, statedReadiness, holdsReady, onRoadmap }

Cited at

no citation recorded

restedOnByRow

{ id, via, need, onRoadmap }

Cited at

no citation recorded

earlierRow

earlierStatements

Cited at

no citation recorded

apartRow

{ place, id, specKind, statedReadiness, need }

Cited at

no citation recorded

The capability map page makes refinement readable by epic

route

capabilities.html

Cited at

no citation recorded

The Studio's custom elements each hold one view the build renders

specCard

sdp-spec-card

Cited at

no citation recorded

traceGraph

sdp-trace-graph

Cited at

no citation recorded

maturityMap

sdp-maturity-map

Cited at

no citation recorded

impactView

sdp-impact-view

Cited at

no citation recorded

intentPanel

sdp-intent-panel

Cited at

no citation recorded

The Studio renders from the reader's values and embeds only what its script reads

packTotals

{ members: number; unresolved: number; heldBelowNextRung: number; waitingForAuthor: number; entries: number; declarations: number; openQuestions: number; blockingQuestions: number; withImplementations: number; withReferences: number; restsOn: number; restedOnBy: number; verifiedBy: number; supersededBy: number }

Cited at

no citation recorded

railValues

{ packs: { id: string; title?: string; members: { id: string; title?: string; statedReadiness?: string; ownsExampleSpace: boolean }[] }[]; findings: { errors: number; warnings: number } }

Cited at

no citation recorded

searchIndex

{ records: SearchRecord[] }

Cited at

no citation recorded

searchRecord

{ id: string; nodeType: "Primitive" | "Pack" | "Anchor" | "CodeNode"; page: string | null; title?: string; label?: string; framing?: string; narrative?: string; sections?: Record<string, unknown>; file?: string; line?: number; specKind?: string; statedReadiness?: string; floorReached?: string | null; bindings: { edge: string; specId: string }[]; entries: SearchEntry[] }

Cited at

no citation recorded

searchEntry

{ section: string; entry: string | null; key: string | null; address: string | null; line: number | null; text: string }

Cited at

no citation recorded

The Studio reads two named inputs beside the graph, a base graph and run records

studioInputs

{ base?: { graph: unknown; label: string | null }; runs: unknown[] }

Cited at

no citation recorded

baseName

{ label: string | null; schemaVersion: string; specs: number }

Cited at

no citation recorded

The Studio chooses diagram kinds from graph values

A refinement drawing follows the capability map

A dependency drawing shows the declared footing of a Spec set

inputs

subject

Cited at

no citation recorded

Edges route around boxes with deterministic orthogonal paths

A diagram preserves readable labels before zoom

viewport

.diagram-scroll

Cited at

no citation recorded

The maturity map is drawn as a grid of counts

A requirement drawing separates intent from realization and verification

mermaidKind

requirementDiagram

Cited at

no citation recorded

A Spec set draws the architecture it touches

A diagram is laid out from graph values into SVG with a text equivalent

bound

40

Cited at

no citation recorded

A Pack exports as one file, and every page prints as a document

A composing panel on every page gathers scoped intent for an agent

storageKey

sdp-studio:intents:<root path>

Cited at

no citation recorded

intentRecord

{ scope: string[]; request: string; text?: string; replaces?: string; follows?: string; pack?: string; packMembersComplete?: boolean; action: string }

Cited at

no citation recorded

savedFiles

proposal.json

Cited at

no citation recorded

The architecture lens draws components by context and layer, the planned beside the built

componentRows

{ label: string | null; file: string | null; line: number | null; role: string | null; layer: string | null; context: string | null; referencedSpecs: string[]; usesCounts: { component: string; edges: number }[]; usedByCounts: { component: string; edges: number }[] }

Cited at

no citation recorded

A few custom elements filter, search, open and copy on a rendered page

search

sdp-search

Cited at

no citation recorded

filter

sdp-filter

Cited at

no citation recorded

expander

sdp-expander

Cited at

no citation recorded

copy

sdp-copy

Cited at

no citation recorded

stamp

sdp-stamp

Cited at

no citation recorded

A Studio build is stamped and shared from a static host

buildStamp

{ schemaVersion: string; corpusCommit: string; engine: string; builtAt: string; source?: string }

Cited at

no citation recorded

previewWorkflow

.github/workflows/studio-preview.yml

Cited at

no citation recorded

The upgrade kit shows a corpus what it could adopt

guideFile

docs/agent-surface/upgrade-guide.md

Cited at

no citation recorded

Capability adoption counts where each capability is used and where it could apply

adoptionAnswer

{ totals, capabilities, packs, specs, leftOut }

Cited at

no citation recorded

capabilityRow

{ capability, inUse, applicable, carriedBy }

Cited at

no citation recorded

packRow

{ id, members, capabilities }

Cited at

no citation recorded

specRow

{ id, packs, inUse, couldApply }

Cited at

no citation recorded

The rule-key proposal keys every unkeyed rule as a change proposal

proposalAnswer

{ scope, totals: { specs, entries, keyed, proposed, unkeyable }, proposal, unkeyable }

Cited at

no citation recorded

proposalDocument

{ "schema": "sdp-proposal/1", "base": "<commit>", "reason": "Key every rule and flow entry in <scope> so a review, a register row or an example can cite it.", "changes": [change] }

Cited at

no citation recorded

keyChange

{ "scope": ["<spec id>"], "request": "<request>", "text": "[#<key>] <entry text>", "reason": "Gives the entry the address <spec id>#rule.<key>." }

Cited at

no citation recorded

keyRequest

Add the key marker [#<key>] and one space at the start of the text of <entry> of <spec id>, at <file> line <line>, after its rule: or flow: label where it has one.

Cited at

no citation recorded

unkeyableRow

{ spec, entry, file, line, reason: "no word to coin a key from" }

Cited at

no citation recorded

Carrier reification derives the one graph

The graph records where anchored source cites an entry address

citationTable

citations?: readonly { address: string; file: string; line: number }[]

Cited at

no citation recorded

readerCitation

entryCitations: readonly { address: string; entry: string | null; resolves: boolean; reason: "malformed" | "section" | "entry" | null; file: string; line: number; anchors: readonly string[]; testAnchors: readonly string[]; claim: "inferred" }[]

Cited at

no citation recorded

citationsAnswer

{ scope, totals: { citations, citedEntries, declarations, citedDeclarations, unresolved }, entries, unresolved, findings }

Cited at

no citation recorded

entryRow

{ address, spec, pinned, line, citedBy: [{ file, line, anchors, testAnchors }] }

Cited at

no citation recorded

unresolvedRow

{ address, reason, file, line }

Cited at

no citation recorded

citationFinding

{ validatorId: "unresolved-citation", subjectId, severity, message, file, line }

Cited at

no citation recorded

A bound example runs its contract steps against a fresh world

failureMessage

"at step: " + naturalReading + "\n" + originalMessage

Cited at

no citation recorded

The build derives step and space contracts from graph examples

findingIds

contracts/undeclared-slot

Cited at

no citation recorded

contractStep

export interface ContractStep<K extends string, P extends ParamShape> { readonly kind: StepKind; readonly key: K; readonly text: string; readonly params: P; }

Cited at

no citation recorded

outcomeVariant

{ readonly kind: "<contract key>"; readonly <slot>: <type>; … }

Cited at

no citation recorded

Derived runnable modules freeze the registrar interface

registrar

export declare function registerExample<World>(adapters: RunnableExampleAdapters<World, Conditions, Outcome>): void;

Cited at

no citation recorded

adapters

interface RunnableExampleAdapters<W, C, O extends { readonly kind: string }> { readonly createWorld: (point: Partial<C>) => W; readonly invoke: (world: W, point: Partial<C>) => void | Promise<void>; readonly observe: (world: W) => O; readonly expected: (point: Partial<C>) => O; readonly assertions?: (world: W, observed: O) => void | Promise<void>; }

Cited at

no citation recorded

thenBinding

compareContractOutcome(execution, { kind: "then", key, text, params })

Cited at

no citation recorded

noMatchingThen

scenario <spec>: oracle selected "<kind>"; available Then steps: "<key>", …

Cited at

no citation recorded

Source anchors bind code without carrying intent

An open question may name who decides it, its links, a provisional reading and a re-entry trigger

Components are designed ahead of their code

A rule or flow entry may carry a key that addresses it

keyMarker

[#<key>]

Cited at

no citation recorded

exercisesAttribute

verifies: { target: <spec id>, exercises: [<key>] }

Cited at

no citation recorded

ruleAddress

spec:<id>#rule.<key>

Cited at

no citation recorded

A Model term may carry a key that addresses it

termMarker

- **<term>** — [#<key>] <definition>

Cited at

no citation recorded

markerRefusal

term key markers must be [#<lower-camel ASCII key>] followed by one space and text

Cited at

no citation recorded

repeatedKey

term key "<key>" is repeated; term keys must be unique within a Spec

Cited at

no citation recorded

missingTerm

Mention in "<spec>" at <path> points to missing entry "term.<key>" of "<target>".

Cited at

no citation recorded

termLocation

{ spec, file, entry: "term[<i>]", key?, line }

Cited at

no citation recorded

CI run records are joined to verifiers in a view

runInput

{ index: number; tool: string | null; toolVersion: string | null; specVersion: string; commit: string | null; branch: string | null; build: string | null; start: number | null; stop: number | null; summary: { tests: number; passed: number; failed: number; skipped: number; pending: number; other: number }; sameCommit: boolean | null }

Cited at

no citation recorded

runFile

{ file: string; anchors: { id: string; verifies: string[] }[]; specs: string[]; results: { input: number; name: string; suite: string | null; status: string; duration: number | null }[] }

Cited at

no citation recorded

unjoinedRow

{ input: number; name: string; filePath: string | null; status: string; reason: "noFilePath" | "noTestAnchor" }

Cited at

no citation recorded

runDiagnostic

{ input: number | null; problem: string }

Cited at

no citation recorded

runTotals

{ inputs: number; tests: number; joined: number; unjoined: number; files: number; specs: number }

Cited at

no citation recorded

The Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requests

gateMessages

AGENTS.md — the handbook does not name the roadmap Pack

Cited at

no citation recorded

Declared architecture rules are checked against anchored structure

walkAnswer

{ input: { forbidden, isolated, severity }, totals: { usesEdges, resolved, findings, unclassified }, findings, unclassified }

Cited at

no citation recorded

walkFinding

{ validatorId, subjectId, relatedId, severity, message, from, to, fromComponent, toComponent, rule }

Cited at

no citation recorded

Corpus-authored rules run on the one validation path

rulesFlag

sdp validate [root] [--exclude PATH]... [--check-clean | --watch] [--rules PATH [--params JSON | --params @PATH | --params KEY=@PATH]...]...

Cited at

no citation recorded

ruleAnswer

{ findings: [] }

Cited at

no citation recorded

ruleFinding

{ validatorId, subjectId, severity, message, relatedId?, path?, file?, line? }

Cited at

  • test/skills.test.ts:1474

corpusFinding

{ rulesFile, validatorId, subjectId, severity, message, relatedId?, path?, file?, line? }

Cited at

no citation recorded

corpusSummary

corpus rules: <errors> errors · <warnings> warnings · <failed> of <files> files failed (the corpus's own rules)

Cited at

no citation recorded

One diagnostic currency, its location composed from structured fields

summaryLine

validate: <errors> errors · <warnings> warnings (conformance + honesty over the one graph)

Cited at

no citation recorded

A corpus checks the register tokens its prose cites

registerFile

{ "tokens": [token] }

Cited at

no citation recorded

registerAnswer

{ input: { pattern, severity, uncited }, totals: { specs, citations, tokens, unknown, retired, uncited }, tokens, findings }

Cited at

no citation recorded

tokenRow

{ token, held, retired, citations, specs }

Cited at

no citation recorded

tokenFinding

{ validatorId, subjectId, relatedId, severity, message, file, path, line }

Cited at

no citation recorded

tokenMessages

<spec> cites <token>, which the register does not list

Cited at

no citation recorded

uncitedFinding

{ validatorId: "uncited-token", subjectId, severity, message }

Cited at

no citation recorded

A Spec shaped by a superseded decision warns

validatorId

conformance/superseded-decisions

Cited at

no citation recorded

family

conformance

Cited at

no citation recorded

severity

warning

Cited at

no citation recorded

message

Spec "<subjectId>" is decided by "<relatedId>", which a later decision supersedes; the chain of replacements ends at "<end>" (informative, never a gate).

Cited at

no citation recorded

closedChainMessage

Spec "<subjectId>" is decided by "<relatedId>", whose chain of replacements closes on itself through "<loop-id>", "<loop-id>" (informative, never a gate).

Cited at

no citation recorded

mixedChainMessage

Spec "<subjectId>" is decided by "<relatedId>", whose chain of replacements ends at "<end>" and also closes on itself through "<loop-id>", "<loop-id>" (informative, never a gate).

Cited at

no citation recorded

Every validator ships evidence in both directions

registries

graphValidatorIds

Cited at

no citation recorded

probeEntry

{ id: string; refusing: Probe; accepting: Probe }

Cited at

no citation recorded

auditFunction

auditValidatorEvidence(table: readonly ProbeEntry[], run: (probe: Probe) => readonly Finding[], registered: readonly string[], source: SourceScan): AuditAnswer

Cited at

no citation recorded

auditAnswer

{ unpaired: string[]; duplicatePairs: string[]; strayPairs: string[]; unregistered: string[]; unresolved: string[]; silent: string[]; overeager: string[] }

Cited at

no citation recorded

sourceScan

scanFindingIds(srcRoot: string): SourceScan

Cited at

no citation recorded

Composing (0)

Composing needs the script.