dw-kit 1.3.6 → 1.6.0-rc.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/.claude/agents/executor.md +80 -80
- package/.claude/hooks/pre-commit-gate.sh +59 -0
- package/.claude/hooks/stop-check.sh +111 -31
- package/.claude/rules/commit-standards.md +48 -37
- package/.claude/rules/dw.md +47 -11
- package/.claude/skills/dw-archive/SKILL.md +14 -0
- package/.claude/skills/dw-commit/SKILL.md +7 -4
- package/.claude/skills/dw-decision/SKILL.md +5 -4
- package/.claude/skills/dw-execute/SKILL.md +18 -5
- package/.claude/skills/dw-handoff/SKILL.md +8 -3
- package/.claude/skills/dw-plan/SKILL.md +15 -2
- package/.claude/skills/dw-research/SKILL.md +7 -5
- package/.claude/skills/dw-retroactive/SKILL.md +75 -63
- package/.claude/skills/dw-review/SKILL.md +33 -2
- package/.claude/skills/dw-task-init/SKILL.md +40 -35
- package/.dw/adapters/generic/AGENT.md +171 -169
- package/.dw/config/config.schema.json +149 -121
- package/.dw/config/dw.config.yml +14 -0
- package/.dw/core/WORKFLOW.md +450 -450
- package/.dw/core/schemas/agent-claim.schema.json +127 -0
- package/.dw/core/schemas/agent-report.schema.json +72 -0
- package/.dw/core/schemas/task-frontmatter.schema.json +78 -0
- package/.dw/core/templates/v3/task.md +188 -0
- package/CLAUDE.md +2 -2
- package/MIGRATION-v1.5.md +330 -0
- package/README.md +18 -0
- package/package.json +4 -2
- package/src/cli.mjs +176 -0
- package/src/commands/agent-claim.mjs +235 -0
- package/src/commands/agent-inspect.mjs +123 -0
- package/src/commands/doctor.mjs +105 -1
- package/src/commands/lint-task.mjs +112 -0
- package/src/commands/review-render.mjs +255 -0
- package/src/commands/task-migrate.mjs +366 -0
- package/src/commands/task-new.mjs +90 -0
- package/src/commands/task-render.mjs +235 -0
- package/src/commands/task-rotate.mjs +168 -0
- package/src/commands/task-show.mjs +137 -0
- package/src/commands/task-view.mjs +386 -0
- package/src/commands/task-watch.mjs +223 -0
- package/src/lib/active-index.mjs +19 -1
- package/src/lib/agent-claim.mjs +173 -0
- package/src/lib/agent-conflict.mjs +137 -0
- package/src/lib/agent-events.mjs +43 -0
- package/src/lib/agent-report.mjs +96 -0
- package/src/lib/config.mjs +120 -104
- package/src/lib/frontmatter.mjs +72 -0
- package/src/lib/lint-rules.mjs +149 -0
- package/src/lib/review/manifest-schema.json +149 -0
- package/src/lib/review/manifest-validator.mjs +93 -0
- package/src/lib/review/scope-slug.mjs +68 -0
- package/src/lib/timeline-parser.mjs +80 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/dv-workflow/dv-workflow/blob/main/.dw/core/schemas/agent-claim.schema.json",
|
|
4
|
+
"title": "agent-claim@v1",
|
|
5
|
+
"description": "Agent OS claim file schema (ADR-0009 Round 2). Cooperative lock declaring ownership of subtasks + write_scope.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"claim_id",
|
|
10
|
+
"task_id",
|
|
11
|
+
"agent",
|
|
12
|
+
"subtasks",
|
|
13
|
+
"write_scope",
|
|
14
|
+
"lease_expires",
|
|
15
|
+
"lease_duration_seconds",
|
|
16
|
+
"status",
|
|
17
|
+
"created_at"
|
|
18
|
+
],
|
|
19
|
+
"additionalProperties": false,
|
|
20
|
+
"properties": {
|
|
21
|
+
"schema_version": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"const": "agent-claim@v1",
|
|
24
|
+
"description": "Schema version. Bump rule: minor for additive fields, major for breaking changes."
|
|
25
|
+
},
|
|
26
|
+
"claim_id": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^[a-z0-9][a-z0-9-]*-\\d{8}T\\d{6}Z(-[a-z0-9]+)?$",
|
|
29
|
+
"description": "Format: {task-id-slug}-{subtask-ids-joined}-{YYYYMMDDTHHMMSSZ}-{random4}. Random suffix prevents same-second collision. Never reused after release/expire."
|
|
30
|
+
},
|
|
31
|
+
"task_id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^[a-z0-9](?:[a-z0-9.-]{0,62}[a-z0-9])?$",
|
|
34
|
+
"description": "References .dw/tasks/{task_id}/task.md"
|
|
35
|
+
},
|
|
36
|
+
"agent": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"required": ["id", "vendor", "role"],
|
|
39
|
+
"additionalProperties": false,
|
|
40
|
+
"properties": {
|
|
41
|
+
"id": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 1,
|
|
44
|
+
"maxLength": 64,
|
|
45
|
+
"description": "Stable identifier for this agent instance (e.g., 'codex-1', 'claude-main')"
|
|
46
|
+
},
|
|
47
|
+
"vendor": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"enum": ["claude", "codex", "gemini", "human", "other"],
|
|
50
|
+
"description": "Agent vendor for adapter routing"
|
|
51
|
+
},
|
|
52
|
+
"role": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"enum": ["worker", "reader", "orchestrator", "reviewer"],
|
|
55
|
+
"description": "worker=writes files; reader=read-only research; orchestrator=splits work; reviewer=approves merge"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"subtasks": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^(ST|WS)-[0-9.]+$"
|
|
64
|
+
},
|
|
65
|
+
"minItems": 1,
|
|
66
|
+
"description": "Semantic ownership: subtask IDs from task.md Section 3 tracker. Empty array rejected per R2-7."
|
|
67
|
+
},
|
|
68
|
+
"write_scope": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"minLength": 1
|
|
73
|
+
},
|
|
74
|
+
"description": "Filesystem ownership: glob paths agent may modify. Empty array allowed only if role=reader."
|
|
75
|
+
},
|
|
76
|
+
"read_scope": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": { "type": "string" },
|
|
79
|
+
"description": "Optional: paths agent will read but not modify. Informational; not enforced."
|
|
80
|
+
},
|
|
81
|
+
"lease_expires": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",
|
|
84
|
+
"description": "Wall-clock ISO UTC expiry. Per R2-9 used together with lease_duration_seconds via max()."
|
|
85
|
+
},
|
|
86
|
+
"lease_duration_seconds": {
|
|
87
|
+
"type": "integer",
|
|
88
|
+
"minimum": 60,
|
|
89
|
+
"maximum": 86400,
|
|
90
|
+
"description": "Relative lease length (1 min to 24 hours). Per R2-9 fallback if wall clock skewed."
|
|
91
|
+
},
|
|
92
|
+
"status": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": ["created", "active", "released", "expired", "invalidated"],
|
|
95
|
+
"description": "Lifecycle state per R2-1. created→active→released (clean) or →expired (lease passed) or →invalidated (orchestrator override)."
|
|
96
|
+
},
|
|
97
|
+
"created_at": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
|
|
100
|
+
},
|
|
101
|
+
"activated_at": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",
|
|
104
|
+
"description": "When status transitioned created→active (first edit)"
|
|
105
|
+
},
|
|
106
|
+
"released_at": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",
|
|
109
|
+
"description": "When status transitioned to released/expired/invalidated"
|
|
110
|
+
},
|
|
111
|
+
"release_reason": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"description": "Optional free-text reason for release/expire/invalidate"
|
|
114
|
+
},
|
|
115
|
+
"worktree_path": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"description": "If agent operates in a git worktree per R2-3, the worktree path. .dw/cache/worktrees/{agent-id}/"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"allOf": [
|
|
121
|
+
{
|
|
122
|
+
"if": { "properties": { "agent": { "properties": { "role": { "const": "reader" } } } } },
|
|
123
|
+
"then": { "properties": { "write_scope": { "maxItems": 0 } } },
|
|
124
|
+
"else": { "properties": { "write_scope": { "minItems": 1 } } }
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/dv-workflow/dv-workflow/blob/main/.dw/core/schemas/agent-report.schema.json",
|
|
4
|
+
"title": "agent-report@v1",
|
|
5
|
+
"description": "Agent OS report frontmatter schema (ADR-0009 Round 2). Each agent writes a markdown report file after work; this validates the frontmatter portion. Body is free-form markdown.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"task_id",
|
|
10
|
+
"agent_id",
|
|
11
|
+
"vendor",
|
|
12
|
+
"claim_id",
|
|
13
|
+
"status",
|
|
14
|
+
"created_at"
|
|
15
|
+
],
|
|
16
|
+
"additionalProperties": true,
|
|
17
|
+
"properties": {
|
|
18
|
+
"schema_version": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"const": "agent-report@v1"
|
|
21
|
+
},
|
|
22
|
+
"task_id": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[a-z0-9](?:[a-z0-9.-]{0,62}[a-z0-9])?$"
|
|
25
|
+
},
|
|
26
|
+
"agent_id": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1,
|
|
29
|
+
"maxLength": 64
|
|
30
|
+
},
|
|
31
|
+
"vendor": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": ["claude", "codex", "gemini", "human", "other"]
|
|
34
|
+
},
|
|
35
|
+
"claim_id": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[a-z0-9][a-z0-9-]*-\\d{8}T\\d{6}Z(-[a-z0-9]+)?$",
|
|
38
|
+
"description": "Must reference an existing claim (active, released, expired, or invalidated)."
|
|
39
|
+
},
|
|
40
|
+
"status": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"enum": ["completed", "partial", "blocked", "needs-review", "abandoned"],
|
|
43
|
+
"description": "Report outcome. needs-review = flagged for human attention (e.g., edited outside write_scope)."
|
|
44
|
+
},
|
|
45
|
+
"subtasks_addressed": {
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": { "type": "string", "pattern": "^(ST|WS)-[0-9.]+$" }
|
|
48
|
+
},
|
|
49
|
+
"files_changed": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "type": "string" },
|
|
52
|
+
"description": "Paths (relative to repo root) that this agent modified during the claim."
|
|
53
|
+
},
|
|
54
|
+
"files_outside_scope": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "type": "string" },
|
|
57
|
+
"description": "Files agent edited that were NOT in declared write_scope. Triggers needs-review status."
|
|
58
|
+
},
|
|
59
|
+
"open_questions": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": { "type": "string" }
|
|
62
|
+
},
|
|
63
|
+
"next_actions": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"items": { "type": "string" }
|
|
66
|
+
},
|
|
67
|
+
"created_at": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/dv-workflow/dv-workflow/blob/main/.dw/core/schemas/task-frontmatter.schema.json",
|
|
4
|
+
"title": "task-frontmatter",
|
|
5
|
+
"description": "Frontmatter schema for .dw/tasks/{name}/task.md (v3 task format per ADR-0008)",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"task_id",
|
|
9
|
+
"created",
|
|
10
|
+
"last_updated",
|
|
11
|
+
"status",
|
|
12
|
+
"owner",
|
|
13
|
+
"depth",
|
|
14
|
+
"schema_version"
|
|
15
|
+
],
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"properties": {
|
|
18
|
+
"task_id": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"pattern": "^[a-z0-9](?:[a-z0-9.-]{0,62}[a-z0-9])?$",
|
|
21
|
+
"description": "Kebab-case slug (dots allowed for version-like IDs e.g. sc-guard-v1.3.5); matches parent folder name in .dw/tasks/"
|
|
22
|
+
},
|
|
23
|
+
"created": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
26
|
+
"description": "ISO date YYYY-MM-DD"
|
|
27
|
+
},
|
|
28
|
+
"last_updated": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
31
|
+
"description": "ISO date YYYY-MM-DD; updated by stop-check hook on session end"
|
|
32
|
+
},
|
|
33
|
+
"status": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"enum": [
|
|
36
|
+
"Draft",
|
|
37
|
+
"Approved",
|
|
38
|
+
"In Progress",
|
|
39
|
+
"Blocked",
|
|
40
|
+
"Paused",
|
|
41
|
+
"Done"
|
|
42
|
+
],
|
|
43
|
+
"description": "Lifecycle status. Single-source-of-truth for task state."
|
|
44
|
+
},
|
|
45
|
+
"phase": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Free-form current phase description (e.g., 'WS-3 lint impl')"
|
|
48
|
+
},
|
|
49
|
+
"owner": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"minLength": 1,
|
|
52
|
+
"description": "Person responsible for shipping this task"
|
|
53
|
+
},
|
|
54
|
+
"depth": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"enum": ["quick", "standard", "thorough"],
|
|
57
|
+
"description": "Workflow depth routing per dw config"
|
|
58
|
+
},
|
|
59
|
+
"related_adr": {
|
|
60
|
+
"type": ["string", "null"],
|
|
61
|
+
"pattern": "^(ADR-\\d{4}|none)$",
|
|
62
|
+
"description": "ADR reference (ADR-NNNN format) or 'none' or null"
|
|
63
|
+
},
|
|
64
|
+
"target_ship": {
|
|
65
|
+
"type": ["string", "null"],
|
|
66
|
+
"description": "Free-form target ship date or milestone (e.g., 'v1.5' or 'TBD')"
|
|
67
|
+
},
|
|
68
|
+
"schema_version": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"const": "v3.0",
|
|
71
|
+
"description": "Frontmatter schema version. Bumped only on breaking schema change."
|
|
72
|
+
},
|
|
73
|
+
"blockers": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Current blockers in free-form text; use 'none' if unblocked"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
task_id: {task-name}
|
|
3
|
+
created: {YYYY-MM-DD}
|
|
4
|
+
last_updated: {YYYY-MM-DD}
|
|
5
|
+
status: Draft
|
|
6
|
+
phase: {free-form phase description}
|
|
7
|
+
owner: {name}
|
|
8
|
+
depth: quick | standard | thorough
|
|
9
|
+
related_adr: {ADR-NNNN | none}
|
|
10
|
+
target_ship: {milestone or TBD}
|
|
11
|
+
schema_version: v3.0
|
|
12
|
+
blockers: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Timeline: {Task Title}
|
|
16
|
+
|
|
17
|
+
<!--
|
|
18
|
+
Section 1 (Snapshot) is the always-on, ≤15-line header for fast human scan and
|
|
19
|
+
GitHub-rendered preview. The image reference below is auto-generated by the
|
|
20
|
+
pre-commit / stop-check hook via dw-kit-render. Leave it as-is — do NOT edit
|
|
21
|
+
timeline.svg by hand; it regenerates on commit.
|
|
22
|
+
|
|
23
|
+
If dw-kit-render is not installed, the SVG reference renders as a broken image
|
|
24
|
+
in some viewers. Run `npm install -g dw-kit-render` to enable full preview,
|
|
25
|
+
or fall back to Mermaid blocks (see Section 4 example).
|
|
26
|
+
-->
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
<!--
|
|
31
|
+
The line below is the auto-generated SVG preview. It is INJECTED by `dw task render`
|
|
32
|
+
or by the pre-commit / stop-check hook the first time the task is rendered.
|
|
33
|
+
Until the SVG exists, the image is suppressed by commenting it out.
|
|
34
|
+
|
|
35
|
+
To enable visual preview now, run: `dw task render <task-name>`
|
|
36
|
+
or commit task.md changes (hook will regenerate).
|
|
37
|
+
|
|
38
|
+
After rendering, the comment markers can be removed and the image will display
|
|
39
|
+
inline on GitHub PR view + IDE markdown preview.
|
|
40
|
+
-->
|
|
41
|
+
<!--  -->
|
|
42
|
+
|
|
43
|
+
## 1. Snapshot
|
|
44
|
+
|
|
45
|
+
**Phase:** {current phase}
|
|
46
|
+
**Status:** {Draft | Approved | In Progress | Blocked | Paused | Done}
|
|
47
|
+
**Next milestone:** {date or deliverable}
|
|
48
|
+
**Owner:** {name}
|
|
49
|
+
**Blockers:** {none | description}
|
|
50
|
+
**Last updated:** {YYYY-MM-DD}
|
|
51
|
+
|
|
52
|
+
## 2. Intent & Scope
|
|
53
|
+
|
|
54
|
+
<!--
|
|
55
|
+
Section 2 is the stable intent contract. Per lint convention, status markers
|
|
56
|
+
(✅, 🟡, dates) MUST NOT appear in Section 2 — those live exclusively in
|
|
57
|
+
Section 3 (Subtask Tracker). Section 2 changes only when intent or scope
|
|
58
|
+
genuinely changes.
|
|
59
|
+
-->
|
|
60
|
+
|
|
61
|
+
### Intent
|
|
62
|
+
|
|
63
|
+
{1-2 paragraphs — what and why. No background padding.}
|
|
64
|
+
|
|
65
|
+
### Why Now
|
|
66
|
+
|
|
67
|
+
{Forcing function: deadline, incident, dependency, opportunity.}
|
|
68
|
+
|
|
69
|
+
### Subtasks (in scope)
|
|
70
|
+
|
|
71
|
+
**ST-1: {Subtask name}**
|
|
72
|
+
- {Concrete action}
|
|
73
|
+
- Acceptance: {verifiable criterion}
|
|
74
|
+
|
|
75
|
+
**ST-2: {Subtask name}**
|
|
76
|
+
- ...
|
|
77
|
+
|
|
78
|
+
### Out of Scope
|
|
79
|
+
|
|
80
|
+
- {Explicit exclusions — prevents scope creep}
|
|
81
|
+
|
|
82
|
+
### Success Criteria
|
|
83
|
+
|
|
84
|
+
Measurable outcomes (not vibes):
|
|
85
|
+
|
|
86
|
+
- [ ] {Numeric threshold, e.g., "p95 latency <100ms"}
|
|
87
|
+
- [ ] {Binary gate, e.g., "passes smoke test"}
|
|
88
|
+
|
|
89
|
+
### Dependencies
|
|
90
|
+
|
|
91
|
+
- {Upstream blockers}
|
|
92
|
+
- {External systems}
|
|
93
|
+
|
|
94
|
+
### Risk Register (optional, recommended for thorough depth)
|
|
95
|
+
|
|
96
|
+
| ID | Risk | Severity | Mitigation | Owner |
|
|
97
|
+
|----|------|----------|-----------|-------|
|
|
98
|
+
| R-1 | ... | HIGH/MED/LOW | ... | ... |
|
|
99
|
+
|
|
100
|
+
## 3. Subtask Tracker
|
|
101
|
+
|
|
102
|
+
<!--
|
|
103
|
+
SINGLE SOURCE OF TRUTH for subtask status. This is the only section where
|
|
104
|
+
status markers (⬜🟡✅🔴⏸) are allowed.
|
|
105
|
+
-->
|
|
106
|
+
|
|
107
|
+
| # | Subtask | Status | Date | Notes |
|
|
108
|
+
|---|---------|--------|------|-------|
|
|
109
|
+
| ST-1 | ... | ⬜ Pending | — | |
|
|
110
|
+
| ST-2 | ... | ⬜ Pending | — | |
|
|
111
|
+
|
|
112
|
+
Status legend: ⬜ Pending · 🟡 In Progress · ✅ Done · 🔴 Blocked · ⏸ Paused
|
|
113
|
+
|
|
114
|
+
## 4. Timeline / Changelog
|
|
115
|
+
|
|
116
|
+
<!--
|
|
117
|
+
Reverse-chronological. Each session = one heading. Section auto-rotates to
|
|
118
|
+
timeline-history.md when total > 400 lines (stop-check hook). Older entries
|
|
119
|
+
remain accessible via the history file.
|
|
120
|
+
|
|
121
|
+
Optional Mermaid block at top for GitHub-native timeline render (used as
|
|
122
|
+
fallback if dw-kit-render is absent — graceful degradation).
|
|
123
|
+
-->
|
|
124
|
+
|
|
125
|
+
```mermaid
|
|
126
|
+
timeline
|
|
127
|
+
title Task Lifecycle
|
|
128
|
+
{YYYY-MM-DD} : Created
|
|
129
|
+
{YYYY-MM-DD} : {next event}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### {YYYY-MM-DD} — {Session / commit title}
|
|
133
|
+
|
|
134
|
+
**Actions taken:**
|
|
135
|
+
- ...
|
|
136
|
+
|
|
137
|
+
**Decisions made:**
|
|
138
|
+
- ...
|
|
139
|
+
|
|
140
|
+
**Pain points logged:**
|
|
141
|
+
- ...
|
|
142
|
+
|
|
143
|
+
**Open items for next session:**
|
|
144
|
+
- [ ] ...
|
|
145
|
+
|
|
146
|
+
## 5. Handoff & Friction
|
|
147
|
+
|
|
148
|
+
**For next session (or next agent):**
|
|
149
|
+
|
|
150
|
+
- **Read first:** {files / ADRs}
|
|
151
|
+
- **Current state:** {phase, subtask}
|
|
152
|
+
- **Don't do:** {anti-patterns}
|
|
153
|
+
- **Watch out:** {risks, gotchas}
|
|
154
|
+
|
|
155
|
+
### Friction Journal
|
|
156
|
+
|
|
157
|
+
<!--
|
|
158
|
+
Log friction encountered while working on this task. Feeds dw-kit improvement
|
|
159
|
+
backlog. Keep entries short.
|
|
160
|
+
-->
|
|
161
|
+
|
|
162
|
+
| Date | Friction | Component | Proposed fix |
|
|
163
|
+
|------|----------|-----------|-------------|
|
|
164
|
+
| {YYYY-MM-DD} | ... | ... | ... |
|
|
165
|
+
|
|
166
|
+
## 6. Annexes
|
|
167
|
+
|
|
168
|
+
<!--
|
|
169
|
+
Free-form supplements. Indexer ignores files here; lint warns on generic names.
|
|
170
|
+
Recommended names: baseline.md, experiment-{id}.md, debate-r{N}.md,
|
|
171
|
+
timeline-history.md (auto-rotated).
|
|
172
|
+
-->
|
|
173
|
+
|
|
174
|
+
- (none)
|
|
175
|
+
|
|
176
|
+
## 7. Debate Log (optional, thorough depth only)
|
|
177
|
+
|
|
178
|
+
<!--
|
|
179
|
+
Adversarial review (red-bot / blue-bot) findings. Keep last round only;
|
|
180
|
+
overflow into debate-r{N}.md annexes.
|
|
181
|
+
-->
|
|
182
|
+
|
|
183
|
+
### {YYYY-MM-DD} — {Context}
|
|
184
|
+
|
|
185
|
+
**Red-bot findings:** ...
|
|
186
|
+
**Blue-bot suggestions:** ...
|
|
187
|
+
**Incorporated:** ...
|
|
188
|
+
**Deferred:** ...
|
package/CLAUDE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Workflow toolkit codebase. Rules live in `.claude/rules/` (auto-loaded).
|
|
4
4
|
|
|
5
5
|
**v2.0 direction:** Context-First SDLC Governance Layer (5 pillars — see `.dw/core/PILLARS.md`)
|
|
6
|
-
**Current:** v1.3.6 (released 2026-05-14) · ADR-0001 active · ADR-0005 + ADR-0006 Accepted (Supply-Chain Guard 3-pillar AI-Native; sunset review 2026-08-12 per pillar) · v1.4 cuts pending telemetry
|
|
6
|
+
**Current:** v1.3.6 (released 2026-05-14) · ADR-0001 active · ADR-0005 + ADR-0006 Accepted (Supply-Chain Guard 3-pillar AI-Native; sunset review 2026-08-12 per pillar) · v1.4 cuts pending telemetry · **ADR-0008 Accepted (task docs v3 = 1-file `task.md` + 3-tier auto-sync sidecar)** shipped v1.5 (commit 2030dd2) · **ADR-0009 Accepted Round 2 (Agent OS multi-agent orchestration)** — execution task `agent-os-orchestration` shipping v1.6 (rc.1 candidate)
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ src/
|
|
|
27
27
|
.dw/
|
|
28
28
|
core/ WORKFLOW · THINKING · QUALITY · ROLES · PILLARS · templates/
|
|
29
29
|
decisions/ ADRs (Records pillar)
|
|
30
|
-
tasks/ Active + archive/ (Bridges pillar — via tracking.md)
|
|
30
|
+
tasks/ Active + archive/ (Bridges pillar — via task.md v3 / tracking.md v2)
|
|
31
31
|
metrics/ Local telemetry (events.jsonl)
|
|
32
32
|
config/ dw.config.yml
|
|
33
33
|
security/ IoC namespace fixture (Guards pillar — ADR-0005)
|