Skip to content

Commit acc2340

Browse files
feat(dso-igoj batch1): config reference docs, setup audit, preplanning story bodies
- docs/CONFIGURATION-REFERENCE.md: new 47-key workflow-config.conf reference and 25 env var docs (dso-xtcg) - .tickets/dso-bxd0.md: setup path audit report — 9 INSTALL.md stale items, 6 dso-setup.sh gap categories (dso-bxd0) - skills/preplanning/SKILL.md: Phase 4 tk create now passes --description flag for story body population (dso-472x) - scripts/read-config.sh: WORKFLOW_CONFIG_FILE override for test isolation; adds checkpoint.commit_label, dso.plugin_root, version.file_path to known keys - tests/hooks/test-merge-to-main-portability.sh: use WORKFLOW_CONFIG_FILE for config isolation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5093f3b commit acc2340

File tree

9 files changed

+1264
-29
lines changed

9 files changed

+1264
-29
lines changed

.tickets/.sync-state.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,6 @@
227227
"jira_hash": "b2fcb1e44695c32874c75055e4b8c9e8",
228228
"last_synced": "2026-03-17T18:34:36Z"
229229
},
230-
"last_sync_commit": "3fbb4f0cdd13ad43620ac256d7f2f429bedb9469",
231-
"last_pull_timestamp": "2026-03-18T06:59:34Z"
230+
"last_sync_commit": "5093f3b6e19ae5afb727b0f4a70ae628696d02b6",
231+
"last_pull_timestamp": "2026-03-18T07:19:33Z"
232232
}

.tickets/dso-472x.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
id: dso-472x
3-
status: open
3+
status: in_progress
44
deps: []
55
links: []
66
created: 2026-03-18T04:41:08Z
@@ -15,5 +15,8 @@ During Phase 4 (Create Stories), the preplanning skill instructs the agent to ru
1515

1616
## Acceptance Criteria
1717

18-
preplanning Phase 4 passes the done definition and user story body to tk create (via --description and/or --acceptance) so stories are complete at creation time
18+
- [ ] `skills/preplanning/SKILL.md` Phase 4 Create Stories step includes `--description` and/or `--acceptance` flags on the `tk create` call
19+
Verify: grep -A5 "tk create" /Users/joeoakhart/digital-service-orchestra/skills/preplanning/SKILL.md | grep -q "\-\-description\|\-\-acceptance"
20+
- [ ] Story tickets created by preplanning contain the user story body in their description field (not empty)
21+
Verify: bash tests/run-all.sh 2>&1 | grep -q "Results:.*0 failed"
1922

.tickets/dso-bxd0.md

Lines changed: 141 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
id: dso-bxd0
3-
status: open
3+
status: in_progress
44
deps: []
55
links: []
66
created: 2026-03-18T04:36:55Z
@@ -21,7 +21,147 @@ As a DSO maintainer, I want a clear audit of what is stale or missing in the cur
2121
- Any prerequisites or steps that exist in docs but not in the script, or vice versa
2222
- Report is committed or attached to this ticket as a note before closing
2323

24+
## Acceptance Criteria
25+
26+
- [ ] Audit report exists as a ticket note on dso-bxd0 listing stale `docs/INSTALL.md` content post-plugin-transition
27+
Verify: test -f /Users/joeoakhart/digital-service-orchestra/.tickets/dso-bxd0.md && grep -q "AUDIT" /Users/joeoakhart/digital-service-orchestra/.tickets/dso-bxd0.md
28+
- [ ] Audit report lists all gaps in `scripts/dso-setup.sh` (missing prerequisite checks, hook installation, example config copying)
29+
Verify: grep -q "gap\|missing\|stale" /Users/joeoakhart/digital-service-orchestra/.tickets/dso-bxd0.md
30+
2431
## Escalation Policy
2532

2633
**If at any point you lack high confidence in your understanding of the existing project setup — e.g., you cannot determine whether a config pattern is intentional, whether a script step is still needed, or what the expected post-plugin-transition behavior should be — stop and ask the user before proceeding. Err on the side of guidance over assumption. This is a setup audit; mischaracterizing the current state will propagate errors into all downstream stories.**
2734

