@davidorex/pi-project-workflows 0.26.0 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +5 -3
- package/dispatch-extension.ts +1 -0
- package/package.json +10 -5
- package/skills/pi-agent-dispatch/SKILL.md +138 -0
- package/skills/pi-behavior-monitors/SKILL.md +5 -5
- package/skills/pi-project-workflows/SKILL.md +7 -1
- package/skills/pi-workflows/SKILL.md +6 -6
- package/skills/pi-workflows/references/bundled-resources.md +0 -51
- package/skills/pi-context/SKILL.md +0 -684
- package/skills/pi-context/references/bundled-resources.md +0 -47
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [0.28.1] - 2026-06-03
|
|
6
|
+
|
|
7
|
+
## [0.28.0] - 2026-06-03
|
|
8
|
+
- Lockstep changes accumulating since v0.26.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch). The v0.27.0 tag is unpublished, so its bundled member changes remain unreleased here until the next publish.
|
|
9
|
+
|
|
10
|
+
## [0.26.0] - 2026-05-25
|
|
11
|
+
- Lockstep release to 0.26.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
12
|
+
|
|
13
|
+
## [0.14.6] - 2026-04-28
|
|
14
|
+
- Lockstep release to 0.14.6; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
15
|
+
|
|
16
|
+
## [0.14.4] - 2026-04-07
|
|
17
|
+
- Lockstep release to 0.14.4; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
18
|
+
|
|
19
|
+
## [0.14.2] - 2026-04-06
|
|
20
|
+
- Lockstep release to 0.14.2; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
21
|
+
|
|
22
|
+
## [0.14.1] - 2026-04-06
|
|
23
|
+
- Lockstep release to 0.14.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
24
|
+
|
|
25
|
+
## [0.13.0] - 2026-04-06
|
|
26
|
+
- Lockstep release to 0.13.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
27
|
+
|
|
28
|
+
## [0.12.0] - 2026-04-06
|
|
29
|
+
- Lockstep release to 0.12.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
30
|
+
|
|
31
|
+
## [0.11.3] - 2026-04-04
|
|
32
|
+
- Lockstep release to 0.11.3; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
33
|
+
|
|
34
|
+
## [0.11.0] - 2026-04-04
|
|
35
|
+
- Lockstep release to 0.11.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
36
|
+
|
|
37
|
+
## [0.10.5] - 2026-04-02
|
|
38
|
+
- Lockstep release to 0.10.5; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
39
|
+
|
|
40
|
+
## [0.10.3] - 2026-04-02
|
|
41
|
+
- Lockstep release to 0.10.3; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
42
|
+
|
|
43
|
+
## [0.10.2] - 2026-04-02
|
|
44
|
+
- Lockstep release to 0.10.2; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
45
|
+
|
|
46
|
+
## [0.10.1] - 2026-04-02
|
|
47
|
+
- Lockstep release to 0.10.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
48
|
+
|
|
49
|
+
## [0.10.0] - 2026-04-02
|
|
50
|
+
- Lockstep release to 0.10.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
51
|
+
|
|
52
|
+
## [0.9.2] - 2026-03-31
|
|
53
|
+
- Lockstep release to 0.9.2; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
54
|
+
|
|
55
|
+
## [0.9.1] - 2026-03-31
|
|
56
|
+
- Lockstep release to 0.9.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
57
|
+
|
|
58
|
+
## [0.9.0] - 2026-03-29
|
|
59
|
+
- Lockstep release to 0.9.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
60
|
+
|
|
61
|
+
## [0.6.1] - 2026-03-28
|
|
62
|
+
- Lockstep release to 0.6.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
63
|
+
|
|
64
|
+
## [0.5.0] - 2026-03-28
|
|
65
|
+
- Lockstep release to 0.5.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
66
|
+
|
|
67
|
+
## [0.4.1] - 2026-03-27
|
|
68
|
+
- Lockstep release to 0.4.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
69
|
+
|
|
70
|
+
## [0.4.0] - 2026-03-27
|
|
71
|
+
- Lockstep release to 0.4.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
72
|
+
|
|
73
|
+
## [0.3.4] - 2026-03-27
|
|
74
|
+
- Lockstep release to 0.3.4; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
75
|
+
|
|
76
|
+
## [0.3.2] - 2026-03-26
|
|
77
|
+
- Lockstep release to 0.3.2; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
78
|
+
|
|
79
|
+
## [0.3.1] - 2026-03-25
|
|
80
|
+
- Lockstep release to 0.3.1; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
81
|
+
|
|
82
|
+
## [0.3.0] - 2026-03-19
|
|
83
|
+
- Lockstep release to 0.3.0; see member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
|
84
|
+
|
|
85
|
+
## [0.2.0] - 2026-03-17
|
|
86
|
+
- Initial publish of the meta re-export package bundling the member Pi extensions; lockstep release to 0.2.0. See member-package changelogs (pi-context, pi-workflows, pi-behavior-monitors, pi-agent-dispatch).
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @davidorex/pi-project-workflows
|
|
2
2
|
|
|
3
|
-
Convenience meta-package that re-exports
|
|
3
|
+
Convenience meta-package that re-exports FOUR [Pi](https://github.com/badlogic/pi-mono) extensions plus the shared pi-jit-agents library. The four: pi-context (substrate), pi-workflows (orchestration), pi-behavior-monitors (classification/steering), pi-agent-dispatch (in-pi agent-as-tool dispatch + capability composition + the bounded north-star work-order loop). pi-jit-agents is a library consumed directly by pi-workflows and pi-agent-dispatch (no separate extension registration).
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,16 +8,17 @@ Convenience meta-package that re-exports three [Pi](https://github.com/badlogic/
|
|
|
8
8
|
pi install npm:@davidorex/pi-project-workflows
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
This installs the
|
|
11
|
+
This installs the five constituent packages (four Pi extensions plus the shared library):
|
|
12
12
|
- **[@davidorex/pi-context](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-context)** — schema-driven project state (typed blocks, validation, derived state)
|
|
13
13
|
- **[@davidorex/pi-jit-agents](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-jit-agents)** — agent spec compilation and in-process dispatch runtime (library, not a Pi extension)
|
|
14
14
|
- **[@davidorex/pi-workflows](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-workflows)** — workflow orchestration (YAML specs, DAG execution, checkpoint/resume)
|
|
15
15
|
- **[@davidorex/pi-behavior-monitors](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-behavior-monitors)** — behavior monitors (autonomous watchdogs, pattern classification, steering corrections)
|
|
16
|
+
- **[@davidorex/pi-agent-dispatch](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-agent-dispatch)** — in-pi agent-as-tool dispatch + capability composition + bounded work-order loop (call-agent / author-agent-spec / run-real-checks / commit-attested / author-tool-grant / run-work-order-loop; dynamic composite-loader)
|
|
16
17
|
|
|
17
18
|
## Getting Started
|
|
18
19
|
|
|
19
20
|
```
|
|
20
|
-
/context init
|
|
21
|
+
/context init <substrate-dir> # create the empty substrate skeleton (pointer + dirs only; no config/schemas/blocks)
|
|
21
22
|
/workflow init # scaffolds .workflows/ for run state
|
|
22
23
|
/context status # see derived project state
|
|
23
24
|
/workflow list # discover and run workflows
|
|
@@ -31,3 +32,4 @@ See the package READMEs for full API docs, source maps, and LLM guidance:
|
|
|
31
32
|
- [pi-jit-agents README](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-jit-agents)
|
|
32
33
|
- [pi-workflows README](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-workflows)
|
|
33
34
|
- [pi-behavior-monitors README](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-behavior-monitors)
|
|
35
|
+
- [pi-agent-dispatch README](https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-agent-dispatch)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "@davidorex/pi-agent-dispatch";
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@davidorex/pi-project-workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
4
7
|
"description": "Pi extensions for structured project state, workflow orchestration, and behavior monitoring — single install for all three",
|
|
5
8
|
"license": "MIT",
|
|
6
9
|
"author": "David Ryan",
|
|
@@ -22,15 +25,17 @@
|
|
|
22
25
|
"extensions": [
|
|
23
26
|
"./project-extension.ts",
|
|
24
27
|
"./workflows-extension.ts",
|
|
25
|
-
"./monitors-extension.ts"
|
|
28
|
+
"./monitors-extension.ts",
|
|
29
|
+
"./dispatch-extension.ts"
|
|
26
30
|
],
|
|
27
31
|
"skills": [
|
|
28
32
|
"./skills"
|
|
29
33
|
]
|
|
30
34
|
},
|
|
31
35
|
"dependencies": {
|
|
32
|
-
"@davidorex/pi-context": "^0.
|
|
33
|
-
"@davidorex/pi-workflows": "^0.
|
|
34
|
-
"@davidorex/pi-behavior-monitors": "^0.
|
|
36
|
+
"@davidorex/pi-context": "^0.28.1",
|
|
37
|
+
"@davidorex/pi-workflows": "^0.28.1",
|
|
38
|
+
"@davidorex/pi-behavior-monitors": "^0.28.1",
|
|
39
|
+
"@davidorex/pi-agent-dispatch": "^0.28.1"
|
|
35
40
|
}
|
|
36
41
|
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pi-agent-dispatch
|
|
3
|
+
description: >
|
|
4
|
+
Sibling Pi extension that registers in-pi agent-as-tool dispatch, capability
|
|
5
|
+
composition, real-check execution, attested commits, and the bounded north-star
|
|
6
|
+
work-order loop. Use when authoring agent specs, granting tool capabilities,
|
|
7
|
+
running deterministic checks, committing with writer attestation, loading
|
|
8
|
+
config-declared composite operations, or driving end-to-end work-orders through
|
|
9
|
+
their bounded retry loop.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<tools_reference>
|
|
13
|
+
<tool name="author-agent-spec">
|
|
14
|
+
Write a new .agent.yaml spec to the agents tier. Requires user authorization via interactive confirmation at the pi-dispatch auth-gate; on confirm, the verified terminal-operator identity is stamped as writer. The written file is AJV-validated against AgentSpec before persisting.
|
|
15
|
+
|
|
16
|
+
*Author a privileged JIT-agent spec — declares input, prompts, tools grant, output schema, contextBlocks.*
|
|
17
|
+
|
|
18
|
+
| Parameter | Type | Required | Description |
|
|
19
|
+
|-----------|------|----------|-------------|
|
|
20
|
+
| `name` | string | yes | Agent name (becomes <name>.agent.yaml filename + AgentSpec.name). |
|
|
21
|
+
| `spec` | unknown | yes | AgentSpec object body (will be serialized to YAML). Must conform to AgentSpec shape. |
|
|
22
|
+
| `writer` | object | yes | DispatchContext.writer payload; see pi-context/src/dispatch-context.ts for the discriminated union. |
|
|
23
|
+
</tool>
|
|
24
|
+
|
|
25
|
+
<tool name="call-agent">
|
|
26
|
+
Dispatch a privileged JIT-agent as a typed tool call. Loads the named .agent.yaml, compiles with input, composes the tool grant (intersection of caller's parentGrant and the agent's requestedGrant), and executes via pi-jit-agents executeAgent (clamp enforces child ⊆ parent at dispatch boundary).
|
|
27
|
+
|
|
28
|
+
*Dispatch a typed sub-agent with scoped capability grant.*
|
|
29
|
+
|
|
30
|
+
| Parameter | Type | Required | Description |
|
|
31
|
+
|-----------|------|----------|-------------|
|
|
32
|
+
| `spec_name` | string | yes | Name of the agent spec to load (resolves to <name>.agent.yaml in the agents tier). |
|
|
33
|
+
| `input` | unknown | yes | Typed input passed to the agent's compileAgent context. |
|
|
34
|
+
| `parent_grant` | array | no | The caller's own tool grant. Default-empty. |
|
|
35
|
+
| `requested_grant` | array | no | The grant requested for the dispatched sub-agent. Will be clamped to the intersection with parent_grant. |
|
|
36
|
+
| `max_tokens` | number | no | Max tokens for the LLM call. Defaults to 1024. |
|
|
37
|
+
</tool>
|
|
38
|
+
|
|
39
|
+
<tool name="run-real-checks">
|
|
40
|
+
Run the deterministic real-checks declared on a work-order (build/check/test exit + runtime-demo + adversarial-probe). Returns a structured RealCheckResult. NEVER LLM self-report; verdict is the actual exit code.
|
|
41
|
+
|
|
42
|
+
*Run a work-order's declared real-checks for verdict gating.*
|
|
43
|
+
|
|
44
|
+
| Parameter | Type | Required | Description |
|
|
45
|
+
|-----------|------|----------|-------------|
|
|
46
|
+
| `work_order_id` | string | yes | ID of the work-order whose real_check_criteria to run (e.g. 'WO-NNN'). |
|
|
47
|
+
| `max_check_time_ms` | number | no | Max total time per check in milliseconds. Defaults to 600000 (10 minutes). |
|
|
48
|
+
</tool>
|
|
49
|
+
|
|
50
|
+
<tool name="commit-attested">
|
|
51
|
+
Stage declared files + invoke git commit with DispatchContext writer.kind=agent attestation footer. Husky pre-commit runs as backup gate; never bypass (--no-verify forbidden per feedback_no_destructive_git_ops). The primary gate is run-real-checks called BEFORE this tool.
|
|
52
|
+
|
|
53
|
+
*Commit agent-authored work-product files with attestation footer.*
|
|
54
|
+
|
|
55
|
+
| Parameter | Type | Required | Description |
|
|
56
|
+
|-----------|------|----------|-------------|
|
|
57
|
+
| `files` | array | yes | Files to stage + commit. Empty array refused. |
|
|
58
|
+
| `message` | string | yes | Commit message body (the attestation footer is appended automatically). |
|
|
59
|
+
| `agent_id` | string | yes | Agent id for writer.kind=agent attestation (e.g. 'spec-implementer-001'). |
|
|
60
|
+
| `work_order_id` | string | no | Optional work-order id for the attestation footer. |
|
|
61
|
+
</tool>
|
|
62
|
+
|
|
63
|
+
<tool name="author-tool-grant">
|
|
64
|
+
Add or remove an entry in config.tool_operations[] or config.tool_operations_forbidden[]. Requires user authorization via interactive confirmation at the pi-dispatch auth-gate; on confirm, the verified terminal-operator identity is stamped as writer. Refuses any attempt to register a framework-forbidden wholesale token.
|
|
65
|
+
|
|
66
|
+
*Author a config tool-grant entry (operation registration or project-forbidden token).*
|
|
67
|
+
|
|
68
|
+
| Parameter | Type | Required | Description |
|
|
69
|
+
|-----------|------|----------|-------------|
|
|
70
|
+
| `target` | unknown | yes | Which config registry to mutate. |
|
|
71
|
+
| `operation` | unknown | yes | amendConfigEntry operation. |
|
|
72
|
+
| `key` | string | yes | For tool_operations: the canonical_id (must match entry.canonical_id). For tool_operations_forbidden: the token string. |
|
|
73
|
+
| `entry` | unknown | no | ToolOperationDecl object — required for target=tool_operations + operation=add. |
|
|
74
|
+
| `writer` | object | yes | DispatchContext.writer payload; see pi-context/src/dispatch-context.ts for the discriminated union. |
|
|
75
|
+
</tool>
|
|
76
|
+
|
|
77
|
+
<tool name="run-work-order-loop">
|
|
78
|
+
Execute the bounded work-order loop: dispatch target_agent (via direct pi-jit-agents library) → run-real-checks (deterministic verdict — the actual exit code, never an LLM self-report) → on-pass commit-attested → on-fail human-OK retry at the iteration boundary. Bounded iterations (default 3); human-OK gate governs retry.
|
|
79
|
+
|
|
80
|
+
*Execute the end-to-end work-order loop for a declared spec.*
|
|
81
|
+
|
|
82
|
+
| Parameter | Type | Required | Description |
|
|
83
|
+
|-----------|------|----------|-------------|
|
|
84
|
+
| `work_order_id` | string | yes | ID of the work-order to execute (loads from .project/work-orders.json schema). |
|
|
85
|
+
| `max_iterations` | number | no | Max iteration count before fail-final. Default 3. |
|
|
86
|
+
| `agent_grant` | array | no | Tool grant for the dispatched privileged agent (capability composition). Default empty. |
|
|
87
|
+
</tool>
|
|
88
|
+
|
|
89
|
+
</tools_reference>
|
|
90
|
+
|
|
91
|
+
<events>
|
|
92
|
+
`tool_call`, `tool_result`
|
|
93
|
+
</events>
|
|
94
|
+
|
|
95
|
+
<objective>
|
|
96
|
+
pi-agent-dispatch is the harness-confined orchestrator's in-pi surface. It registers Pi tools the orchestrator agent invokes to dispatch sub-agents, author specs and tool grants, run deterministic checks the executive cannot fake, commit with writer attestation, and drive bounded work-order loops. It is the sibling-consumer registration site; pi-jit-agents stays a library consumed directly by this package and by pi-workflows.
|
|
97
|
+
</objective>
|
|
98
|
+
|
|
99
|
+
<dispatch_tools>
|
|
100
|
+
| Tool | Purpose |
|
|
101
|
+
|------|---------|
|
|
102
|
+
| `call-agent` | Dispatch a declared agent spec with a composed tool grant (parent ∩ requested ∩ spec.tools). |
|
|
103
|
+
| `author-agent-spec` | Write an `.agent.yaml` spec to the substrate. Human-authorized via auth-gate confirm at the pi-dispatch layer; the verified terminal-operator identity is stamped as writer on confirm. |
|
|
104
|
+
| `run-work-order-loop` | Execute the bounded work-order loop: dispatch → run-real-checks → on-pass commit-attested → on-fail human-OK retry. |
|
|
105
|
+
</dispatch_tools>
|
|
106
|
+
|
|
107
|
+
<real_check_tools>
|
|
108
|
+
| Tool | Purpose |
|
|
109
|
+
|------|---------|
|
|
110
|
+
| `run-real-checks` | Execute declared deterministic checks (build/check/test exit codes, schema validations, git diff probes, runtime event probes). Verdict is the actual exit code, never an LLM self-report. |
|
|
111
|
+
| `commit-attested` | Stage + commit with writer-identity footer. Refuses on missing agent_id, files, or message. |
|
|
112
|
+
</real_check_tools>
|
|
113
|
+
|
|
114
|
+
<capability_authoring>
|
|
115
|
+
Tool grants are config-declared (bounded composites) and authored only via the `author-tool-grant` Pi tool, which is human-authorized at the pi-dispatch auth-gate (interactive confirmation; on confirm the verified terminal-operator identity is stamped as writer). Default grant is empty; widening goes through the auth-gate. The FORBIDDEN_WHOLESALE_OPERATIONS set blocks shipping wholesale L1 surfaces (bash, write, edit) as a single composite token; the L1 ∪ L5 forbidden union check refuses tokens that already appear on the L1 wholesale-forbidden list.
|
|
116
|
+
</capability_authoring>
|
|
117
|
+
|
|
118
|
+
<composite_loader>
|
|
119
|
+
On extension load, `composite-loader` reads the active substrate's `config.tool_operations[]` and dynamically registers each declared bounded composite as a Pi tool. Config-absent (no pointer or unbootstrapped substrate) degrades gracefully: extension still registers the 6 static tools; the absence is observed via the `extension_load_warning` TraceEntry and (when available) surfaced through `pi.ui.notify`. The substrate is the single source of truth — no parallel ungated path widens capability outside the loader.
|
|
120
|
+
</composite_loader>
|
|
121
|
+
|
|
122
|
+
<canonical_intention>
|
|
123
|
+
Anchors:
|
|
124
|
+
- Harness-confined orchestrator (positive clause: substrate-write + call-agent + author-agent-spec + run-real-checks + commit-attested + author-tool-grant + run-work-order-loop + declared composites; negative clause: NO bash/edit/write).
|
|
125
|
+
- Sibling-consumer scope; pi-jit-agents stays a library.
|
|
126
|
+
- Human-authorized authoring at the pi-dispatch auth-gate; default empty; terminal verdict = real deterministic checks.
|
|
127
|
+
- Capability composition + end-to-end work-order loop + bounded-composite vocabulary + launch-chain integration.
|
|
128
|
+
- Orchestrator uses jit-agents directly; capability composition lives in the dispatch layer.
|
|
129
|
+
</canonical_intention>
|
|
130
|
+
|
|
131
|
+
<success_criteria>
|
|
132
|
+
- 6 static tools register on every load: call-agent, author-agent-spec, author-tool-grant, run-real-checks, commit-attested, run-work-order-loop.
|
|
133
|
+
- Composite tools register from config.tool_operations[] when present; load proceeds with warning when absent.
|
|
134
|
+
- Every write-bearing tool routes through the pi-dispatch auth-gate; the verified terminal-operator identity is stamped as writer on confirm.
|
|
135
|
+
- Work-order loop honors max_iterations + human-OK retry gate + on-pass attested commit.
|
|
136
|
+
</success_criteria>
|
|
137
|
+
|
|
138
|
+
*Generated from source by `scripts/generate-skills.js` — do not edit by hand.*
|
|
@@ -95,8 +95,8 @@ See references/bundled-resources.md for full inventory.
|
|
|
95
95
|
| `tool_results` | `{tool_results}` / `{{ tool_results }}` | Tool results with tool name and error status | Last 5, truncated 2000 chars |
|
|
96
96
|
| `tool_calls` | `{tool_calls}` / `{{ tool_calls }}` | Tool calls and results interleaved | Last 20, truncated 2000 chars |
|
|
97
97
|
| `custom_messages` | `{custom_messages}` / `{{ custom_messages }}` | Custom extension messages since last user message | — |
|
|
98
|
-
| `project_vision` | `{project_vision}` / `{{ project_vision }}` |
|
|
99
|
-
| `project_conventions` | `{project_conventions}` / `{{ project_conventions }}` |
|
|
98
|
+
| `project_vision` | `{project_vision}` / `{{ project_vision }}` | <substrate-dir>/project.json vision, core_value, name | — |
|
|
99
|
+
| `project_conventions` | `{project_conventions}` / `{{ project_conventions }}` | <substrate-dir>/conformance-reference.json principle names | — |
|
|
100
100
|
| `git_status` | `{git_status}` / `{{ git_status }}` | Output of git status --porcelain | 5s timeout |
|
|
101
101
|
| `conversation_history` | `{conversation_history}` / `{{ conversation_history }}` | Prior turn summaries (user request + actions + assistant response) | 1-3 turns adaptive, 2000 char max |
|
|
102
102
|
|
|
@@ -209,7 +209,7 @@ A `.monitor.json` file conforms to `schemas/monitor.schema.json`:
|
|
|
209
209
|
"on_flag": {
|
|
210
210
|
"steer": "Fix the issue.",
|
|
211
211
|
"write": {
|
|
212
|
-
"path": "
|
|
212
|
+
"path": "<substrate-dir>/issues.json",
|
|
213
213
|
"merge": "append",
|
|
214
214
|
"array_field": "issues",
|
|
215
215
|
"template": {
|
|
@@ -475,7 +475,7 @@ acknowledgment support:
|
|
|
475
475
|
**fragility** (`message_end`, `when: has_tool_results`)
|
|
476
476
|
Watches for unaddressed fragilities after tool use — errors, warnings, or broken state the
|
|
477
477
|
agent noticed but chose not to fix. Steers with "Fix the issue you left behind." Writes
|
|
478
|
-
findings to
|
|
478
|
+
findings to `<substrate-dir>/issues.json` under `category: "fragility"`. Excludes: none. Ceiling: 5.
|
|
479
479
|
12 bundled patterns across categories: avoidance (dismiss-preexisting, not-my-change,
|
|
480
480
|
blame-environment, workaround-over-root-cause, elaborate-workaround-for-fixable),
|
|
481
481
|
error-handling (empty-catch, happy-path-only, early-return-on-unexpected,
|
|
@@ -493,7 +493,7 @@ deflection (ask-permission, qualify-yesno, counter-question).
|
|
|
493
493
|
|
|
494
494
|
**work-quality** (`command`, `when: always`)
|
|
495
495
|
On-demand work quality analysis invoked via `/work-quality`. Analyzes user request, tool
|
|
496
|
-
calls, and assistant response for quality issues. Writes findings to
|
|
496
|
+
calls, and assistant response for quality issues. Writes findings to `<substrate-dir>/issues.json`
|
|
497
497
|
under `category: "work-quality"`. Ceiling: 3.
|
|
498
498
|
11 bundled patterns across categories: methodology (trial-and-error, symptom-fix,
|
|
499
499
|
double-edit, edit-without-read, insanity-retry, no-plan), verification (no-verify),
|
|
@@ -18,7 +18,7 @@ pi install npm:@davidorex/pi-project-workflows
|
|
|
18
18
|
<extension name="@davidorex/pi-context">
|
|
19
19
|
Schema-driven project state management for Pi
|
|
20
20
|
|
|
21
|
-
**Tools:** `append-block-item`, `update-block-item`, `append-relation`, `append-block-nested-item`, `update-block-nested-item`, `remove-block-item`, `remove-block-nested-item`, `read-block-dir`, `read-block`, `write-block`, `context-status`, `context-validate`, `read-config`, `list-tools`, `read-samples-catalog`, `context-current-state`, `context-bootstrap-state`, `rename-canonical-id`, `amend-config`, `read-schema`, `write-schema`, `context-init`, `context-accept-all`, `filter-block-items`, `resolve-item-by-id`, `read-block-item`, `read-block-page`, `join-blocks`, `resolve-items-by-id`, `complete-task`, `context-validate-relations`, `context-edges-for-lens`, `context-walk-descendants`, `walk-ancestors`, `find-references`, `gather-execution-context`, `context-roadmap-load`, `context-roadmap-render`, `context-roadmap-validate`, `context-roadmap-list`
|
|
21
|
+
**Tools:** `append-block-item`, `update-block-item`, `append-relation`, `promote-item`, `append-block-nested-item`, `update-block-nested-item`, `remove-block-item`, `remove-block-nested-item`, `read-block-dir`, `read-block`, `write-block`, `context-status`, `context-validate`, `read-config`, `list-tools`, `read-samples-catalog`, `context-current-state`, `context-bootstrap-state`, `rename-canonical-id`, `amend-config`, `read-schema`, `write-schema`, `write-schema-migration`, `context-init`, `context-accept-all`, `context-switch`, `context-list`, `context-archive`, `filter-block-items`, `resolve-item-by-id`, `read-block-item`, `read-block-page`, `join-blocks`, `resolve-items-by-id`, `complete-task`, `context-validate-relations`, `context-edges-for-lens`, `context-walk-descendants`, `walk-ancestors`, `find-references`, `gather-execution-context`, `context-roadmap-load`, `context-roadmap-render`, `context-roadmap-validate`, `context-roadmap-list`
|
|
22
22
|
**Commands:** `/context`
|
|
23
23
|
</extension>
|
|
24
24
|
|
|
@@ -37,6 +37,12 @@ Behavior monitors for pi that watch agent activity and steer corrections
|
|
|
37
37
|
**Commands:** `/work-quality`, `/monitors`
|
|
38
38
|
</extension>
|
|
39
39
|
|
|
40
|
+
<extension name="@davidorex/pi-agent-dispatch">
|
|
41
|
+
In-pi agent-as-tool dispatch + capability composition extension
|
|
42
|
+
|
|
43
|
+
**Tools:** `author-agent-spec`, `call-agent`, `run-real-checks`, `commit-attested`, `author-tool-grant`, `run-work-order-loop`
|
|
44
|
+
</extension>
|
|
45
|
+
|
|
40
46
|
</included_extensions>
|
|
41
47
|
|
|
42
48
|
*Generated from source by `scripts/generate-skills.js` — do not edit by hand.*
|
|
@@ -80,7 +80,7 @@ Render a project block item by ID through its registered per-item macro. Resolve
|
|
|
80
80
|
|
|
81
81
|
| Parameter | Type | Required | Description |
|
|
82
82
|
|-----------|------|----------|-------------|
|
|
83
|
-
| `id` | string | yes | Kind-prefixed ID, e.g., DEC-
|
|
83
|
+
| `id` | string | yes | Kind-prefixed ID, e.g., DEC-NNNN / FEAT-NNN |
|
|
84
84
|
| `depth` | number | no | 0 = bare-ID refs (default), 1 = inline direct cross-references, 2+ = recurse further |
|
|
85
85
|
</tool>
|
|
86
86
|
|
|
@@ -113,7 +113,7 @@ Subcommands: `init`, `list`, `run`, `resume`, `validate`, `status`, `help`
|
|
|
113
113
|
</keyboard_shortcuts>
|
|
114
114
|
|
|
115
115
|
<bundled_resources>
|
|
116
|
-
26 agents, 15 schemas, 15 workflows
|
|
116
|
+
26 agents, 15 schemas, 15 workflows bundled.
|
|
117
117
|
See references/bundled-resources.md for full inventory.
|
|
118
118
|
</bundled_resources>
|
|
119
119
|
|
|
@@ -247,7 +247,7 @@ See references/bundled-resources.md for full inventory.
|
|
|
247
247
|
| `filter-names` | warning | Expression filters are recognized |
|
|
248
248
|
| `steptype-metadata` | error | retry/input/output declarations match step type capabilities |
|
|
249
249
|
| `inputschema-required` | error | Agent required input keys are provided by step |
|
|
250
|
-
| `contextblocks-existence` | warning | Declared context blocks exist in
|
|
250
|
+
| `contextblocks-existence` | warning | Declared context blocks exist in the substrate dir |
|
|
251
251
|
| `template-alignment` | error | Template variables match step inputs and source schemas |
|
|
252
252
|
|
|
253
253
|
</validation_vocabulary>
|
|
@@ -274,7 +274,7 @@ Workflows are discovered from three locations (first match wins):
|
|
|
274
274
|
| loop | `loop: { maxAttempts, steps }` | Repeat sub-steps until gate breaks or max reached |
|
|
275
275
|
| parallel | `parallel: { a: ..., b: ... }` | Run named sub-steps concurrently |
|
|
276
276
|
| pause | `pause: true` or `pause: "message"` | Pause execution, resumable later |
|
|
277
|
-
| block | `block: { op: read\|write\|append\|update\|remove\|… }` | Validated in-process
|
|
277
|
+
| block | `block: { op: read\|write\|append\|update\|remove\|… }` | Validated in-process substrate block I/O via the block API — no LLM, no subprocess |
|
|
278
278
|
|
|
279
279
|
`forEach: "${{ expr }}"` (iterate the step per array element) and `as:` are step MODIFIERS, not step types — they combine with any type above.
|
|
280
280
|
</step_types>
|
|
@@ -312,7 +312,7 @@ Incomplete runs (failed or paused) are detected on next invocation. If the workf
|
|
|
312
312
|
<output_validation>
|
|
313
313
|
Steps with `output.schema` validate the agent's JSON output against a JSON Schema file. Validation failure marks the step as failed.
|
|
314
314
|
|
|
315
|
-
Use `block:<name>` to reference project block schemas portably: `output.schema: block:project` resolves to
|
|
315
|
+
Use `block:<name>` to reference project block schemas portably: `output.schema: block:project` resolves to `<substrate-dir>/schemas/project.schema.json` from cwd. Works across monorepo, npm install, and user-customized schemas. Combined with `retry: { maxAttempts: 2 }`, the agent gets the schema validation error injected into its retry prompt and can self-correct.
|
|
316
316
|
</output_validation>
|
|
317
317
|
|
|
318
318
|
<retry>
|
|
@@ -327,7 +327,7 @@ After execution, the workflow result is injected into the main LLM conversation.
|
|
|
327
327
|
</completion_messages>
|
|
328
328
|
|
|
329
329
|
<artifacts>
|
|
330
|
-
Workflows can write post-completion files via the `artifacts` field. Paths may contain `${{ }}` expressions. Artifacts targeting
|
|
330
|
+
Workflows can write post-completion files via the `artifacts` field. Paths may contain `${{ }}` expressions. Artifacts targeting `<substrate-dir>/*.json` are routed through `writeBlock()` for schema validation.
|
|
331
331
|
|
|
332
332
|
Block artifact write failures are fatal — if the data doesn't conform to the block's schema, the workflow fails. Non-block artifact failures remain non-fatal (warning). On resume, all steps are preserved; only artifact processing re-runs, so fixing the schema issue or agent output and resuming avoids re-running expensive LLM steps.
|
|
333
333
|
</artifacts>
|
|
@@ -64,54 +64,3 @@
|
|
|
64
64
|
- `workflows/resumable-analysis.workflow.yaml`
|
|
65
65
|
- `workflows/self-implement.workflow.yaml`
|
|
66
66
|
- `workflows/typed-analysis.workflow.yaml`
|
|
67
|
-
|
|
68
|
-
## templates/ (48 files)
|
|
69
|
-
|
|
70
|
-
- `templates/analyzers/base-analyzer.md`
|
|
71
|
-
- `templates/analyzers/patterns-task.md`
|
|
72
|
-
- `templates/analyzers/patterns.md`
|
|
73
|
-
- `templates/analyzers/quality-task.md`
|
|
74
|
-
- `templates/analyzers/quality.md`
|
|
75
|
-
- `templates/analyzers/structure-task.md`
|
|
76
|
-
- `templates/analyzers/structure.md`
|
|
77
|
-
- `templates/architecture-designer/task.md`
|
|
78
|
-
- `templates/architecture-inferrer/task.md`
|
|
79
|
-
- `templates/audit-finding-verifier/task.md`
|
|
80
|
-
- `templates/audit-fixer/task.md`
|
|
81
|
-
- `templates/audit-results-router/task.md`
|
|
82
|
-
- `templates/decomposer/task.md`
|
|
83
|
-
- `templates/explorer/system.md`
|
|
84
|
-
- `templates/explorer/task.md`
|
|
85
|
-
- `templates/gap-identifier/task.md`
|
|
86
|
-
- `templates/gap-resolution-assessor/task.md`
|
|
87
|
-
- `templates/handoff-writer/task.md`
|
|
88
|
-
- `templates/investigator/task.md`
|
|
89
|
-
- `templates/items/architecture.md`
|
|
90
|
-
- `templates/items/conformance.md`
|
|
91
|
-
- `templates/items/conventions.md`
|
|
92
|
-
- `templates/items/decisions.md`
|
|
93
|
-
- `templates/items/domain.md`
|
|
94
|
-
- `templates/items/features.md`
|
|
95
|
-
- `templates/items/framework-gaps.md`
|
|
96
|
-
- `templates/items/issues.md`
|
|
97
|
-
- `templates/items/layer-plans.md`
|
|
98
|
-
- `templates/items/project.md`
|
|
99
|
-
- `templates/items/requirements.md`
|
|
100
|
-
- `templates/items/research.md`
|
|
101
|
-
- `templates/items/spec-reviews.md`
|
|
102
|
-
- `templates/items/tasks.md`
|
|
103
|
-
- `templates/phase-author/task.md`
|
|
104
|
-
- `templates/plan-creator/task.md`
|
|
105
|
-
- `templates/plan-decomposer/task.md`
|
|
106
|
-
- `templates/project-definer/task.md`
|
|
107
|
-
- `templates/project-inferrer/task.md`
|
|
108
|
-
- `templates/requirements-gatherer/task.md`
|
|
109
|
-
- `templates/researcher/task.md`
|
|
110
|
-
- `templates/shared/macros.md`
|
|
111
|
-
- `templates/shared/render-helpers.md`
|
|
112
|
-
- `templates/spec-implementer/task.md`
|
|
113
|
-
- `templates/synthesizer/system.md`
|
|
114
|
-
- `templates/synthesizer/task.md`
|
|
115
|
-
- `templates/task-verifier/task.md`
|
|
116
|
-
- `templates/task-worker/task.md`
|
|
117
|
-
- `templates/verifier/task.md`
|
|
@@ -1,684 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pi-context
|
|
3
|
-
description: >
|
|
4
|
-
Schema-driven project state management with typed JSON blocks, schema
|
|
5
|
-
validation, substrate config, lens views, closure-table relations, and
|
|
6
|
-
cross-block referential integrity. Use when managing .project/ blocks,
|
|
7
|
-
scaffolding project structure, installing block kinds from the packaged samples
|
|
8
|
-
catalog, validating project state, rendering lens views, or adding work items.
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
<tools_reference>
|
|
12
|
-
<tool name="append-block-item">
|
|
13
|
-
Append an item to an array in a project block file. Schema validation is automatic. Set autoId:true to allocate the next id from the block's id pattern when the item has no id.
|
|
14
|
-
|
|
15
|
-
*Append items to project blocks (issues, decisions, or any user-defined block)*
|
|
16
|
-
|
|
17
|
-
| Parameter | Type | Required | Description |
|
|
18
|
-
|-----------|------|----------|-------------|
|
|
19
|
-
| `block` | string | yes | Block name (e.g., 'issues', 'decisions') |
|
|
20
|
-
| `arrayKey` | string | yes | Array key in the block (e.g., 'issues', 'decisions') |
|
|
21
|
-
| `item` | unknown | yes | Item object to append — must conform to block schema |
|
|
22
|
-
| `autoId` | boolean | no | When true and the item has no id, allocate the next id from the block's id pattern |
|
|
23
|
-
</tool>
|
|
24
|
-
|
|
25
|
-
<tool name="update-block-item">
|
|
26
|
-
Update fields on an item in a project block array. Finds by predicate field match.
|
|
27
|
-
|
|
28
|
-
*Update items in project blocks — change status, add details, mark resolved*
|
|
29
|
-
|
|
30
|
-
| Parameter | Type | Required | Description |
|
|
31
|
-
|-----------|------|----------|-------------|
|
|
32
|
-
| `block` | string | yes | Block name (e.g., 'issues', 'decisions') |
|
|
33
|
-
| `arrayKey` | string | yes | Array key in the block |
|
|
34
|
-
| `match` | object | yes | Fields to match (e.g., { id: 'issue-123' }) |
|
|
35
|
-
| `updates` | object | yes | Fields to update (e.g., { status: 'resolved' }) |
|
|
36
|
-
</tool>
|
|
37
|
-
|
|
38
|
-
<tool name="append-relation">
|
|
39
|
-
Append a closure-table relation (edge: parent, child, relation_type, optional ordinal) to relations.json. Shape is AJV-validated; an exact-duplicate edge (same parent+child+relation_type) is a no-op. Reference integrity (endpoints resolve, relation_type registered, no cycle) is NOT checked here — run context-validate after. Creates relations.json if absent.
|
|
40
|
-
|
|
41
|
-
*Create a relation/edge between two items (parent→child under a relation_type)*
|
|
42
|
-
|
|
43
|
-
| Parameter | Type | Required | Description |
|
|
44
|
-
|-----------|------|----------|-------------|
|
|
45
|
-
| `parent` | string | yes | Canonical id (or lens bin name) of the parent endpoint |
|
|
46
|
-
| `child` | string | yes | Canonical id of the child endpoint |
|
|
47
|
-
| `relation_type` | string | yes | Registered relation_type canonical_id / hierarchy edge type / lens id |
|
|
48
|
-
| `ordinal` | integer | no | Optional sibling-ordering within (parent, relation_type) |
|
|
49
|
-
</tool>
|
|
50
|
-
|
|
51
|
-
<tool name="append-block-nested-item">
|
|
52
|
-
Append an item to a nested array on a parent-array item in a project block. Schema validation is automatic.
|
|
53
|
-
|
|
54
|
-
*Append items to nested arrays inside parent items (e.g., findings inside a review)*
|
|
55
|
-
|
|
56
|
-
| Parameter | Type | Required | Description |
|
|
57
|
-
|-----------|------|----------|-------------|
|
|
58
|
-
| `block` | string | yes | Block name (e.g., 'spec-reviews') |
|
|
59
|
-
| `arrayKey` | string | yes | Parent array key (e.g., 'reviews') |
|
|
60
|
-
| `match` | object | yes | Fields to match the parent item (e.g., { id: 'REVIEW-001' }) |
|
|
61
|
-
| `nestedKey` | string | yes | Nested array key on the matched parent (e.g., 'findings') |
|
|
62
|
-
| `item` | unknown | yes | Item object to append to the nested array — must conform to schema |
|
|
63
|
-
</tool>
|
|
64
|
-
|
|
65
|
-
<tool name="update-block-nested-item">
|
|
66
|
-
Update fields on a nested-array item inside a parent-array item in a project block. Finds parent and nested by predicate field match. Throws on parent or nested miss (mirrors update-block-item semantics).
|
|
67
|
-
|
|
68
|
-
*Update items inside nested arrays — change finding state, mark resolved*
|
|
69
|
-
|
|
70
|
-
| Parameter | Type | Required | Description |
|
|
71
|
-
|-----------|------|----------|-------------|
|
|
72
|
-
| `block` | string | yes | Block name (e.g., 'spec-reviews') |
|
|
73
|
-
| `arrayKey` | string | yes | Parent array key (e.g., 'reviews') |
|
|
74
|
-
| `match` | object | yes | Fields to match the parent item (e.g., { id: 'REVIEW-001' }) |
|
|
75
|
-
| `nestedKey` | string | yes | Nested array key on the matched parent (e.g., 'findings') |
|
|
76
|
-
| `nestedMatch` | object | yes | Fields to match the nested item (e.g., { id: 'F-001' }) |
|
|
77
|
-
| `updates` | object | yes | Fields to update on the nested item (e.g., { state: 'resolved' }) |
|
|
78
|
-
</tool>
|
|
79
|
-
|
|
80
|
-
<tool name="remove-block-item">
|
|
81
|
-
Remove items matching a predicate from a top-level array in a project block. Idempotent — returns { removed: 0 } on no match without throwing. Schema validation runs after removal.
|
|
82
|
-
|
|
83
|
-
*Remove items from project blocks — prune retracted issues, dedupe entries*
|
|
84
|
-
|
|
85
|
-
| Parameter | Type | Required | Description |
|
|
86
|
-
|-----------|------|----------|-------------|
|
|
87
|
-
| `block` | string | yes | Block name (e.g., 'issues') |
|
|
88
|
-
| `arrayKey` | string | yes | Top-level array key (e.g., 'issues') |
|
|
89
|
-
| `match` | object | yes | Fields to match (e.g., { id: 'issue-123' }) |
|
|
90
|
-
</tool>
|
|
91
|
-
|
|
92
|
-
<tool name="remove-block-nested-item">
|
|
93
|
-
Remove items matching a predicate from a nested array on a parent-array item in a project block. Throws on parent miss; returns { removed: 0 } on nested miss without throwing.
|
|
94
|
-
|
|
95
|
-
*Remove nested items — drop rejected findings, retract nested references*
|
|
96
|
-
|
|
97
|
-
| Parameter | Type | Required | Description |
|
|
98
|
-
|-----------|------|----------|-------------|
|
|
99
|
-
| `block` | string | yes | Block name (e.g., 'spec-reviews') |
|
|
100
|
-
| `arrayKey` | string | yes | Parent array key (e.g., 'reviews') |
|
|
101
|
-
| `match` | object | yes | Fields to match the parent item (e.g., { id: 'REVIEW-001' }) |
|
|
102
|
-
| `nestedKey` | string | yes | Nested array key on the matched parent (e.g., 'findings') |
|
|
103
|
-
| `nestedMatch` | object | yes | Fields to match the nested items to remove (e.g., { id: 'F-001' }) |
|
|
104
|
-
</tool>
|
|
105
|
-
|
|
106
|
-
<tool name="read-block-dir">
|
|
107
|
-
Enumerate and parse all .json files in a .project/<subdir>/ directory, returned as a sorted array. Missing directories return [].
|
|
108
|
-
|
|
109
|
-
*Enumerate project block subdirectories (phases, schemas, etc.) as parsed JSON*
|
|
110
|
-
|
|
111
|
-
| Parameter | Type | Required | Description |
|
|
112
|
-
|-----------|------|----------|-------------|
|
|
113
|
-
| `subdir` | string | yes | Subdirectory under .project/ (e.g., 'phases', 'schemas') |
|
|
114
|
-
</tool>
|
|
115
|
-
|
|
116
|
-
<tool name="read-block">
|
|
117
|
-
Read a project block file as structured JSON.
|
|
118
|
-
|
|
119
|
-
*Read a project block as structured JSON*
|
|
120
|
-
|
|
121
|
-
| Parameter | Type | Required | Description |
|
|
122
|
-
|-----------|------|----------|-------------|
|
|
123
|
-
| `block` | string | yes | Block name (e.g., 'issues', 'tasks', 'requirements') |
|
|
124
|
-
</tool>
|
|
125
|
-
|
|
126
|
-
<tool name="write-block">
|
|
127
|
-
Write or replace an entire project block with schema validation.
|
|
128
|
-
|
|
129
|
-
*Write or replace a project block with schema validation*
|
|
130
|
-
|
|
131
|
-
| Parameter | Type | Required | Description |
|
|
132
|
-
|-----------|------|----------|-------------|
|
|
133
|
-
| `block` | string | yes | Block name (e.g., 'project', 'architecture') |
|
|
134
|
-
| `data` | unknown | yes | Complete block data — must conform to block schema |
|
|
135
|
-
</tool>
|
|
136
|
-
|
|
137
|
-
<tool name="context-status">
|
|
138
|
-
Get derived context state — source metrics, block summaries, planning lifecycle status.
|
|
139
|
-
|
|
140
|
-
*Get context state — source metrics, block summaries, planning lifecycle status*
|
|
141
|
-
|
|
142
|
-
</tool>
|
|
143
|
-
|
|
144
|
-
<tool name="context-validate">
|
|
145
|
-
Validate cross-block referential integrity — check that IDs referenced across blocks exist.
|
|
146
|
-
|
|
147
|
-
*Validate cross-block referential integrity*
|
|
148
|
-
|
|
149
|
-
</tool>
|
|
150
|
-
|
|
151
|
-
<tool name="read-config">
|
|
152
|
-
Read the substrate config.json as structured JSON — vocabulary, lenses, relation_types, status_buckets, display_strings, layers, block_kinds, installed_schemas, installed_blocks.
|
|
153
|
-
|
|
154
|
-
*Read project config — vocabulary, lenses, relation_types, status_buckets*
|
|
155
|
-
|
|
156
|
-
</tool>
|
|
157
|
-
|
|
158
|
-
<tool name="list-tools">
|
|
159
|
-
List every tool bound into the current Pi session — name, description, parameter JSON-schema, and source extension — plus which tools are currently active. Self-introspection of the agent's own tool surface (all loaded extensions + builtins).
|
|
160
|
-
|
|
161
|
-
*Discover available tools — names, params, descriptions, active set*
|
|
162
|
-
|
|
163
|
-
</tool>
|
|
164
|
-
|
|
165
|
-
<tool name="read-samples-catalog">
|
|
166
|
-
Enumerate installable sample block kinds (DEC-0037 packaged view): per kind — title, description, item shape, applicable relation_types (as source/target), invariants, lenses — plus top-level relation_type/lens/invariant/layer/status_bucket registries. Package-intrinsic: reads the extension's bundled samples catalog, independent of any project. Optional `kind` returns one packaged kind.
|
|
167
|
-
|
|
168
|
-
*Discover installable sample block kinds — title, shape, relation_types, invariants, lenses*
|
|
169
|
-
|
|
170
|
-
| Parameter | Type | Required | Description |
|
|
171
|
-
|-----------|------|----------|-------------|
|
|
172
|
-
| `kind` | string | no | Filter to one block_kind canonical_id (e.g. 'tasks') |
|
|
173
|
-
</tool>
|
|
174
|
-
|
|
175
|
-
<tool name="context-current-state">
|
|
176
|
-
Derive 'where are we + what's next' purely from .project substrate — focus, in-flight tasks, ranked atomic-next actions (open framework-gaps then unblocked planned tasks), and blocked tasks. No writes; nothing hand-stored.
|
|
177
|
-
|
|
178
|
-
*Derive current project state — focus, in-flight, next actions, blocked*
|
|
179
|
-
|
|
180
|
-
</tool>
|
|
181
|
-
|
|
182
|
-
<tool name="context-bootstrap-state">
|
|
183
|
-
Derive the substrate bootstrap state for the cwd, purely from the filesystem (DEC-0040): 'no-pointer' | 'no-config' | 'not-installed' | 'ready', plus the resolved contextDir and any declared-but-unmaterialized installed assets. Unlike every other tool, this NEVER throws on an un-bootstrapped substrate — it returns 'no-pointer' so you can detect a fresh substrate and tell the human to run /context start (bootstrap is human-only). No writes.
|
|
184
|
-
|
|
185
|
-
*Derive substrate bootstrap state — no-pointer | no-config | not-installed | ready (never throws pre-bootstrap)*
|
|
186
|
-
|
|
187
|
-
</tool>
|
|
188
|
-
|
|
189
|
-
<tool name="rename-canonical-id">
|
|
190
|
-
Rename a canonical_id (kind: item | relation_type | lens | layer) from oldId to newId across all substrate surfaces that carry it as DATA — item home block + relations.json edges, or the relevant config registries. Out-of-substrate occurrences (analysis MDs, git history) are REPORTED, never rewritten. block_kind renames are unsupported (filesystem cascade). Use dryRun to preview the would-change counts without writing.
|
|
191
|
-
|
|
192
|
-
*Rename a canonical_id (item/relation_type/lens/layer) across substrate; dryRun to preview*
|
|
193
|
-
|
|
194
|
-
| Parameter | Type | Required | Description |
|
|
195
|
-
|-----------|------|----------|-------------|
|
|
196
|
-
| `kind` | string | yes | One of: item | relation_type | lens | layer |
|
|
197
|
-
| `oldId` | string | yes | Current canonical_id to rename from |
|
|
198
|
-
| `newId` | string | yes | New canonical_id to rename to |
|
|
199
|
-
| `dryRun` | boolean | no | Compute would-change counts without writing |
|
|
200
|
-
</tool>
|
|
201
|
-
|
|
202
|
-
<tool name="amend-config">
|
|
203
|
-
Scoped add / replace / remove of ONE entry in ONE config.json registry (block_kinds, relation_types, lenses, layers, invariants, status_buckets, display_strings, naming, installed_schemas, installed_blocks, hierarchy). The whole resulting config is AJV-validated (SHAPE) and op-correctness is enforced (add ⇒ key absent, replace/remove ⇒ key present). Cross-registry referential integrity (removing a still-referenced relation_type / lens / layer / block_kind) is NOT checked here — run context-validate after. dryRun previews without writing.
|
|
204
|
-
|
|
205
|
-
*Add/replace/remove one entry in a config.json registry (vocabulary, lenses, invariants, status_buckets)*
|
|
206
|
-
|
|
207
|
-
| Parameter | Type | Required | Description |
|
|
208
|
-
|-----------|------|----------|-------------|
|
|
209
|
-
| `registry` | string | yes | One of: block_kinds | relation_types | lenses | layers | invariants | status_buckets | display_strings | naming | installed_schemas | installed_blocks | hierarchy |
|
|
210
|
-
| `operation` | string | yes | add | replace | remove |
|
|
211
|
-
| `key` | string | yes | Entry key: id for keyed-array (block_kinds/relation_types/lenses/layers/invariants), map key for map (status_buckets/display_strings/naming), the string value for string-array (installed_schemas/installed_blocks), or a JSON {parent_block, child_block, relation_type} for hierarchy |
|
|
212
|
-
| `entry` | unknown | no | Entry payload: object for keyed-array/hierarchy, string for map value; omit for remove. For keyed-array its id field must equal key; for string-array (when given) it must equal key |
|
|
213
|
-
| `dryRun` | boolean | no | Preview the op without writing config.json |
|
|
214
|
-
</tool>
|
|
215
|
-
|
|
216
|
-
<tool name="read-schema">
|
|
217
|
-
Read a substrate schema by name as parsed JSON. Returns null when the schema file is absent.
|
|
218
|
-
|
|
219
|
-
*Read a block schema as structured JSON*
|
|
220
|
-
|
|
221
|
-
| Parameter | Type | Required | Description |
|
|
222
|
-
|-----------|------|----------|-------------|
|
|
223
|
-
| `schemaName` | string | yes | Schema name without extension (e.g., 'tasks', 'decisions', 'issues') |
|
|
224
|
-
</tool>
|
|
225
|
-
|
|
226
|
-
<tool name="write-schema">
|
|
227
|
-
Create or replace a substrate block-kind JSON Schema. operation 'create' requires the schema absent; 'replace' requires it present. The body is AJV draft-07 meta-validated before an atomic write. CAVEAT: a 'replace' that changes the schema's version does NOT migrate existing block items — read-time validateBlockWithMigration throws a version mismatch until a code-level MigrationFn is registered (no tool surface for that). Registering the block_kind that points at this schema is a separate step (amend-config block_kinds).
|
|
228
|
-
|
|
229
|
-
*Create or replace a block-kind JSON Schema (meta-validated, atomic)*
|
|
230
|
-
|
|
231
|
-
| Parameter | Type | Required | Description |
|
|
232
|
-
|-----------|------|----------|-------------|
|
|
233
|
-
| `operation` | string | yes | create | replace |
|
|
234
|
-
| `schemaName` | string | yes | Schema name without extension (e.g., 'tasks') |
|
|
235
|
-
| `schema` | unknown | yes | The whole JSON Schema object (draft-07). Accepts a JSON string. |
|
|
236
|
-
| `dryRun` | boolean | no | Meta-validate without writing |
|
|
237
|
-
</tool>
|
|
238
|
-
|
|
239
|
-
<tool name="context-init">
|
|
240
|
-
Initialize the substrate dir (bootstrap pointer + dirs only; run accept-all + install to populate).
|
|
241
|
-
|
|
242
|
-
*Initialize the substrate dir (bootstrap pointer + dirs only; run accept-all + install to populate)*
|
|
243
|
-
|
|
244
|
-
| Parameter | Type | Required | Description |
|
|
245
|
-
|-----------|------|----------|-------------|
|
|
246
|
-
| `contextDir` | string | yes | Substrate dir name (e.g. .project). Required per DEC-0015 — no default. |
|
|
247
|
-
</tool>
|
|
248
|
-
|
|
249
|
-
<tool name="context-accept-all">
|
|
250
|
-
Adopt the canonical packaged conception (samples/conception.json) as this substrate's config.json (accept-all). Writes config only — run install after. Idempotent: never overwrites an existing config.
|
|
251
|
-
|
|
252
|
-
*Adopt the canonical conception as config (accept-all)*
|
|
253
|
-
|
|
254
|
-
</tool>
|
|
255
|
-
|
|
256
|
-
<tool name="filter-block-items">
|
|
257
|
-
Filter the array items of a block by a single-field predicate (eq / neq / in / matches). Discovers the single top-level array property in the block; items missing the predicate field are never matched. Wraps the canonical readBlock + caller-side filter into one queryable surface; never mutates the block.
|
|
258
|
-
|
|
259
|
-
*Filter a block's items by a predicate — eq / neq / in / matches against a single field*
|
|
260
|
-
|
|
261
|
-
| Parameter | Type | Required | Description |
|
|
262
|
-
|-----------|------|----------|-------------|
|
|
263
|
-
| `block` | string | yes | Block name (e.g., 'tasks', 'decisions', 'framework-gaps', 'context-contracts') |
|
|
264
|
-
| `field` | string | yes | Item field to test (e.g., 'status', 'priority', 'id') |
|
|
265
|
-
| `op` | unknown | yes | Comparison operator: eq (===), neq (!==), in (value is array, item[field] in it), matches (regexp test on string) |
|
|
266
|
-
| `value` | unknown | yes | Comparison value — scalar for eq/neq, array for in, regexp pattern string for matches |
|
|
267
|
-
</tool>
|
|
268
|
-
|
|
269
|
-
<tool name="resolve-item-by-id">
|
|
270
|
-
Look up the block, array key, and item payload for a given ID across all .project/ blocks. Returns null when no item matches. Mirrors the resolveItemById SDK function and shares its prefix-vs-block invariant — IDs whose prefix maps to a known block but live elsewhere throw at index-build time.
|
|
271
|
-
|
|
272
|
-
*Resolve a kind-prefixed ID (DEC-/FEAT-/FGAP-/issue-/REQ-/TASK-/etc.) to its owning block and item*
|
|
273
|
-
|
|
274
|
-
| Parameter | Type | Required | Description |
|
|
275
|
-
|-----------|------|----------|-------------|
|
|
276
|
-
| `id` | string | yes | Kind-prefixed ID, e.g., DEC-0001 / FEAT-001 / FGAP-003 / issue-064 |
|
|
277
|
-
</tool>
|
|
278
|
-
|
|
279
|
-
<tool name="read-block-item">
|
|
280
|
-
Read a single item from a named block by its id — returns the item or null. Block-scoped (unlike resolve-item-by-id, which searches all blocks by kind-prefixed id). Avoids fetching a whole large block to get one item.
|
|
281
|
-
|
|
282
|
-
*Read one item from a block by id (block-scoped; null if absent)*
|
|
283
|
-
|
|
284
|
-
| Parameter | Type | Required | Description |
|
|
285
|
-
|-----------|------|----------|-------------|
|
|
286
|
-
| `block` | string | yes | Block name (e.g., 'tasks', 'decisions', 'framework-gaps') |
|
|
287
|
-
| `id` | string | yes | Item id within the block (e.g., 'TASK-001') |
|
|
288
|
-
</tool>
|
|
289
|
-
|
|
290
|
-
<tool name="read-block-page">
|
|
291
|
-
Paginate a block's items: returns { items, total, hasMore }. offset default 0, limit default 50. Use for blocks too large to fetch whole (past the 50KB read-block cap). total is the full item count; hasMore signals another page.
|
|
292
|
-
|
|
293
|
-
*Paginate a block's items — offset + limit; returns {items,total,hasMore}*
|
|
294
|
-
|
|
295
|
-
| Parameter | Type | Required | Description |
|
|
296
|
-
|-----------|------|----------|-------------|
|
|
297
|
-
| `block` | string | yes | Block name (e.g., 'framework-gaps', 'decisions', 'issues') |
|
|
298
|
-
| `offset` | integer | no | Start index (default 0) |
|
|
299
|
-
| `limit` | integer | no | Max items to return (default 50) |
|
|
300
|
-
</tool>
|
|
301
|
-
|
|
302
|
-
<tool name="join-blocks">
|
|
303
|
-
Join two blocks in one call (FGAP-043). EDGE mode: pass `relationType` — pairs left items with right-block items connected by that relations.json edge (`leftEndpoint` parent|child, default parent). FIELD mode: pass `leftField`+`rightField` — pairs where left[leftField] === right[rightField]. Optional left pre-filter via where{Field,Op,Value}. Returns [{left, right:[]}] (right always an array; one-to-many). Use instead of N+1 read-block + resolve calls.
|
|
304
|
-
|
|
305
|
-
*Join two blocks in one call — by relation edge or shared field; returns {left,right[]} pairs*
|
|
306
|
-
|
|
307
|
-
| Parameter | Type | Required | Description |
|
|
308
|
-
|-----------|------|----------|-------------|
|
|
309
|
-
| `leftBlock` | string | yes | Left block name (e.g., 'tasks') |
|
|
310
|
-
| `rightBlock` | string | yes | Right block name (e.g., 'verification') |
|
|
311
|
-
| `relationType` | string | no | Edge mode: relations.json relation_type |
|
|
312
|
-
| `leftField` | string | no | Field mode: left item field |
|
|
313
|
-
| `rightField` | string | no | Field mode: right item field |
|
|
314
|
-
| `leftEndpoint` | unknown | no | Edge mode: is the left item the edge parent (default) or child |
|
|
315
|
-
| `whereField` | string | no | Optional left pre-filter field |
|
|
316
|
-
| `whereOp` | unknown | no | |
|
|
317
|
-
| `whereValue` | unknown | no | Optional left pre-filter value |
|
|
318
|
-
</tool>
|
|
319
|
-
|
|
320
|
-
<tool name="resolve-items-by-id">
|
|
321
|
-
Bulk variant of resolve-item-by-id — resolve N kind-prefixed ids against a single buildIdIndex traversal. Returns an object mapping each input id to its ItemLocation (block / arrayKey / item) or null when not found. Coexists with the singular resolve-item-by-id tool; bulk collapses the N×singular-call pattern for callers resolving multiple ids in one render pass.
|
|
322
|
-
|
|
323
|
-
*Resolve a batch of kind-prefixed ids (DEC-/FGAP-/TASK-/issue-/REQ-/...) in one call*
|
|
324
|
-
|
|
325
|
-
| Parameter | Type | Required | Description |
|
|
326
|
-
|-----------|------|----------|-------------|
|
|
327
|
-
| `ids` | array | yes | Array of kind-prefixed ids (DEC-/FGAP-/TASK-/issue-/REQ-/...) to resolve in one call |
|
|
328
|
-
</tool>
|
|
329
|
-
|
|
330
|
-
<tool name="complete-task">
|
|
331
|
-
Complete a task with verification gate — requires a passing verification entry targeting the task.
|
|
332
|
-
|
|
333
|
-
*Complete a task — gates on passing verification before updating status*
|
|
334
|
-
|
|
335
|
-
| Parameter | Type | Required | Description |
|
|
336
|
-
|-----------|------|----------|-------------|
|
|
337
|
-
| `taskId` | string | yes | Task ID to complete |
|
|
338
|
-
| `verificationId` | string | yes | Verification entry ID (must target this task with status 'passed') |
|
|
339
|
-
</tool>
|
|
340
|
-
|
|
341
|
-
<tool name="context-validate-relations">
|
|
342
|
-
Validate substrate relations.json edges against config-declared lenses + hierarchy + relation_types and the cross-block id index. Returns SubstrateValidationResult with status (clean/warnings/invalid) and per-issue diagnostics.
|
|
343
|
-
|
|
344
|
-
*Validate substrate relations against config + items*
|
|
345
|
-
|
|
346
|
-
</tool>
|
|
347
|
-
|
|
348
|
-
<tool name="context-edges-for-lens">
|
|
349
|
-
Materialize the Edge[] for a named lens — synthetic edges from derived_from_field for auto-derived lenses; authored edges filtered by relation_type for hand-curated lenses; unioned items from composition members for kind=composition lenses.
|
|
350
|
-
|
|
351
|
-
*Materialize edges for a named lens (auto-derived or hand-curated)*
|
|
352
|
-
|
|
353
|
-
| Parameter | Type | Required | Description |
|
|
354
|
-
|-----------|------|----------|-------------|
|
|
355
|
-
| `lensId` | string | yes | Lens id from config.lenses[].id |
|
|
356
|
-
</tool>
|
|
357
|
-
|
|
358
|
-
<tool name="context-walk-descendants">
|
|
359
|
-
Walk closure-table descendants of a parent id under a given relation_type. Returns string[] of descendant ids (may be empty if no children or relations.json absent).
|
|
360
|
-
|
|
361
|
-
*Walk closure-table descendants under a relation_type*
|
|
362
|
-
|
|
363
|
-
| Parameter | Type | Required | Description |
|
|
364
|
-
|-----------|------|----------|-------------|
|
|
365
|
-
| `parentId` | string | yes | Parent id (canonical id or lens bin name) |
|
|
366
|
-
| `relationType` | string | yes | Relation type from config.relation_types[].canonical_id |
|
|
367
|
-
</tool>
|
|
368
|
-
|
|
369
|
-
<tool name="walk-ancestors">
|
|
370
|
-
Walk closure-table ancestors of an item id under a given relation_type — reverse-direction counterpart to context-walk-descendants. Returns string[] of ancestor ids (may be empty if no parents or relations.json absent).
|
|
371
|
-
|
|
372
|
-
*Walk closure-table ancestors under a relation_type*
|
|
373
|
-
|
|
374
|
-
| Parameter | Type | Required | Description |
|
|
375
|
-
|-----------|------|----------|-------------|
|
|
376
|
-
| `itemId` | string | yes | Child item id whose ancestors are sought |
|
|
377
|
-
| `relationType` | string | yes | Relation type from config.relation_types[].canonical_id |
|
|
378
|
-
</tool>
|
|
379
|
-
|
|
380
|
-
<tool name="find-references">
|
|
381
|
-
Find all closure-table edges incident on an item id (inbound, outbound, or both). Returns Edge[] preserving relation_type + ordinal per record — edge-level view, not the id-chain projection that walk-ancestors / context-walk-descendants emit.
|
|
382
|
-
|
|
383
|
-
*Find closure-table edges incident on an item id*
|
|
384
|
-
|
|
385
|
-
| Parameter | Type | Required | Description |
|
|
386
|
-
|-----------|------|----------|-------------|
|
|
387
|
-
| `itemId` | string | yes | Item id whose incident edges are sought |
|
|
388
|
-
| `direction` | unknown | no | inbound: edges where child === itemId; outbound: edges where parent === itemId; both: union (default). |
|
|
389
|
-
</tool>
|
|
390
|
-
|
|
391
|
-
<tool name="gather-execution-context">
|
|
392
|
-
Compose a ContextBundle for a work-unit by reading its context-contract (by unit_kind) and walking declared relation_types bidirectionally per direction semantic. Returns unit + perRelationType buckets of resolved items + traversal_depth + scoped_at. Per DEC-0017 substrate primitive serving harness-confined dispatch.
|
|
393
|
-
|
|
394
|
-
*Compose ContextBundle for unit + context-contract-declared bundle_relation_types*
|
|
395
|
-
|
|
396
|
-
| Parameter | Type | Required | Description |
|
|
397
|
-
|-----------|------|----------|-------------|
|
|
398
|
-
| `unitId` | string | yes | Work-unit id (e.g. TASK-NNN / DEC-NNNN / FGAP-NNN) |
|
|
399
|
-
| `kind` | string | yes | Unit-kind type tag (e.g. 'task', 'decision', 'verification') matching a context-contract entry's unit_kind |
|
|
400
|
-
| `maxDepth` | integer | no | Override per-relation-type max_depth via Math.min against each spec.max_depth |
|
|
401
|
-
</tool>
|
|
402
|
-
|
|
403
|
-
<tool name="context-roadmap-load">
|
|
404
|
-
Load a roadmap by id and return the materialized RoadmapView (phases, lens-views, status rollup, milestone resolution, scoped phase_depends_on edges, topo-ordered phaseOrder + cycles). Per DEC-0012 phase ordering lives in relations.json with relation_type='phase_depends_on'.
|
|
405
|
-
|
|
406
|
-
*Load a roadmap by id*
|
|
407
|
-
|
|
408
|
-
| Parameter | Type | Required | Description |
|
|
409
|
-
|-----------|------|----------|-------------|
|
|
410
|
-
| `roadmapId` | string | yes | ROADMAP-NNN id from <config.root>/roadmap.json |
|
|
411
|
-
</tool>
|
|
412
|
-
|
|
413
|
-
<tool name="context-roadmap-render">
|
|
414
|
-
Render a roadmap by id as pure-textual markdown — phase order list, per-phase adjacency lines (sourced from view.edges, alphabetically sorted), status rollup counts, milestone resolution, exit criteria. NO mermaid / graph syntax: per-phase **Depends on:** lines come strictly from authored phase_depends_on edges scoped to in-roadmap phases.
|
|
415
|
-
|
|
416
|
-
*Render a roadmap as markdown*
|
|
417
|
-
|
|
418
|
-
| Parameter | Type | Required | Description |
|
|
419
|
-
|-----------|------|----------|-------------|
|
|
420
|
-
| `roadmapId` | string | yes | ROADMAP-NNN id from <config.root>/roadmap.json |
|
|
421
|
-
</tool>
|
|
422
|
-
|
|
423
|
-
<tool name="context-roadmap-validate">
|
|
424
|
-
Validate every roadmap × phase × milestone in <config.root>/roadmap.json. Codes: roadmap_lens_missing, roadmap_phase_dep_missing, roadmap_phase_cycle, roadmap_composition_cycle, roadmap_milestone_evidence_block_missing, roadmap_milestone_query_invalid, roadmap_status_unknown_value. Display strings flow through config.display_strings (pi-context divergence). Optional roadmapId filter restricts issue list to a single roadmap.
|
|
425
|
-
|
|
426
|
-
*Validate roadmaps*
|
|
427
|
-
|
|
428
|
-
| Parameter | Type | Required | Description |
|
|
429
|
-
|-----------|------|----------|-------------|
|
|
430
|
-
| `roadmapId` | string | no | Filter to issues matching this roadmap_id (omit for full-project validation) |
|
|
431
|
-
</tool>
|
|
432
|
-
|
|
433
|
-
<tool name="context-roadmap-list">
|
|
434
|
-
List every roadmap in <config.root>/roadmap.json with id, title, optional status, and phase count. Returns [] when roadmap.json absent (opt-in block; absence is the truthful answer).
|
|
435
|
-
|
|
436
|
-
*List roadmaps*
|
|
437
|
-
|
|
438
|
-
</tool>
|
|
439
|
-
|
|
440
|
-
</tools_reference>
|
|
441
|
-
|
|
442
|
-
<commands_reference>
|
|
443
|
-
<command name="/context">
|
|
444
|
-
Context state management
|
|
445
|
-
|
|
446
|
-
Subcommands: `init`, `install`, `accept-all`, `view`, `lens-curate`, `roadmap-list`, `roadmap-view`, `roadmap-validate`, `status`, `add-work`, `validate`, `help`
|
|
447
|
-
</command>
|
|
448
|
-
|
|
449
|
-
</commands_reference>
|
|
450
|
-
|
|
451
|
-
<events>
|
|
452
|
-
`session_start`
|
|
453
|
-
</events>
|
|
454
|
-
|
|
455
|
-
<bundled_resources>
|
|
456
|
-
9 schemas, 31 samples bundled.
|
|
457
|
-
See references/bundled-resources.md for full inventory.
|
|
458
|
-
</bundled_resources>
|
|
459
|
-
|
|
460
|
-
<installable_blocks>
|
|
461
|
-
|
|
462
|
-
Names valid for the `installed_blocks` array in `.project/config.json`. Install with `/context install <block>`.
|
|
463
|
-
|
|
464
|
-
| Block | Source File |
|
|
465
|
-
|-------|-------------|
|
|
466
|
-
| `decisions` | `samples/blocks/decisions.json` |
|
|
467
|
-
| `framework-gaps` | `samples/blocks/framework-gaps.json` |
|
|
468
|
-
| `tasks` | `samples/blocks/tasks.json` |
|
|
469
|
-
| `verification` | `samples/blocks/verification.json` |
|
|
470
|
-
| `issues` | `samples/blocks/issues.json` |
|
|
471
|
-
| `features` | `samples/blocks/features.json` |
|
|
472
|
-
| `research` | `samples/blocks/research.json` |
|
|
473
|
-
| `rationale` | `samples/blocks/rationale.json` |
|
|
474
|
-
| `spec-reviews` | `samples/blocks/spec-reviews.json` |
|
|
475
|
-
| `layer-plans` | `samples/blocks/layer-plans.json` |
|
|
476
|
-
| `requirements` | `samples/blocks/requirements.json` |
|
|
477
|
-
| `conventions` | `samples/blocks/conventions.json` |
|
|
478
|
-
| `context-contracts` | `samples/blocks/context-contracts.json` |
|
|
479
|
-
| `phase` | `samples/blocks/phase.json` |
|
|
480
|
-
| `story` | `samples/blocks/story.json` |
|
|
481
|
-
|
|
482
|
-
</installable_blocks>
|
|
483
|
-
|
|
484
|
-
<installable_schemas>
|
|
485
|
-
|
|
486
|
-
Names valid for the `installed_schemas` array in `.project/config.json`. Schemas back block validation; install with `/context install <schema>`.
|
|
487
|
-
|
|
488
|
-
| Schema | Source File |
|
|
489
|
-
|--------|-------------|
|
|
490
|
-
| `decisions` | `samples/schemas/decisions.schema.json` |
|
|
491
|
-
| `framework-gaps` | `samples/schemas/framework-gaps.schema.json` |
|
|
492
|
-
| `tasks` | `samples/schemas/tasks.schema.json` |
|
|
493
|
-
| `verification` | `samples/schemas/verification.schema.json` |
|
|
494
|
-
| `issues` | `samples/schemas/issues.schema.json` |
|
|
495
|
-
| `features` | `samples/schemas/features.schema.json` |
|
|
496
|
-
| `research` | `samples/schemas/research.schema.json` |
|
|
497
|
-
| `rationale` | `samples/schemas/rationale.schema.json` |
|
|
498
|
-
| `spec-reviews` | `samples/schemas/spec-reviews.schema.json` |
|
|
499
|
-
| `layer-plans` | `samples/schemas/layer-plans.schema.json` |
|
|
500
|
-
| `requirements` | `samples/schemas/requirements.schema.json` |
|
|
501
|
-
| `conventions` | `samples/schemas/conventions.schema.json` |
|
|
502
|
-
| `context-contracts` | `samples/schemas/context-contracts.schema.json` |
|
|
503
|
-
| `phase` | `samples/schemas/phase.schema.json` |
|
|
504
|
-
| `story` | `samples/schemas/story.schema.json` |
|
|
505
|
-
|
|
506
|
-
</installable_schemas>
|
|
507
|
-
|
|
508
|
-
<planning_vocabulary>
|
|
509
|
-
|
|
510
|
-
**Block Types:**
|
|
511
|
-
|
|
512
|
-
| Block | Title | Array Key | Item Fields |
|
|
513
|
-
|-------|-------|-----------|-------------|
|
|
514
|
-
| `decisions` | Decisions | `decisions` | id, title, status (string (open|enacted|superseded)), context, decision, options_considered? (array), consequences (array), references? (array), created_by, created_at, enacted_by?, enacted_at? |
|
|
515
|
-
| `framework-gaps` | Framework Gaps | `gaps` | id, title, status (string (identified|accepted|in-progress|closed|wontfix)), priority? (string (P0|P1|P2|P3)), package, layer? (string (L1|L2|L3|L4|L5)), description, evidence (array), impact, canonical_vocabulary?, proposed_resolution, created_by, created_at, closed_by?, closed_at? |
|
|
516
|
-
| `tasks` | Tasks | `tasks` | id, description, status (string (planned|in-progress|completed|blocked|cancelled)), files? (array), acceptance_criteria? (array), assigned_agent?, notes? |
|
|
517
|
-
| `verification` | Verification | `verifications` | id, status (string (passed|failed|partial|skipped)), method (string (command|inspect|test)), evidence?, timestamp?, criteria_results? (array) |
|
|
518
|
-
| `issues` | Issues | `issues` | id, title, body, location, status (string (open|resolved|deferred)), category (string (primitive|issue|cleanup|capability|composition)), priority (string (low|medium|high|critical)), package, source? (string (human|agent|monitor|workflow)), resolved_by? |
|
|
519
|
-
| `features` | Features | `features` | id, title, status (string (proposed|approved|in-progress|in-review|complete|blocked|cancelled)), layer (string (L1|L2|L3|L4|L5)), description, motivation?, acceptance_criteria (array), created_by, created_at, modified_by?, modified_at?, approved_by?, approved_at? |
|
|
520
|
-
| `research` | Research | `research` | id, title, status (string (planned|in-progress|complete|stale|superseded|revised)), layer (string (L1|L2|L3|L4|L5)), type (string (investigative|comparative|empirical|historical|audit|landscape|feasibility|curation)), question, method, scope? (array), findings_summary, findings_document?, grounding? (object), grounded_at?, stale_conditions? (array), citations? (array), conducted_by?, conducted_at?, created_by, created_at, modified_by?, modified_at? |
|
|
521
|
-
| `rationale` | Design Rationale | `rationales` | id, title, narrative, phase? (integer) |
|
|
522
|
-
| `spec-reviews` | Spec Reviews | `reviews` | id, target, target_revision?, reviewer?, status (string (not-started|in-progress|complete|abandoned)), scope? (array), method?, clean? (boolean), created_by, created_at, completed_at? |
|
|
523
|
-
| `layer-plans` | Layer Restructure Plans | `plans` | id, title, status (string (draft|proposed|decided|in-progress|complete|abandoned)), model, description?, layers (array), migration_phases (array), created_by, created_at |
|
|
524
|
-
| `requirements` | Requirements | `requirements` | id, description, type (string (functional|non-functional|constraint|integration)), status (string (proposed|accepted|deferred|implemented|verified)), priority (string (must|should|could|wont)), acceptance_criteria? (array), source? (string (human|agent|analysis)) |
|
|
525
|
-
| `conventions` | Conventions | `rules` | id, description, enforcement (string (lint|test|review|manual)), severity (string (error|warning|info)) |
|
|
526
|
-
| `context-contracts` | Context contracts | `contracts` | id, unit_kind, bundle_relation_types (array), description?, notes?, created_by, created_at, modified_by?, modified_at? |
|
|
527
|
-
| `phase` | Phases | `phases` | id, name, intent, goal?, status (string (planned|in-progress|completed)), success_criteria? (array), specs? (array), artifacts_produced? (array) |
|
|
528
|
-
| `story` | Stories | `stories` | id, title, status (string (proposed|ready|in-progress|in-review|complete|blocked)), description?, acceptance_criteria? (array), created_by?, created_at?, modified_by?, modified_at? |
|
|
529
|
-
|
|
530
|
-
**Status Enums:**
|
|
531
|
-
|
|
532
|
-
| Block | Field | Values |
|
|
533
|
-
|-------|-------|--------|
|
|
534
|
-
| `decisions` | `status` | open, enacted, superseded |
|
|
535
|
-
| `framework-gaps` | `status` | identified, accepted, in-progress, closed, wontfix |
|
|
536
|
-
| `framework-gaps` | `priority` | P0, P1, P2, P3 |
|
|
537
|
-
| `framework-gaps` | `layer` | L1, L2, L3, L4, L5 |
|
|
538
|
-
| `tasks` | `status` | planned, in-progress, completed, blocked, cancelled |
|
|
539
|
-
| `verification` | `status` | passed, failed, partial, skipped |
|
|
540
|
-
| `verification` | `method` | command, inspect, test |
|
|
541
|
-
| `issues` | `status` | open, resolved, deferred |
|
|
542
|
-
| `issues` | `category` | primitive, issue, cleanup, capability, composition |
|
|
543
|
-
| `issues` | `priority` | low, medium, high, critical |
|
|
544
|
-
| `issues` | `source` | human, agent, monitor, workflow |
|
|
545
|
-
| `features` | `status` | proposed, approved, in-progress, in-review, complete, blocked, cancelled |
|
|
546
|
-
| `features` | `layer` | L1, L2, L3, L4, L5 |
|
|
547
|
-
| `research` | `status` | planned, in-progress, complete, stale, superseded, revised |
|
|
548
|
-
| `research` | `layer` | L1, L2, L3, L4, L5 |
|
|
549
|
-
| `research` | `type` | investigative, comparative, empirical, historical, audit, landscape, feasibility, curation |
|
|
550
|
-
| `spec-reviews` | `status` | not-started, in-progress, complete, abandoned |
|
|
551
|
-
| `layer-plans` | `status` | draft, proposed, decided, in-progress, complete, abandoned |
|
|
552
|
-
| `requirements` | `type` | functional, non-functional, constraint, integration |
|
|
553
|
-
| `requirements` | `status` | proposed, accepted, deferred, implemented, verified |
|
|
554
|
-
| `requirements` | `priority` | must, should, could, wont |
|
|
555
|
-
| `requirements` | `source` | human, agent, analysis |
|
|
556
|
-
| `conventions` | `enforcement` | lint, test, review, manual |
|
|
557
|
-
| `conventions` | `severity` | error, warning, info |
|
|
558
|
-
| `phase` | `status` | planned, in-progress, completed |
|
|
559
|
-
| `story` | `status` | proposed, ready, in-progress, in-review, complete, blocked |
|
|
560
|
-
|
|
561
|
-
</planning_vocabulary>
|
|
562
|
-
|
|
563
|
-
<objective>
|
|
564
|
-
pi-context manages structured project state in `.project/` — a directory of JSON block files validated against schemas. The substrate (config + lenses + closure-table relations) is degree-zero state that defines where the rest lives and how items group into views.
|
|
565
|
-
</objective>
|
|
566
|
-
|
|
567
|
-
<block_files>
|
|
568
|
-
Blocks are JSON files under the substrate root (e.g., `gaps.json`, `decisions.json`). Each block has a corresponding schema in `<root>/schemas/`. When you write to a block via the tools, the data is validated against its schema before persisting. Writes are atomic (tmp file + rename) and serialised per block via `withBlockLock`. The substrate root is the dir chosen at init (recorded in the `.pi-context.json` bootstrap pointer) and written to `config.json`'s `root` field by `/context accept-all`; the framework ships no default (DEC-0015). block-api routes through `resolveContextDir(cwd)` — which resolves `config.root` when set and otherwise falls back to the pointer — so a relocated root reaches every read/write site.
|
|
569
|
-
</block_files>
|
|
570
|
-
|
|
571
|
-
<schema_validation>
|
|
572
|
-
Every block write validates against `<root>/schemas/<blockname>.schema.json`. If the schema file doesn't exist, writes proceed without validation. Validation errors include the specific JSON Schema violations.
|
|
573
|
-
</schema_validation>
|
|
574
|
-
|
|
575
|
-
<context_init>
|
|
576
|
-
`/context init <dir>` creates the substrate skeleton: the `.pi-context.json` bootstrap pointer (declaring the substrate-dir name per DEC-0015) plus the substrate root and its `schemas/` directory. Nothing is imposed — no `config.json`, no schemas, and no starter blocks are written (DEC-0011 ship-no-defaults). Idempotent: re-running preserves existing dirs. Populate the substrate next with `/context accept-all` (adopt the canonical conception) followed by `/context install`.
|
|
577
|
-
</context_init>
|
|
578
|
-
|
|
579
|
-
<context_accept_all>
|
|
580
|
-
`/context accept-all` adopts the package's canonical packaged conception (`samples/conception.json`) as the substrate's `config.json` — the full vocabulary (`block_kinds`, `relation_types`, `lenses`, `invariants`) plus the `installed_schemas` / `installed_blocks` manifest — with `root` set to the actual substrate dir. It writes `config.json` only (run `/context install` after to materialize the schemas + starter blocks) and is idempotent: it never overwrites an existing `config.json` (offer, don't impose). This is the accept-all path; per-entry step-through curation is a separate surface.
|
|
581
|
-
</context_accept_all>
|
|
582
|
-
|
|
583
|
-
<context_install>
|
|
584
|
-
`/context install` reconciles the substrate against the `installed_schemas` and `installed_blocks` lists declared in `config.json`. For each declared name it copies the matching asset from the package-shipped samples catalog (`samples/schemas/` for schemas, `samples/blocks/` for starter blocks) into the substrate. Default behavior is skip-if-exists (preserves user edits); pass `--update` to overwrite and report the asset as `updated`. Sources missing from the catalog are reported as `notFound`. Empty install lists are not an error — the result is a clean no-op message instructing the user to edit `config.json`.
|
|
585
|
-
|
|
586
|
-
The installable catalog IS the packaged conception (`samples/conception.json`): its `block_kinds` enumerate the available kinds, each carrying its schema (`samples/schemas/`) and starter block (`samples/blocks/`). The generated installable-catalog table below lists the authoritative names — declare any subset in `installed_*` and run `/context install`, or take the whole conception via `/context accept-all`.
|
|
587
|
-
</context_install>
|
|
588
|
-
|
|
589
|
-
<substrate_config>
|
|
590
|
-
`.project/config.json` is the substrate bootstrap. Its `root` field declares where every other block, schema, agent, and template lives — closing the GitHub #3 surface where downstream consumers had to assume `.project/`. `naming` aliases canonical block ids to display names (used by `/context view` rendering). `hierarchy` declares legal closure-table edges (parent block → child block via relation_type). `lenses` declares named projections over a target block. `installed_schemas` / `installed_blocks` are the install manifest consumed by `/context install`.
|
|
591
|
-
|
|
592
|
-
`config.json` and `relations.json` are exempt from `root` redirection — they always live at `.project/` because they are the substrate that defines `root`. All other state lives under `<config.root>/...` per `resolveContextDir(cwd)`. The package ships their schemas in `schemas/` (config.schema.json, relations.schema.json) and resolves them via three-tier search: project override > user override > package-shipped.
|
|
593
|
-
|
|
594
|
-
The `loadContext(cwd)` SDK returns an mtime-keyed cached snapshot of `{ config, relations, configMtime, relationsMtime }` for one cwd. Consumers must not mutate.
|
|
595
|
-
</substrate_config>
|
|
596
|
-
|
|
597
|
-
<lens_views>
|
|
598
|
-
Lenses are named projections over a target block. A lens declares `id`, `target` (block name), `relation_type`, `derived_from_field` (optional — synthesizes edges from a per-item field instead of requiring authored edges), `bins` (named groupings), and `render_uncategorized`.
|
|
599
|
-
|
|
600
|
-
Edges live in `.project/relations.json` as a closure table — each row is `{ parent, child, relation_type }`. `parent` is either a canonical id (hierarchy edges) or a lens.bins value (lens edges); disambiguation lives in `validateRelations`.
|
|
601
|
-
|
|
602
|
-
The lens-view algorithm: `edgesForLens(lens, items, authoredEdges)` returns synthetic edges (when `derived_from_field` is set) or filtered authored edges (otherwise). `groupByLens(items, lens, lensEdges)` produces a `Map<binName, ItemRecord[]>`. `walkDescendants(parentId, relationType, edges)` traverses the closure table from any parent.
|
|
603
|
-
|
|
604
|
-
`/context view <lensId>` loads the lens via `loadLensView(cwd, lensId)`, runs `groupByLens`, and renders the result as markdown headings + bullet lines (id + status + title) into the conversation via `renderLensView`. `lens.render_uncategorized: false` omits the uncategorized bucket.
|
|
605
|
-
</lens_views>
|
|
606
|
-
|
|
607
|
-
<context_lens_curate>
|
|
608
|
-
`/context lens-curate <lensId>` walks items in the lens's target block that have no edge in any declared bin and surfaces bin-assignment suggestions (would-be `relations.json` edge appends) as a follow-up turn. The LLM reads the suggestions and persists the chosen edges via `append-block-item` against `relations.json`. The command itself does not write — curation is a follow-up-turn pattern so the model decides which suggestions to enact.
|
|
609
|
-
</context_lens_curate>
|
|
610
|
-
|
|
611
|
-
<context_view>
|
|
612
|
-
`/context view <lensId>` renders a configured lens as markdown into the conversation. Bins become headings, items become bullet lines (id + status + title where present). `naming` aliases from config.json are honored for the target block name. Errors (missing config, unknown lens, unreadable target block, no array property in target) surface via `ctx.ui.notify` with severity `error`.
|
|
613
|
-
</context_view>
|
|
614
|
-
|
|
615
|
-
<substrate_validation>
|
|
616
|
-
`validateRelations(cwd)` (exposed as the `context-validate-relations` tool) checks the closure-table edges in `relations.json` against the config + per-block item snapshots. Diagnostics codes: `edge_unknown_relation_type`, `edge_parent_not_in_bins`, `edge_unresolved_parent`, `edge_unresolved_child`, `edge_parent_wrong_block`, `edge_child_wrong_block`, `edge_cycle_detected`. Returns `{ status: "clean" | "warnings" | "invalid", issues[] }` where each issue carries the offending edge or cycle path.
|
|
617
|
-
|
|
618
|
-
Two derived substrate tools complement validation: `context-edges-for-lens` returns the materialized `Edge[]` for a named lens (synthetic from `derived_from_field` or filtered authored edges); `context-walk-descendants` returns the transitive descendant id list from a parent under a given relation_type.
|
|
619
|
-
</substrate_validation>
|
|
620
|
-
|
|
621
|
-
<block_item_reads>
|
|
622
|
-
Item-level reads complement whole-block `read-block` (which is all-or-nothing and caps at the 50KB read limit): `read-block-item` returns one item from a named block by its id (block-scoped — null if absent; distinct from `resolve-item-by-id`, which searches every block by kind-prefixed id). `read-block-page` paginates a block too large to fetch whole — `{ items, total, hasMore }` where `total` is the full item count and pagination uses `offset`/`limit` (defaults 0/50).
|
|
623
|
-
`join-blocks` — one-call cross-block join, EDGE mode (relations.json relation_type, leftEndpoint parent|child) or FIELD mode (shared field value), optional left pre-filter; returns {left, right[]} pairs; replaces N+1 read+resolve.
|
|
624
|
-
</block_item_reads>
|
|
625
|
-
|
|
626
|
-
<context_status>
|
|
627
|
-
`/context status` derives project state dynamically from the filesystem:
|
|
628
|
-
- Source file count and line count (`.ts` files excluding tests)
|
|
629
|
-
- Test count and test file count
|
|
630
|
-
- Schema count, block count, phase count
|
|
631
|
-
- Block summaries with array item counts and status distributions
|
|
632
|
-
- Requirements summary (total, by status, by priority) — from requirements.json (if installed)
|
|
633
|
-
- Tasks summary (total, by status) — from tasks.json (if installed)
|
|
634
|
-
- Domain entry count — from domain.json (if installed)
|
|
635
|
-
- Verification summary (total, passed, failed) — from verification.json (if installed)
|
|
636
|
-
- Handoff presence — whether handoff.json exists
|
|
637
|
-
- Recent git commits
|
|
638
|
-
- Current phase detection
|
|
639
|
-
</context_status>
|
|
640
|
-
|
|
641
|
-
<context_add_work>
|
|
642
|
-
`/context add-work` discovers appendable blocks (blocks with array schemas), reads their schemas, and sends a structured instruction to the LLM to extract items from the conversation into the typed blocks. This is a follow-up message that triggers the LLM to use the `append-block-item` tool.
|
|
643
|
-
</context_add_work>
|
|
644
|
-
|
|
645
|
-
<duplicate_detection>
|
|
646
|
-
`append-block-item` checks for duplicate items by `id` field before appending. If an item with the same `id` already exists in the target array, it returns a message instead of appending.
|
|
647
|
-
</duplicate_detection>
|
|
648
|
-
|
|
649
|
-
<context_validate>
|
|
650
|
-
Two separate validators address two concerns:
|
|
651
|
-
|
|
652
|
-
`/context validate` (the `context-validate` tool) checks cross-block referential integrity:
|
|
653
|
-
- task.phase references a valid phase
|
|
654
|
-
- task.depends_on references valid task IDs
|
|
655
|
-
- decision.phase references a valid phase
|
|
656
|
-
- gap.resolved_by references a valid ID
|
|
657
|
-
- requirement.traces_to references valid phase/task IDs
|
|
658
|
-
- requirement.depends_on references valid requirement IDs
|
|
659
|
-
- verification.target references a valid target ID
|
|
660
|
-
- rationale.related_decisions references valid decision IDs
|
|
661
|
-
|
|
662
|
-
Returns errors (broken dependency references) and warnings (unresolved cross-references).
|
|
663
|
-
|
|
664
|
-
The `context-validate-relations` tool (see `<substrate_validation>`) validates closure-table edges in `relations.json` — a separate concern from cross-block ID resolution.
|
|
665
|
-
</context_validate>
|
|
666
|
-
|
|
667
|
-
<update_check>
|
|
668
|
-
On `session_start`, checks npm registry for newer versions of `@davidorex/pi-project-workflows` and notifies via UI if an update is available. Non-blocking — failures are silently ignored.
|
|
669
|
-
</update_check>
|
|
670
|
-
|
|
671
|
-
<success_criteria>
|
|
672
|
-
- `.project/`, `.project/schemas/`, `.project/phases/`, and `.project/config.json` exist after `/context init`
|
|
673
|
-
- `installed_schemas` / `installed_blocks` declared in `config.json` are reified by `/context install`; `--update` overwrites
|
|
674
|
-
- Block writes validate against schemas — invalid data rejected with specific error
|
|
675
|
-
- `/context status` returns current derived state without errors
|
|
676
|
-
- `/context validate` returns no errors for well-formed cross-block references
|
|
677
|
-
- `context-validate-relations` returns no errors for a well-formed `relations.json`
|
|
678
|
-
- `/context view <lensId>` renders the configured projection; `/context lens-curate <lensId>` surfaces suggestions for uncategorized items
|
|
679
|
-
- `append-block-item` rejects duplicate IDs
|
|
680
|
-
- Schema customizations (field additions, enum changes) take effect on next write
|
|
681
|
-
- A relocated `config.root` reaches every read/write because all path construction routes through `resolveContextDir(cwd)`
|
|
682
|
-
</success_criteria>
|
|
683
|
-
|
|
684
|
-
*Generated from source by `scripts/generate-skills.js` — do not edit by hand.*
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Bundled Resources
|
|
2
|
-
|
|
3
|
-
## schemas/ (9 files)
|
|
4
|
-
|
|
5
|
-
- `schemas/bootstrap.schema.json`
|
|
6
|
-
- `schemas/config.schema.json`
|
|
7
|
-
- `schemas/layer.schema.json`
|
|
8
|
-
- `schemas/priority.schema.json`
|
|
9
|
-
- `schemas/relations.schema.json`
|
|
10
|
-
- `schemas/severity.schema.json`
|
|
11
|
-
- `schemas/source.schema.json`
|
|
12
|
-
- `schemas/status.schema.json`
|
|
13
|
-
- `schemas/verification-method.schema.json`
|
|
14
|
-
|
|
15
|
-
## samples/ (31 files)
|
|
16
|
-
|
|
17
|
-
- `samples/blocks/context-contracts.json`
|
|
18
|
-
- `samples/blocks/conventions.json`
|
|
19
|
-
- `samples/blocks/decisions.json`
|
|
20
|
-
- `samples/blocks/features.json`
|
|
21
|
-
- `samples/blocks/framework-gaps.json`
|
|
22
|
-
- `samples/blocks/issues.json`
|
|
23
|
-
- `samples/blocks/layer-plans.json`
|
|
24
|
-
- `samples/blocks/phase.json`
|
|
25
|
-
- `samples/blocks/rationale.json`
|
|
26
|
-
- `samples/blocks/requirements.json`
|
|
27
|
-
- `samples/blocks/research.json`
|
|
28
|
-
- `samples/blocks/spec-reviews.json`
|
|
29
|
-
- `samples/blocks/story.json`
|
|
30
|
-
- `samples/blocks/tasks.json`
|
|
31
|
-
- `samples/blocks/verification.json`
|
|
32
|
-
- `samples/conception.json`
|
|
33
|
-
- `samples/schemas/context-contracts.schema.json`
|
|
34
|
-
- `samples/schemas/conventions.schema.json`
|
|
35
|
-
- `samples/schemas/decisions.schema.json`
|
|
36
|
-
- `samples/schemas/features.schema.json`
|
|
37
|
-
- `samples/schemas/framework-gaps.schema.json`
|
|
38
|
-
- `samples/schemas/issues.schema.json`
|
|
39
|
-
- `samples/schemas/layer-plans.schema.json`
|
|
40
|
-
- `samples/schemas/phase.schema.json`
|
|
41
|
-
- `samples/schemas/rationale.schema.json`
|
|
42
|
-
- `samples/schemas/requirements.schema.json`
|
|
43
|
-
- `samples/schemas/research.schema.json`
|
|
44
|
-
- `samples/schemas/spec-reviews.schema.json`
|
|
45
|
-
- `samples/schemas/story.schema.json`
|
|
46
|
-
- `samples/schemas/tasks.schema.json`
|
|
47
|
-
- `samples/schemas/verification.schema.json`
|