workflow-toolkit 1.0.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/.agents/skills/ponytail/SKILL.md +111 -0
- package/.agents/skills/ponytail-audit/SKILL.md +37 -0
- package/.agents/skills/ponytail-debt/SKILL.md +41 -0
- package/.agents/skills/ponytail-gain/SKILL.md +47 -0
- package/.agents/skills/ponytail-help/SKILL.md +70 -0
- package/.agents/skills/ponytail-review/SKILL.md +52 -0
- package/.agents/skills/prompt-review/SKILL.md +60 -0
- package/.agents/skills/wtk/SKILL.md +64 -0
- package/.agents/skills/wtk/references/artifacts.md +82 -0
- package/.agents/skills/wtk/references/evidence.md +68 -0
- package/.agents/skills/wtk/references/git.md +75 -0
- package/.agents/skills/wtk/references/test-contract.md +76 -0
- package/.agents/skills/wtk/references/validation.md +127 -0
- package/.agents/skills/wtk-config/SKILL.md +102 -0
- package/.agents/skills/wtk-config/assets/agents/claude/deep-reviewer.md +40 -0
- package/.agents/skills/wtk-config/assets/agents/claude/designer.md +57 -0
- package/.agents/skills/wtk-config/assets/agents/claude/explorer.md +41 -0
- package/.agents/skills/wtk-config/assets/agents/claude/implementer.md +57 -0
- package/.agents/skills/wtk-config/assets/agents/claude/planner.md +68 -0
- package/.agents/skills/wtk-config/assets/agents/claude/verifier.md +80 -0
- package/.agents/skills/wtk-config/assets/agents/codex/deep-reviewer.toml +41 -0
- package/.agents/skills/wtk-config/assets/agents/codex/designer.toml +55 -0
- package/.agents/skills/wtk-config/assets/agents/codex/explorer.toml +35 -0
- package/.agents/skills/wtk-config/assets/agents/codex/implementer.toml +52 -0
- package/.agents/skills/wtk-config/assets/agents/codex/planner.toml +66 -0
- package/.agents/skills/wtk-config/assets/agents/codex/verifier.toml +78 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/deep-reviewer.md +38 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/designer.md +55 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/explorer.md +39 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/implementer.md +55 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/planner.md +66 -0
- package/.agents/skills/wtk-config/assets/agents/cursor/verifier.md +79 -0
- package/.agents/skills/wtk-config/scripts/ad-index.py +123 -0
- package/.agents/skills/wtk-config/scripts/repository_intelligence.py +671 -0
- package/.agents/skills/wtk-config/scripts/workflow_config.py +972 -0
- package/.agents/skills/wtk-deep-review/SKILL.md +164 -0
- package/.agents/skills/wtk-deep-review/assets/PROMPT.md +56 -0
- package/.agents/skills/wtk-deep-review/assets/REVIEW_UI.html +1340 -0
- package/.agents/skills/wtk-deep-review/assets/findings.schema.json +113 -0
- package/.agents/skills/wtk-deep-review/references/context-pack.md +88 -0
- package/.agents/skills/wtk-deep-review/references/orchestration.md +164 -0
- package/.agents/skills/wtk-deep-review/references/output-contracts.md +149 -0
- package/.agents/skills/wtk-deep-review/references/publish-github.md +83 -0
- package/.agents/skills/wtk-deep-review/references/state-and-learnings.md +64 -0
- package/.agents/skills/wtk-deep-review/references/subagent-runtimes.md +33 -0
- package/.agents/skills/wtk-deep-review/references/taxonomy.md +70 -0
- package/.agents/skills/wtk-deep-review/scripts/_common.py +371 -0
- package/.agents/skills/wtk-deep-review/scripts/build_jobs.py +561 -0
- package/.agents/skills/wtk-deep-review/scripts/build_knowledge.py +349 -0
- package/.agents/skills/wtk-deep-review/scripts/build_manifest.py +479 -0
- package/.agents/skills/wtk-deep-review/scripts/graft_context.py +160 -0
- package/.agents/skills/wtk-deep-review/scripts/graphify_context.py +75 -0
- package/.agents/skills/wtk-deep-review/scripts/merge_findings.py +313 -0
- package/.agents/skills/wtk-deep-review/scripts/render_html.py +240 -0
- package/.agents/skills/wtk-deep-review/scripts/render_review.py +282 -0
- package/.agents/skills/wtk-deep-review/scripts/run_jobs.py +436 -0
- package/.agents/skills/wtk-deep-review/scripts/token_metrics.py +369 -0
- package/.agents/skills/wtk-discover/SKILL.md +270 -0
- package/.agents/skills/wtk-discover/references/document-format.md +149 -0
- package/.agents/skills/wtk-implement/SKILL.md +95 -0
- package/.agents/skills/wtk-implement/references/checklist-format.md +116 -0
- package/.agents/skills/wtk-implement/references/screens.md +129 -0
- package/.agents/skills/wtk-implement/references/test-policy.md +152 -0
- package/.agents/skills/wtk-implement/references/verify.md +297 -0
- package/.agents/skills/wtk-knowledge-check/SKILL.md +16 -0
- package/.agents/skills/wtk-knowledge-check/scripts/check.ts +502 -0
- package/.agents/skills/wtk-knowledge-check/scripts/cli.ts +32 -0
- package/.agents/skills/wtk-knowledge-check/scripts/frontmatter.ts +44 -0
- package/.agents/skills/wtk-lean/.skill-meta.json +6 -0
- package/.agents/skills/wtk-lean/NOTICE.md +18 -0
- package/.agents/skills/wtk-lean/SKILL.md +137 -0
- package/.agents/skills/wtk-lean/references/build.md +168 -0
- package/.agents/skills/wtk-lean/references/checks.md +253 -0
- package/.agents/skills/wtk-lean/references/memory.md +156 -0
- package/.agents/skills/wtk-lean/references/plan.md +514 -0
- package/.agents/skills/wtk-lean/references/verify.md +336 -0
- package/.agents/skills/wtk-lean/scripts/check_commit.py +121 -0
- package/.agents/skills/wtk-lean/scripts/fixtures/checks.md +98 -0
- package/.agents/skills/wtk-lean/scripts/fixtures/plan.md +119 -0
- package/.agents/skills/wtk-lean/scripts/fixtures/verification.md +41 -0
- package/.agents/skills/wtk-lean/scripts/lessons.py +412 -0
- package/.agents/skills/wtk-lean/scripts/selftest.py +401 -0
- package/.agents/skills/wtk-lean/scripts/validate_checks.py +417 -0
- package/.agents/skills/wtk-lean/scripts/validate_plan.py +580 -0
- package/.agents/skills/wtk-lean/scripts/validate_verification.py +357 -0
- package/.agents/skills/wtk-plan/SKILL.md +102 -0
- package/.agents/skills/wtk-plan/references/document-format.md +222 -0
- package/.agents/skills/wtk-qa/SKILL.md +14 -0
- package/.agents/skills/wtk-qa-execute/SKILL.md +115 -0
- package/.agents/skills/wtk-qa-execute/references/fix-loop.md +23 -0
- package/.agents/skills/wtk-qa-execute/references/session-protocol.md +25 -0
- package/.agents/skills/wtk-qa-plan/SKILL.md +111 -0
- package/.agents/skills/wtk-qa-plan/references/profile.md +35 -0
- package/.agents/skills/wtk-ship/SKILL.md +49 -0
- package/.agents/skills/wtk-ship/remediation.py +170 -0
- package/.agents/skills/wtk-ship/scripts/close_feature.py +83 -0
- package/.agents/skills/wtk-ship/scripts/review_convergence.py +373 -0
- package/.wtk.toml.example +93 -0
- package/AGENTS.md +129 -0
- package/NOTICE.md +12 -0
- package/README.md +440 -0
- package/bin/wtk.js +25 -0
- package/docs/toolkit/README.md +56 -0
- package/docs/toolkit/decisions.md +61 -0
- package/docs/toolkit/guidelines/CONTEXT-BUDGET.md +64 -0
- package/docs/toolkit/guidelines/DX.md +67 -0
- package/docs/toolkit/guidelines/FRONTEND.md +73 -0
- package/docs/toolkit/guidelines/KNOWLEDGE-WIKI.md +128 -0
- package/docs/toolkit/guidelines/MODELING.md +134 -0
- package/docs/toolkit/guidelines/QA-EXECUTION.md +46 -0
- package/docs/toolkit/guidelines/QA-SCENARIOS.md +165 -0
- package/docs/toolkit/guidelines/REVIEW-ROUNDS.md +160 -0
- package/docs/toolkit/guidelines/SECURITY.md +160 -0
- package/docs/toolkit/guidelines/UI-UX.md +117 -0
- package/docs/toolkit/guidelines/WORKFLOW-MEMORY.md +73 -0
- package/docs/toolkit/guidelines.md +50 -0
- package/docs/toolkit/loop.md +77 -0
- package/docs/toolkit/purpose.md +51 -0
- package/docs/toolkit/repository-intelligence.md +53 -0
- package/docs/toolkit/reviews.md +77 -0
- package/knowledge/AGENTS.md +316 -0
- package/knowledge/raw/README.md +17 -0
- package/package.json +74 -0
- package/scripts/install_security_skills.py +816 -0
- package/scripts/installer/engine.js +254 -0
- package/scripts/installer/knowledge.js +28 -0
- package/scripts/installer/packets.js +77 -0
- package/scripts/installer/terminal.js +98 -0
- package/scripts/installer/transaction.js +75 -0
- package/skills-lock.json +92 -0
- package/templates/adoption/agents/core.md +23 -0
- package/templates/adoption/agents/quality.md +3 -0
- package/templates/adoption/knowledge/wiki/architecture/index.md +3 -0
- package/templates/adoption/knowledge/wiki/decisions/index.md +3 -0
- package/templates/adoption/knowledge/wiki/design/index.md +3 -0
- package/templates/adoption/knowledge/wiki/domain/index.md +3 -0
- package/templates/adoption/knowledge/wiki/index.md +3 -0
- package/templates/adoption/knowledge/wiki/log.md +3 -0
- package/templates/adoption/knowledge/wiki/open-questions/index.md +3 -0
- package/templates/adoption/knowledge/wiki/product/index.md +3 -0
- package/templates/adoption/knowledge/wiki/research/index.md +3 -0
- package/templates/adoption/product/AGENT-CONTEXT.md +25 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# Knowledge Bundle — Operating Schema
|
|
2
|
+
|
|
3
|
+
This directory is an [Open Knowledge Format](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md)
|
|
4
|
+
v0.2 knowledge bundle. It is the project's durable understanding: what the domain means, what the
|
|
5
|
+
product must do, how the system is shaped, why past choices were made, and what research supports
|
|
6
|
+
all of it.
|
|
7
|
+
|
|
8
|
+
This file is the operating schema. It is not part of the bundle and carries no frontmatter. It may
|
|
9
|
+
evolve with use.
|
|
10
|
+
|
|
11
|
+
## The one rule that keeps this alive
|
|
12
|
+
|
|
13
|
+
**Knowledge flows into the bundle. It never flows out.**
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
CONTEXT.md, docs/, .specs/ ──ingest──> knowledge/
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The bundle never writes back to `.specs/`, and no tool outside this directory is modified to serve
|
|
20
|
+
it. Workflow Toolkit's `wtk` router and `wtk-*` skills do not know this bundle exists and must not
|
|
21
|
+
be taught to. `.specs/STATE.md`, `.specs/features/<f>/`,
|
|
22
|
+
`.specs/lessons.json` and `.specs/LESSONS.md` stay exactly where the skill expects them.
|
|
23
|
+
|
|
24
|
+
When the bundle and a source disagree, **the source wins** and the concept is corrected. A previous
|
|
25
|
+
attempt at this — `docs/obsidian/` — died precisely because no rule said which side was right, and
|
|
26
|
+
it silently kept describing tooling that had already been deleted.
|
|
27
|
+
|
|
28
|
+
## Structure
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
knowledge/
|
|
32
|
+
AGENTS.md This file. The operating schema. Outside the bundle.
|
|
33
|
+
raw/ Untouched originals, any format. Outside the bundle.
|
|
34
|
+
wiki/ THE BUNDLE. Everything below here must conform.
|
|
35
|
+
index.md Bundle root index. Declares okf_version. Reserved.
|
|
36
|
+
log.md Change history, newest first. Reserved.
|
|
37
|
+
domain/ Ubiquitous language. One concept per term.
|
|
38
|
+
product/ What the product must do.
|
|
39
|
+
architecture/ How the system is shaped, and the invariants that hold.
|
|
40
|
+
design/ Visual and experience guidelines.
|
|
41
|
+
decisions/ Why a past choice was made.
|
|
42
|
+
research/ External material, market, competitors, interviews.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This pack ships empty group indexes so a new project has a place to land. Do not add concept pages
|
|
46
|
+
until a real concept exists.
|
|
47
|
+
|
|
48
|
+
**`raw/` sits outside `wiki/` for a hard reason, not a stylistic one.** Conformance rule §11.1 admits
|
|
49
|
+
no exception: every non-reserved `.md` inside the bundle must carry frontmatter with a `type`. A
|
|
50
|
+
verbatim transcript, a captured article or an exported memlog is markdown without frontmatter, so
|
|
51
|
+
placing it inside the bundle would either break conformance or force you to edit a source that is
|
|
52
|
+
supposed to be immutable. Keeping originals outside resolves both at once.
|
|
53
|
+
|
|
54
|
+
OKF's own `references/` convention (§6.3) is a different thing: it mirrors external material *as
|
|
55
|
+
concepts*, inside the bundle. Create `wiki/references/` only when a source earns a
|
|
56
|
+
`Source Summary` concept of its own. A concept can cite `raw/` directly, so most never will.
|
|
57
|
+
|
|
58
|
+
## Concept documents
|
|
59
|
+
|
|
60
|
+
Every `.md` under `knowledge/` except the reserved `index.md` and `log.md` is exactly one concept.
|
|
61
|
+
Its path without the `.md` suffix is its stable ID. Use descriptive `kebab-case` filenames, and do
|
|
62
|
+
not move a file without updating the links that point at it.
|
|
63
|
+
|
|
64
|
+
### Frontmatter
|
|
65
|
+
|
|
66
|
+
`type` is the only required field. Everything else is optional, and absence carries meaning: an
|
|
67
|
+
unverified concept is distinguishable from a verified one, never rejected.
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
---
|
|
71
|
+
type: Decision
|
|
72
|
+
title: Example decision
|
|
73
|
+
description: One sentence of what was chosen.
|
|
74
|
+
tags: [example]
|
|
75
|
+
status: stable
|
|
76
|
+
generated: { by: human:name, at: 2026-08-08T14:00:00Z }
|
|
77
|
+
verified: { by: human:name, at: 2026-08-08T14:00:00Z }
|
|
78
|
+
stale_after: 2027-08-08
|
|
79
|
+
sources:
|
|
80
|
+
- id: state-ad-001
|
|
81
|
+
resource: ../../../.specs/STATE.md
|
|
82
|
+
title: STATE.md — AD-001
|
|
83
|
+
last_modified: 2026-08-08
|
|
84
|
+
---
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
A `resource` pointing outside the bundle uses a relative path resolved from the concept's own
|
|
88
|
+
directory. The example above sits at `wiki/decisions/`, so the repository root is three levels up;
|
|
89
|
+
an original in `raw/` would be `../../raw/<file>`. Bundle-absolute paths beginning with `/` address
|
|
90
|
+
only what is inside `wiki/`.
|
|
91
|
+
|
|
92
|
+
| Field | Meaning |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `type` | **Required.** Short, self-explanatory kind. See the type list below. |
|
|
95
|
+
| `title` | Human-readable display name. |
|
|
96
|
+
| `description` | One sentence. Feeds indexes, search snippets and previews. |
|
|
97
|
+
| `resource` | Canonical URI of the asset the concept describes. Omit for abstract concepts. |
|
|
98
|
+
| `tags` | YAML list of short strings. |
|
|
99
|
+
| `status` | `draft` \| `stable` \| `deprecated`. Absent means `stable`. |
|
|
100
|
+
| `generated` | `{ by: <actor>, at: <ISO 8601> }`. When the *content* last changed meaningfully. |
|
|
101
|
+
| `verified` | List of `{ by: <actor>, at: <ISO 8601> }`. Who confirmed it against its sources. |
|
|
102
|
+
| `stale_after` | Absolute `YYYY-MM-DD`. The concept is stale on or after that day. |
|
|
103
|
+
| `sources` | What the concept derives from. See below. |
|
|
104
|
+
|
|
105
|
+
`generated` and `verified` are deliberately distinct: whoever *wrote* a concept need not be whoever
|
|
106
|
+
*confirmed* it. Trust tier is derived, never stored — no `verified` means unverified, `verified` by
|
|
107
|
+
a non-`human:` actor means machine-confirmed, `verified` by a `human:` actor means human-reviewed.
|
|
108
|
+
|
|
109
|
+
Do not invent metadata to fill the block. An absent field is information.
|
|
110
|
+
|
|
111
|
+
### Actors
|
|
112
|
+
|
|
113
|
+
Identity fields (`generated.by`, `verified[].by`) use one convention:
|
|
114
|
+
|
|
115
|
+
- `human:<handle>` — a person. The `human:` prefix is what raises the trust tier, so use it for
|
|
116
|
+
anything hand-authored or hand-confirmed.
|
|
117
|
+
- `process:<id>` — an automated process, for example `process:knowledge-check`.
|
|
118
|
+
- `<producer>/<version>` — an agent or tool, for example `claude-opus-5/1m`.
|
|
119
|
+
|
|
120
|
+
### Types
|
|
121
|
+
|
|
122
|
+
Keep the set small and consistent. Add one only when an existing type genuinely misdescribes the
|
|
123
|
+
concept.
|
|
124
|
+
|
|
125
|
+
| Type | Used for |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| `Concept` | A term of the ubiquitous language. |
|
|
128
|
+
| `Requirement` | Something the product must do. |
|
|
129
|
+
| `Architecture Invariant` | A constraint the system holds regardless of feature. |
|
|
130
|
+
| `Decision` | A choice made, its reasoning and its trade-off. |
|
|
131
|
+
| `Design Guideline` | A visual or experience rule. |
|
|
132
|
+
| `Research Note` | Understanding built from external material. |
|
|
133
|
+
| `Open Question` | A contradiction between sources that no document resolves and no concept owns. |
|
|
134
|
+
| `Source Summary` | What a single source in `raw/` says, when it earns a page of its own. |
|
|
135
|
+
|
|
136
|
+
A tension belonging to one concept is recorded **inside** that concept, not extracted into an
|
|
137
|
+
`Open Question`. The type exists for the ones that belong to nothing in particular. An
|
|
138
|
+
`Open Question` never answers itself: the answer is a decision, and decisions belong in
|
|
139
|
+
`.specs/STATE.md`.
|
|
140
|
+
|
|
141
|
+
### Sources and citations
|
|
142
|
+
|
|
143
|
+
`sources` records what the concept derives from. Each entry needs a `resource`; everything else is
|
|
144
|
+
optional but valuable:
|
|
145
|
+
|
|
146
|
+
- `id` — stable key used to attribute individual claims. Required whenever the body cites it.
|
|
147
|
+
- `title` — human-readable label.
|
|
148
|
+
- `author` — who produced the source, in the actor convention. An authority signal.
|
|
149
|
+
- `last_modified` — `YYYY-MM-DD`, when the **source itself** last changed. This is what the drift
|
|
150
|
+
check reads; see below.
|
|
151
|
+
|
|
152
|
+
Attribute a specific claim with a markdown footnote whose label is a `sources[].id`:
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+
The decision is recorded in the ledger.[^state-ad-001]
|
|
156
|
+
|
|
157
|
+
[^state-ad-001]: STATE.md — AD-001
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The label is the join key into `sources`, not prose to be parsed. Labels are keyed rather than
|
|
161
|
+
positional because these documents get rewritten often, and a positional index misattributes
|
|
162
|
+
silently the moment the list is reordered.
|
|
163
|
+
|
|
164
|
+
### Body
|
|
165
|
+
|
|
166
|
+
Favour structural markdown — headings, lists, tables, fenced code — over flowing prose. It reads
|
|
167
|
+
better and retrieves better.
|
|
168
|
+
|
|
169
|
+
`# Schema` and `# Examples` carry conventional meaning; use them when they fit. There is no
|
|
170
|
+
required section.
|
|
171
|
+
|
|
172
|
+
Link concepts with standard markdown links, preferring the bundle-absolute form
|
|
173
|
+
`[professional profile](/domain/professional-profile.md)`, which survives a file moving within its
|
|
174
|
+
subdirectory. A link asserts a relationship; the *kind* of relationship lives in the surrounding
|
|
175
|
+
prose, never in the link itself. Explain it.
|
|
176
|
+
|
|
177
|
+
## Operations
|
|
178
|
+
|
|
179
|
+
### INGEST
|
|
180
|
+
|
|
181
|
+
When new material arrives:
|
|
182
|
+
|
|
183
|
+
1. Put the source in `raw/` as `YYYY-MM-DD-<descriptive-kebab-case>.<ext>`. Read it.
|
|
184
|
+
**Never modify it afterwards** — a correction belongs in the concepts that cite it.
|
|
185
|
+
2. Discuss the extracted points with the user before writing concepts.
|
|
186
|
+
3. Create or update the affected concepts under `wiki/`. Fill `sources` with `id`,
|
|
187
|
+
`resource` pointing back at the `raw/` file, and `last_modified`.
|
|
188
|
+
4. Update `generated.at` only on a meaningful content change.
|
|
189
|
+
5. Add links to related concepts and footnotes to the claims that need them.
|
|
190
|
+
6. Update `index.md` at the bundle root and in every affected subdirectory.
|
|
191
|
+
7. Append to `log.md`.
|
|
192
|
+
|
|
193
|
+
One source usually touches several concepts. Process one source at a time with the user watching,
|
|
194
|
+
or a batch at once — whichever the user prefers, recorded here once it settles.
|
|
195
|
+
|
|
196
|
+
### HARVEST
|
|
197
|
+
|
|
198
|
+
The project's own artefacts are sources like any other. Run the knowledge checker (`bun run knowledge`
|
|
199
|
+
in this pack); its gap report names what has accumulated in `.specs/` without a concept, and its
|
|
200
|
+
drift report names what changed underneath a concept that already exists.
|
|
201
|
+
|
|
202
|
+
Drift is measured against git, so it only speaks about committed sources. A source added to `raw/`
|
|
203
|
+
and cited in the same commit reports nothing, which is right — it has not drifted from anything
|
|
204
|
+
yet. The signal starts the moment that source changes again.
|
|
205
|
+
|
|
206
|
+
Harvest at the granularity of a finished feature, not a finished task. Most tasks produce no durable
|
|
207
|
+
knowledge.
|
|
208
|
+
|
|
209
|
+
A harvested concept must not restate its source. `.specs/STATE.md` is a flat, append-only ledger:
|
|
210
|
+
one entry per decision, no links. The bundle holds what the ledger structurally cannot — which
|
|
211
|
+
requirements a decision constrains, which invariant it follows from, which alternative it killed.
|
|
212
|
+
If a concept only repeats the ledger, it is duplication and should not exist.
|
|
213
|
+
|
|
214
|
+
Never harvest `.specs/features/<f>/tasks.md` — it is runner state. Never harvest `.specs/LESSONS.md`
|
|
215
|
+
or `.specs/lessons.json` — they declare themselves machine-owned and are rewritten by their own
|
|
216
|
+
script.
|
|
217
|
+
|
|
218
|
+
### QUERY
|
|
219
|
+
|
|
220
|
+
1. Read `index.md` to locate the relevant pages.
|
|
221
|
+
2. Follow subdirectory indexes and links before searching more broadly.
|
|
222
|
+
3. Read the relevant concepts and answer with citations.
|
|
223
|
+
4. When an answer, comparison or connection has durable value, fold it back into the bundle as a
|
|
224
|
+
concept, then update the index and the log.
|
|
225
|
+
|
|
226
|
+
A useful query should leave the bundle better than it found it, not evaporate into the transcript.
|
|
227
|
+
|
|
228
|
+
### LINT
|
|
229
|
+
|
|
230
|
+
Periodically, and always before a large ingest, review bundle health:
|
|
231
|
+
|
|
232
|
+
- contradictions between concepts;
|
|
233
|
+
- claims superseded by a more recent source;
|
|
234
|
+
- orphan concepts with no inbound links;
|
|
235
|
+
- broken internal links, and links whose relationship is never explained;
|
|
236
|
+
- important concepts mentioned but never given a page;
|
|
237
|
+
- missing or stale index entries;
|
|
238
|
+
- gaps a new source or some research could fill.
|
|
239
|
+
|
|
240
|
+
The knowledge checker covers the mechanical part — conformance, drift and gaps. LINT is the judgement
|
|
241
|
+
part that no script can make. Report questions worth investigating and sources worth adding.
|
|
242
|
+
|
|
243
|
+
## Index and log
|
|
244
|
+
|
|
245
|
+
`index.md` is the entry point for progressive disclosure: it lets a reader see what exists before
|
|
246
|
+
opening anything. It carries no frontmatter, with one exception — the bundle-root `index.md` may
|
|
247
|
+
declare `okf_version`. Group entries under headings and reuse each concept's `description`:
|
|
248
|
+
|
|
249
|
+
```markdown
|
|
250
|
+
# Domain
|
|
251
|
+
|
|
252
|
+
* [Sample Term](domain/sample-term.md) - One sentence from the concept's `description`.
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
`log.md` is the change history, grouped by ISO date, newest first. Past entries are immutable: add
|
|
256
|
+
to the group for the current date rather than rewriting history.
|
|
257
|
+
|
|
258
|
+
```markdown
|
|
259
|
+
## 2026-08-08
|
|
260
|
+
|
|
261
|
+
* **Ingestion**: Added [Sample Term](/domain/sample-term.md).
|
|
262
|
+
* **Lint**: Fixed inconsistent links and metadata.
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Log a query only when it produced a durable change or a decision about the bundle itself.
|
|
266
|
+
|
|
267
|
+
## `raw/` and privacy
|
|
268
|
+
|
|
269
|
+
`raw/` holds originals in whatever format they arrive: transcripts, research, exports, meeting
|
|
270
|
+
records, PDFs, images. Concepts point into it through `sources[].resource`.
|
|
271
|
+
|
|
272
|
+
### Naming
|
|
273
|
+
|
|
274
|
+
Every file is `YYYY-MM-DD-<descriptive-kebab-case>.<ext>`, for example
|
|
275
|
+
`2026-08-02-interview-notes.md`. The date is the material's own — when the meeting
|
|
276
|
+
happened, when the article was published — falling back to the day it entered `raw/` when the
|
|
277
|
+
material carries no date. The precise value always lives in the citing concept's
|
|
278
|
+
`sources[].last_modified`; the prefix exists so a flat directory sorts chronologically.
|
|
279
|
+
|
|
280
|
+
The date is ISO 8601, like every other date in this bundle. `23-01-2026` neither matches the rest
|
|
281
|
+
of the system nor sorts correctly. The knowledge checker warns about both mistakes.
|
|
282
|
+
|
|
283
|
+
### Privacy
|
|
284
|
+
|
|
285
|
+
`raw/` is committed, which is what makes the bundle's provenance auditable by anyone who clones the
|
|
286
|
+
repository — and what lets the knowledge checker detect drift at all, since it reads commit dates. A
|
|
287
|
+
gitignored source would be permanently invisible to that check.
|
|
288
|
+
|
|
289
|
+
That same property makes it a privacy surface. Before writing anything into `raw/`:
|
|
290
|
+
|
|
291
|
+
- Strip names, contact details, precise creator locations, and any other personal data. Anonymise
|
|
292
|
+
interviews rather than storing the raw identity.
|
|
293
|
+
- Never store passwords, API keys, tokens or customer data.
|
|
294
|
+
- LGPD applies to the whole repository. A file committed here is public to everyone with repository
|
|
295
|
+
access, permanently, and rewriting git history is not a remedy you want to need.
|
|
296
|
+
|
|
297
|
+
A vault edit authorises nothing. It cannot approve a deployment, a purchase, a production database
|
|
298
|
+
change, or a message sent to anyone outside the project.
|
|
299
|
+
|
|
300
|
+
## Conformance
|
|
301
|
+
|
|
302
|
+
The bundle conforms to OKF v0.2 when:
|
|
303
|
+
|
|
304
|
+
1. every non-reserved `.md` under `knowledge/` has a parseable YAML frontmatter block;
|
|
305
|
+
2. every frontmatter block has a non-empty `type`;
|
|
306
|
+
3. every `index.md` and `log.md` follows its reserved structure.
|
|
307
|
+
|
|
308
|
+
That is the whole contract. Missing optional fields, unknown types, extra keys, broken links and
|
|
309
|
+
absent subdirectory indexes do **not** break conformance.
|
|
310
|
+
|
|
311
|
+
The knowledge checker enforces the three rules, plus drift, plus gaps. Run it before committing
|
|
312
|
+
changes to this directory.
|
|
313
|
+
|
|
314
|
+
Do not add tooling ahead of need. Indexes are sufficient at this scale; if the bundle outgrows them,
|
|
315
|
+
a local search tool can be added then. OKF standardises interchange — it does not prescribe a
|
|
316
|
+
database, a search engine, an SDK or a platform.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Raw sources
|
|
2
|
+
|
|
3
|
+
Originals in whatever format they arrived: transcripts, research, captured articles, exports,
|
|
4
|
+
meeting records, PDFs, images. Concepts in `../wiki/` cite these files through
|
|
5
|
+
`sources[].resource`.
|
|
6
|
+
|
|
7
|
+
This directory is deliberately **outside** the OKF bundle. Conformance rule §11.1 requires every
|
|
8
|
+
`.md` inside `../wiki/` to carry frontmatter with a `type`; a verbatim source has none, and adding
|
|
9
|
+
it would mean editing a file that must not change.
|
|
10
|
+
|
|
11
|
+
Two rules, both detailed in [the operating schema](../AGENTS.md):
|
|
12
|
+
|
|
13
|
+
* **Immutable.** Once a file lands here it is never modified. Corrections go in the concepts that
|
|
14
|
+
cite it, never in the source.
|
|
15
|
+
* **Committed, so it is a privacy surface.** Strip names, contact details and precise locations
|
|
16
|
+
before writing anything here. Never store credentials or customer data. Applicable privacy law
|
|
17
|
+
applies to the whole repository, and rewriting git history is not a remedy you want to need.
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "workflow-toolkit",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"packageManager": "bun@1.4.0",
|
|
8
|
+
"bin": {
|
|
9
|
+
"wtk": "bin/wtk.js"
|
|
10
|
+
},
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=18.0.0",
|
|
13
|
+
"bun": ">=1.4.0 <1.5.0"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"bin/wtk.js",
|
|
17
|
+
"scripts/installer",
|
|
18
|
+
"scripts/install_security_skills.py",
|
|
19
|
+
"skills-lock.json",
|
|
20
|
+
"NOTICE.md",
|
|
21
|
+
"AGENTS.md",
|
|
22
|
+
".wtk.toml.example",
|
|
23
|
+
"knowledge/AGENTS.md",
|
|
24
|
+
"knowledge/raw/README.md",
|
|
25
|
+
"templates/adoption",
|
|
26
|
+
"docs/toolkit/guidelines",
|
|
27
|
+
"docs/toolkit/README.md",
|
|
28
|
+
"docs/toolkit/repository-intelligence.md",
|
|
29
|
+
"docs/toolkit/decisions.md",
|
|
30
|
+
"docs/toolkit/guidelines.md",
|
|
31
|
+
"docs/toolkit/loop.md",
|
|
32
|
+
"docs/toolkit/purpose.md",
|
|
33
|
+
"docs/toolkit/reviews.md",
|
|
34
|
+
".agents/skills/wtk",
|
|
35
|
+
".agents/skills/wtk-lean",
|
|
36
|
+
".agents/skills/wtk-discover",
|
|
37
|
+
".agents/skills/wtk-plan",
|
|
38
|
+
".agents/skills/wtk-implement",
|
|
39
|
+
".agents/skills/wtk-config",
|
|
40
|
+
".agents/skills/wtk-knowledge-check",
|
|
41
|
+
".agents/skills/wtk-qa",
|
|
42
|
+
".agents/skills/wtk-qa-plan",
|
|
43
|
+
".agents/skills/wtk-qa-execute",
|
|
44
|
+
".agents/skills/ponytail",
|
|
45
|
+
".agents/skills/wtk-deep-review",
|
|
46
|
+
".agents/skills/wtk-ship",
|
|
47
|
+
".agents/skills/ponytail-audit",
|
|
48
|
+
".agents/skills/ponytail-debt",
|
|
49
|
+
".agents/skills/ponytail-gain",
|
|
50
|
+
".agents/skills/ponytail-help",
|
|
51
|
+
".agents/skills/ponytail-review",
|
|
52
|
+
".agents/skills/prompt-review",
|
|
53
|
+
"!**/__pycache__/**",
|
|
54
|
+
"!**/*.pyc"
|
|
55
|
+
],
|
|
56
|
+
"scripts": {
|
|
57
|
+
"knowledge": "bun .agents/skills/wtk-knowledge-check/scripts/cli.ts",
|
|
58
|
+
"review:graft:build": "graft build",
|
|
59
|
+
"review:graft:version": "graft --version",
|
|
60
|
+
"test": "bun test && node --test tests/installer/*.test.js",
|
|
61
|
+
"test:python": "git ls-files -- 'scripts/test_*.py' 'tools/test_*.py' | sort | while read test; do python3 \"$test\" || exit $?; done",
|
|
62
|
+
"test:all": "bun run test && bun run test:python"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@nanonets/graft": "0.10.1",
|
|
66
|
+
"@types/bun": "1.4.0",
|
|
67
|
+
"@types/node": "22.20.1",
|
|
68
|
+
"skills": "1.5.23",
|
|
69
|
+
"typescript": "5.9.3"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"smol-toml": "1.8.0"
|
|
73
|
+
}
|
|
74
|
+
}
|