35+
36+
## Notes
37+
38+
**2026-03-18T07:14:46Z**
39+
40+
AUDIT REPORT — DSO Setup Path (macOS, post-plugin-transition)
41+
42+
## INSTALL.md Stale Content
43+
44+
1. **`/dso:init` referenced as the verification step ("Verify Installation" section)** — The epic's goal is a new `/dso:project-setup` skill as the primary entry point. The existing `skills/init/SKILL.md` is a legacy skill that writes `workflow-config.yaml` (YAML format), not the flat KEY=VALUE `workflow-config.conf` that the current codebase uses everywhere. Referencing `/dso:init` for verification is stale on two levels: (a) the canonical config format is now `.conf`, not `.yaml`, and (b) the intended post-epic entry point is `/dso:project-setup`, which does not yet exist.
45+
46+
2. **`skills/init/SKILL.md` writes `workflow-config.yaml`** — The init skill itself is stale. It proposes writing a YAML file with a `version: 1` / `commands:` structure, but the live system uses `workflow-config.conf` (flat KEY=VALUE). The INSTALL.md "Optional: workflow-config.conf" section correctly describes the current format. The init skill and the INSTALL.md verify step are mismatched with each other and with the current system.
47+
48+
3. **"Verify Installation" expected output is aspirational** — INSTALL.md says `/dso:init` will print "a summary table of detected commands and a confirmation that hooks are registered." The actual `skills/init/SKILL.md` does not perform a hook registration check; it only detects the stack and writes config. The "hooks are registered" output described in INSTALL.md does not reflect current behavior.
49+
50+
4. **validate-work configuration section belongs in a config reference, not an install guide** — The "validate-work Configuration" section (lines 129-230) is detailed reference documentation for staging keys and the `.sh` vs `.md` dispatch mechanism. This content is misplaced in an installation guide. Post-epic, it should move to the `workflow-config.conf` key reference doc (Story D scope).
51+
52+
5. **workflow-config.conf copy command uses a literal placeholder path** — The instruction `cp /path/to/digital-service-orchestra/docs/workflow-config.example.conf workflow-config.conf` requires users to know the actual plugin installation directory. Post-plugin-transition, the correct path is resolved via `CLAUDE_PLUGIN_ROOT` or the dso shim. The command should use `$CLAUDE_PLUGIN_ROOT/docs/workflow-config.example.conf`.
53+
54+
6. **Git Hooks section omits `pre-commit install`** — The section tells users to copy `examples/pre-commit-config.example.yaml` and `examples/ci.example.yml` but says nothing about running `pre-commit install` (or `pre-commit install --hook-type pre-push`) to actually activate the hooks. Copying the config file without installing does not register the hooks.
55+
56+
7. **Option A install command (`claude plugin install`) is unverified**`claude plugin install github:navapbc/digital-service-orchestra` — this command fails with "Plugin not found in any configured marketplace" when tested. Option A as documented is either aspirational or requires marketplace registration that has not happened. It should be marked as aspirational/pending or removed.
57+
58+
8. **`scripts/dso-setup.sh` is entirely absent from INSTALL.md** — The script is the mechanical engine for setup per the epic scope, but INSTALL.md does not reference it. The Path Resolution section describes manual `CLAUDE_PLUGIN_ROOT` configuration in `settings.json`, but the actual setup mechanism (shim install + `dso.plugin_root` in `workflow-config.conf`) is invisible in the docs.
59+
60+
9. **`dso.plugin_root` config key not mentioned** — INSTALL.md describes only the `env.CLAUDE_PLUGIN_ROOT` approach in `settings.json` for path resolution. The `dso.plugin_root` key in `workflow-config.conf` (which is what `dso-setup.sh` actually writes) is never mentioned.
61+
62+
---
63+
64+
## dso-setup.sh Gaps
65+
66+
The current script does exactly two things:
67+
1. Copies `templates/host-project/dso` shim to `TARGET_REPO/.claude/scripts/dso`
68+
2. Writes or updates `dso.plugin_root=<PLUGIN_ROOT>` in `workflow-config.conf`
69+
70+
### Missing: Prerequisite Checks
71+
- No check for Claude Code CLI presence or version
72+
- No check for bash >= 4.0 (critical on macOS where /bin/bash is 3.2)
73+
- No check for GNU coreutils (`gtimeout`/`gstat`) — required by workflow scripts; macOS ships BSD coreutils only
74+
- No check for `pre-commit` tool being installed
75+
- No check for Python 3 (used by hooks for JSON parsing)
76+
- No check for `git` (assumed present, no explicit guard)
77+
78+
### Missing: Pre-commit Hook Installation
79+
- Does not run `pre-commit install` to activate commit hooks
80+
- Does not run `pre-commit install --hook-type pre-push` to activate push hooks
81+
- The pre-commit-config.example.yaml in examples/ includes both pre-commit and pre-push stage hooks, so both install calls are required
82+
83+
### Missing: Example Config Copying
84+
- Does not copy `examples/pre-commit-config.example.yaml` to `.pre-commit-config.yaml` (with guard: skip if target exists)
85+
- Does not copy `examples/ci.example.yml` to `.github/workflows/ci.yml` (with guard: skip if target exists)
86+
- Does not scaffold `workflow-config.conf` from `docs/workflow-config.example.conf` — only appends one key (`dso.plugin_root`)
87+
- Does not copy any of the templates: `templates/CLAUDE.md.template`, `templates/KNOWN-ISSUES.example.md`, `templates/DOCUMENTATION-GUIDE.example.md`
88+
89+
### Missing: Optional Dependency Detection and Prompts
90+
- No detection or install guidance for `acli` (optional, used by some skills)
91+
- No detection or install guidance for PyYAML (optional, used by legacy YAML config path)
92+
- Epic scope requires: detect both, offer install instructions, never block setup if absent
93+
94+
### Missing: Environment Variable Guidance
95+
- No output about `CLAUDE_PLUGIN_ROOT`, `JIRA_URL`, `JIRA_USER`, `JIRA_API_TOKEN`, `ARTIFACTS_DIR`, or other env vars used by hooks and skills
96+
- No guidance on where to set these (shell profile, `.env`, Claude Code settings.json)
97+
98+
### Missing: Cross-platform Handling
99+
- No detection of macOS vs Linux vs WSL
100+
- No guidance on platform-specific prerequisites (e.g., `brew install coreutils` on macOS)
101+
- `sed -i.bak` usage is BSD/GNU compatible — this one line is fine
102+
103+
### Missing: Success Output
104+
- Script exits silently with no user-facing confirmation of what was installed
105+
- No "next steps" message pointing to `/dso:project-setup` or to editing `workflow-config.conf`
106+
107+
### Note on Idempotency
108+
- The `dso.plugin_root` update uses a grep+sed guard — idempotent, correct
109+
- The shim copy is a silent overwrite — acceptable behavior for a setup script but should be documented
110+
111+
---
112+
113+
## Docs vs Script Mismatches
114+
115+
### Steps in INSTALL.md not in dso-setup.sh
116+
117+
| INSTALL.md instruction | Script status |
118+
|---|---|
119+
| Prerequisite checks (bash, coreutils, python3) | ABSENT |
120+
| Copy examples/pre-commit-config.example.yaml | ABSENT |
121+
| Copy examples/ci.example.yml | ABSENT |
122+
| Run `pre-commit install` (implied by Git Hooks section) | ABSENT |
123+
| Copy workflow-config.example.conf | ABSENT (only appends one key) |
124+
| Set CLAUDE_PLUGIN_ROOT in settings.json | ABSENT (script uses dso.plugin_root instead) |
125+
| Run /dso:init to verify | ABSENT (and /dso:init is stale anyway) |
126+
127+
### Steps in dso-setup.sh not in INSTALL.md
128+
129+
| Script action | INSTALL.md status |
130+
|---|---|
131+
| `git init` if TARGET_REPO is not a git repo | NOT MENTIONED |
132+
| Write dso.plugin_root to workflow-config.conf | NOT MENTIONED (docs only describe CLAUDE_PLUGIN_ROOT env var) |
133+
| Install dso shim to .claude/scripts/dso | NOT MENTIONED |
134+
135+
---
136+
137+
## Recommendations for Stories B–E
138+
139+
**Story B (Expand dso-setup.sh):**
140+
- Add prerequisite checks: bash version, Claude Code, GNU coreutils, pre-commit, Python 3
141+
- Add `pre-commit install` + `pre-commit install --hook-type pre-push`
142+
- Add example config copying with existence guards (.pre-commit-config.yaml, ci.yml, workflow-config.conf scaffolding)
143+
- Add optional dep detection (acli, PyYAML) with non-blocking prompts and install instructions
144+
- Add env var guidance output block at script completion
145+
- Add macOS vs Linux detection for platform-specific prerequisite guidance
146+
- Add WSL/Ubuntu detection
147+
- Add success summary with next-steps output
148+
149+
**Story C (Create /dso:project-setup skill):**
150+
- Must replace /dso:init as the verification/setup entry point described in INSTALL.md
151+
- Must call dso-setup.sh first (mechanical steps), then provide interactive wizard
152+
- skills/project-setup/ directory does not yet exist — needs to be created from scratch
153+
- Must be invokable before any project config exists (requires only CLAUDE_PLUGIN_ROOT)
154+
155+
**Story D (Document workflow-config.conf + env vars):**
156+
- Move the validate-work staging config section from INSTALL.md into the new config key reference
157+
- Document all env vars used by hooks and skills (CLAUDE_PLUGIN_ROOT, JIRA_*, ARTIFACTS_DIR, etc.)
158+
159+
**Story E (Rewrite INSTALL.md):**
160+
- Replace the Option A/B install + manual path resolution section with a two-step flow: install plugin → run dso-setup.sh → invoke /dso:project-setup
161+
- Remove stale /dso:init verification step; replace with /dso:project-setup
162+
- Add dso-setup.sh to the documented installation flow
163+
- Move validate-work staging config reference to Story D doc and link from INSTALL.md
164+
- Fix workflow-config.conf copy command to use $CLAUDE_PLUGIN_ROOT
165+
- Add explicit `pre-commit install` step
166+
- Document dso.plugin_root config key (currently undocumented)
167+
- Mark or remove Option A (claude plugin install) until it is supported in production

.tickets/dso-xtcg.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
id: dso-xtcg
3-
status: open
3+
status: in_progress
44
deps: []
55
links: []
66
created: 2026-03-18T04:37:01Z
@@ -20,6 +20,15 @@ As an engineer configuring DSO, I want every `workflow-config.conf` key and envi
2020
- Scope explicitly includes: CLAUDE_PLUGIN_ROOT, DSO_ROOT, and any vars consumed outside of hook scripts
2121
- Reference documentation committed to `docs/` (file path TBD based on audit in Story A)
2222

23+
## Acceptance Criteria
24+
25+
- [ ] Reference documentation file committed to `docs/` covering all `workflow-config.conf` keys with description, accepted values, default, and which component uses each
26+
Verify: test -f /Users/joeoakhart/digital-service-orchestra/docs/CONFIGURATION-REFERENCE.md || ls /Users/joeoakhart/digital-service-orchestra/docs/*config* 2>/dev/null | grep -q "."
27+
- [ ] Reference documentation covers all environment variables used by hooks, scripts, and skills including CLAUDE_PLUGIN_ROOT and DSO_ROOT
28+
Verify: grep -l "CLAUDE_PLUGIN_ROOT\|DSO_ROOT" /Users/joeoakhart/digital-service-orchestra/docs/*.md 2>/dev/null | grep -q "."
29+
- [ ] `scripts/check-skill-refs.sh` exits 0 on all new documentation files
30+
Verify: bash /Users/joeoakhart/digital-service-orchestra/scripts/check-skill-refs.sh 2>&1 | tail -1 | grep -q "0"
31+
2332
## Escalation Policy
2433

2534
**If at any point you lack high confidence in your understanding of the existing project setup — e.g., you are unsure whether a config key is still active, what a variable's expected values are, or which components consume a given env var — stop and ask the user before documenting. Err on the side of guidance over assumption. Incorrect reference documentation is worse than missing documentation: it actively misleads engineers during setup.**

.worktree-blackboard.json

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
11
{
22
"version": 1,
3-
"batch_id": "batch-1773802212-64303",
4-
"created_at": "2026-03-18T02:50:12Z",
5-
"agents": [
6-
{
7-
"task_id": "dso-wlwa",
8-
"files_owned": [
9-
"scripts/check-skill-refs.sh",
10-
"tests/scripts/test-check-skill-refs.sh"
11-
],
12-
"status": "dispatched"
13-
}
14-
]
3+
"batch_id": "batch-1773817896-69589",
4+
"created_at": "2026-03-18T07:11:36Z",
5+
"agents": []
156
}

0 commit comments

Comments
 (0)