@bvdm/delano 0.1.5 → 0.1.8
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/.delano/README.md +7 -0
- package/.delano/viewer/README.md +19 -0
- package/.delano/viewer/public/app.js +818 -0
- package/.delano/viewer/public/explorer.svg +3 -0
- package/.delano/viewer/public/index.html +21 -0
- package/.delano/viewer/public/markdown.svg +6 -0
- package/.delano/viewer/public/styles.css +1042 -0
- package/.delano/viewer/public/vscode.svg +24 -0
- package/.delano/viewer/server.js +389 -0
- package/HANDBOOK.md +66 -45
- package/README.md +21 -2
- package/assets/install-manifest.json +112 -23
- package/assets/payload/.agents/README.md +31 -6
- package/assets/payload/.agents/adapters/claude/README.md +22 -3
- package/assets/payload/.agents/adapters/codex/README.md +22 -3
- package/assets/payload/.agents/adapters/opencode/README.md +22 -3
- package/assets/payload/.agents/adapters/pi/README.md +22 -3
- package/assets/payload/.agents/common/log-safety.js +55 -0
- package/assets/payload/.agents/eval-fixtures/skill-output/invalid/missing-evidence/output.json +6 -0
- package/assets/payload/.agents/eval-fixtures/skill-output/valid/summary/output.json +7 -0
- package/assets/payload/.agents/fixtures/github/status-snapshot.json +6 -0
- package/assets/payload/.agents/fixtures/linear/issue-snapshot.json +6 -0
- package/assets/payload/.agents/hooks/bash-worktree-fix.sh +2 -1
- package/assets/payload/.agents/hooks/post-tool-logger.js +2 -1
- package/assets/payload/.agents/hooks/session-tracker.js +0 -0
- package/assets/payload/.agents/hooks/user-prompt-logger.js +17 -1
- package/assets/payload/.agents/logs/delivery-metrics.md +22 -0
- package/assets/payload/.agents/logs/schema.md +20 -1
- package/assets/payload/.agents/rules/delivery-modes.md +17 -0
- package/assets/payload/.agents/schemas/README.md +22 -0
- package/assets/payload/.agents/schemas/artifact-scope.json +237 -0
- package/assets/payload/.agents/schemas/artifacts/context.schema.json +11 -0
- package/assets/payload/.agents/schemas/artifacts/decision_log.schema.json +12 -0
- package/assets/payload/.agents/schemas/artifacts/evidence.schema.json +17 -0
- package/assets/payload/.agents/schemas/artifacts/plan.schema.json +83 -0
- package/assets/payload/.agents/schemas/artifacts/spec.schema.json +101 -0
- package/assets/payload/.agents/schemas/artifacts/task.schema.json +121 -0
- package/assets/payload/.agents/schemas/artifacts/update.schema.json +12 -0
- package/assets/payload/.agents/schemas/artifacts/workstream.schema.json +66 -0
- package/assets/payload/.agents/schemas/evidence-map.json +53 -0
- package/assets/payload/.agents/schemas/learning/closeout-learning-proposal.schema.json +20 -0
- package/assets/payload/.agents/schemas/learning/delivery-metric-event.schema.json +21 -0
- package/assets/payload/.agents/schemas/leases/lease.schema.json +39 -0
- package/assets/payload/.agents/schemas/metrics/delivery-event.schema.json +29 -0
- package/assets/payload/.agents/schemas/metrics/delivery-events.schema.json +49 -0
- package/assets/payload/.agents/schemas/operating-modes.json +42 -0
- package/assets/payload/.agents/schemas/status-transitions.json +31 -0
- package/assets/payload/.agents/schemas/sync/drift-report.schema.json +25 -0
- package/assets/payload/.agents/schemas/sync/drift-taxonomy.json +38 -0
- package/assets/payload/.agents/schemas/sync/sync-map.schema.json +39 -0
- package/assets/payload/.agents/scripts/README.md +1 -0
- package/assets/payload/.agents/scripts/audit-context-files.mjs +54 -0
- package/assets/payload/.agents/scripts/audit-context-scoring.mjs +14 -0
- package/assets/payload/.agents/scripts/build-drift-report.mjs +133 -0
- package/assets/payload/.agents/scripts/check-artifact-schemas.mjs +116 -0
- package/assets/payload/.agents/scripts/check-closeout-learning-proposals.mjs +23 -0
- package/assets/payload/.agents/scripts/check-context-audit.mjs +61 -0
- package/assets/payload/.agents/scripts/check-delivery-metric-events.mjs +35 -0
- package/assets/payload/.agents/scripts/check-delivery-metrics.mjs +52 -0
- package/assets/payload/.agents/scripts/check-evidence-map.mjs +143 -0
- package/assets/payload/.agents/scripts/check-github-status-inspection.mjs +93 -0
- package/assets/payload/.agents/scripts/check-github-sync.mjs +159 -0
- package/assets/payload/.agents/scripts/check-handoff-summaries.mjs +57 -0
- package/assets/payload/.agents/scripts/check-lease-conflicts.mjs +24 -0
- package/assets/payload/.agents/scripts/check-lease-contracts.mjs +17 -0
- package/assets/payload/.agents/scripts/check-linear-issue-inspection.mjs +63 -0
- package/assets/payload/.agents/scripts/check-local-sync-map.mjs +151 -0
- package/assets/payload/.agents/scripts/check-log-safety.sh +62 -0
- package/assets/payload/.agents/scripts/check-operating-modes.mjs +99 -0
- package/assets/payload/.agents/scripts/check-path-standards.sh +1 -1
- package/assets/payload/.agents/scripts/check-skill-output-evals.mjs +13 -0
- package/assets/payload/.agents/scripts/check-status-transitions.mjs +169 -0
- package/assets/payload/.agents/scripts/check-strict-fixtures.mjs +140 -0
- package/assets/payload/.agents/scripts/check-sync-schemas.mjs +52 -0
- package/assets/payload/.agents/scripts/check-text-safety.mjs +158 -0
- package/assets/payload/.agents/scripts/check-worktree-health.mjs +100 -0
- package/assets/payload/.agents/scripts/fix-path-standards.sh +1 -1
- package/assets/payload/.agents/scripts/git-sparse-download.sh +0 -0
- package/assets/payload/.agents/scripts/inspect-github-sync.mjs +108 -0
- package/assets/payload/.agents/scripts/lease-manager.mjs +88 -0
- package/assets/payload/.agents/scripts/log-event.js +3 -0
- package/assets/payload/.agents/scripts/log-event.sh +0 -0
- package/assets/payload/.agents/scripts/plan-sync-repairs.mjs +66 -0
- package/assets/payload/.agents/scripts/pm/blocked.sh +0 -0
- package/assets/payload/.agents/scripts/pm/epic-list.sh +0 -0
- package/assets/payload/.agents/scripts/pm/in-progress.sh +0 -0
- package/assets/payload/.agents/scripts/pm/init.sh +0 -0
- package/assets/payload/.agents/scripts/pm/next.sh +0 -0
- package/assets/payload/.agents/scripts/pm/prd-list.sh +0 -0
- package/assets/payload/.agents/scripts/pm/search.sh +0 -0
- package/assets/payload/.agents/scripts/pm/standup.sh +0 -0
- package/assets/payload/.agents/scripts/pm/status.sh +0 -0
- package/assets/payload/.agents/scripts/pm/validate.sh +657 -2
- package/assets/payload/.agents/scripts/propose-closeout-learning.mjs +20 -0
- package/assets/payload/.agents/scripts/query-log.sh +0 -0
- package/assets/payload/.agents/scripts/read-local-sync-map.mjs +135 -0
- package/assets/payload/.agents/scripts/select-next-task.mjs +22 -0
- package/assets/payload/.agents/scripts/summarize-project-metrics.mjs +15 -0
- package/assets/payload/.agents/scripts/test-and-log.sh +0 -0
- package/assets/payload/.agents/skills/README.md +6 -0
- package/assets/payload/.agents/skills/closeout-skill/SKILL.md +3 -0
- package/assets/payload/.agents/skills/closeout-skill/references/runbook.md +5 -2
- package/assets/payload/.agents/skills/closeout-skill/templates/closure-checklist.md +2 -0
- package/assets/payload/.agents/skills/closeout-skill/templates/learning-proposal.md +21 -0
- package/assets/payload/.agents/skills/closeout-skill/templates/learning-proposals.md +25 -0
- package/assets/payload/.agents/skills/manage-context/SKILL.md +55 -0
- package/assets/payload/.agents/skills/manage-context/references/context-audit-checklist.md +26 -0
- package/assets/payload/.agents/skills/manage-context/references/runbook.md +26 -0
- package/assets/payload/.agents/skills/manage-context/templates/context-debt-report.md +22 -0
- package/assets/payload/.agents/skills/manage-context/templates/context-refresh-summary.md +13 -0
- package/assets/payload/.agents/skills/onboarding/SKILL.md +49 -0
- package/assets/payload/.agents/skills/onboarding/references/agents-md-best-practices.md +76 -0
- package/assets/payload/.agents/skills/prototype-skill/SKILL.md +51 -0
- package/assets/payload/.agents/skills/prototype-skill/references/probe-design-checklist.md +26 -0
- package/assets/payload/.agents/skills/prototype-skill/references/runbook.md +27 -0
- package/assets/payload/.agents/skills/prototype-skill/templates/probe-approval-recommendation.md +13 -0
- package/assets/payload/.agents/skills/prototype-skill/templates/probe-findings.md +16 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/broken-dependencies/dependency.md +18 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/broken-dependencies/task.md +24 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/invalid-transition/task.md +20 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/missing-evidence/task.md +27 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/path-leak/task.md +27 -0
- package/assets/payload/.agents/validation-fixtures/strict/invalid/stale-context/context.md +9 -0
- package/assets/payload/.agents/validation-fixtures/strict/manifest.json +11 -0
- package/assets/payload/.agents/validation-fixtures/strict/valid/minimal-project/task.md +27 -0
- package/assets/payload/.delano/viewer/README.md +19 -0
- package/assets/payload/.delano/viewer/public/app.js +818 -0
- package/assets/payload/.delano/viewer/public/explorer.svg +3 -0
- package/assets/payload/.delano/viewer/public/index.html +21 -0
- package/assets/payload/.delano/viewer/public/markdown.svg +6 -0
- package/assets/payload/.delano/viewer/public/styles.css +1042 -0
- package/assets/payload/.delano/viewer/public/vscode.svg +24 -0
- package/assets/payload/.delano/viewer/server.js +389 -0
- package/assets/payload/.project/templates/plan.md +1 -1
- package/assets/payload/.project/templates/spec.md +1 -1
- package/assets/payload/.project/templates/task.md +1 -0
- package/assets/payload/HANDBOOK.md +66 -45
- package/assets/payload/install-delano.sh +0 -0
- package/install-delano.sh +0 -0
- package/package.json +31 -2
- package/src/cli/commands/onboarding.js +29 -0
- package/src/cli/commands/viewer.js +81 -0
- package/src/cli/index.js +20 -0
- package/src/cli/lib/install.js +1 -0
- package/src/cli/lib/onboarding.js +243 -0
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## First Edition, v3
|
|
4
4
|
|
|
5
|
-
Version: 3.
|
|
6
|
-
Last updated: 2026-04
|
|
5
|
+
Version: 3.2
|
|
6
|
+
Last updated: 2026-05-04
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -56,7 +56,7 @@ Its core objective is:
|
|
|
56
56
|
|
|
57
57
|
### 1.1 Primary flow
|
|
58
58
|
|
|
59
|
-
**Outcome ->
|
|
59
|
+
**Outcome -> Planned Spec -> Probe Decision -> Active Spec -> Delivery Project -> Workstreams -> Tasks -> Linear Issues -> PRs -> Release -> Learnings**
|
|
60
60
|
|
|
61
61
|
### 1.2 Design principles
|
|
62
62
|
|
|
@@ -201,7 +201,7 @@ Recommended naming:
|
|
|
201
201
|
|
|
202
202
|
Operational rule:
|
|
203
203
|
|
|
204
|
-
- Every task issue must carry one workstream identifier.
|
|
204
|
+
- Every task issue must carry one workstream identifier in task frontmatter (`workstream: WS-A`) and the corresponding Linear workstream label (`ws-a`).
|
|
205
205
|
|
|
206
206
|
#### 4.2.5 Task -> Issue
|
|
207
207
|
|
|
@@ -296,7 +296,7 @@ A coding agent is Delano-compatible if it can:
|
|
|
296
296
|
name: <project-name>
|
|
297
297
|
slug: <kebab-case>
|
|
298
298
|
owner: <person-or-team>
|
|
299
|
-
status:
|
|
299
|
+
status: planned|active|complete|deferred
|
|
300
300
|
created: <ISO8601 UTC>
|
|
301
301
|
updated: <ISO8601 UTC>
|
|
302
302
|
outcome: <measurable target>
|
|
@@ -325,13 +325,13 @@ Required sections:
|
|
|
325
325
|
|
|
326
326
|
```yaml
|
|
327
327
|
name: <project-name>
|
|
328
|
-
status: planned|
|
|
328
|
+
status: planned|active|done|deferred
|
|
329
329
|
lead: <person>
|
|
330
330
|
created: <ISO8601 UTC>
|
|
331
331
|
updated: <ISO8601 UTC>
|
|
332
332
|
linear_project_id: <id>
|
|
333
333
|
risk_level: low|medium|high
|
|
334
|
-
spec_status_at_plan_time:
|
|
334
|
+
spec_status_at_plan_time: planned|active|complete|deferred
|
|
335
335
|
```
|
|
336
336
|
|
|
337
337
|
Required sections:
|
|
@@ -351,7 +351,8 @@ Required sections:
|
|
|
351
351
|
```yaml
|
|
352
352
|
id: T-001
|
|
353
353
|
name: <task-title>
|
|
354
|
-
status:
|
|
354
|
+
status: ready|in-progress|blocked|done|deferred
|
|
355
|
+
workstream: WS-A
|
|
355
356
|
created: <ISO8601 UTC>
|
|
356
357
|
updated: <ISO8601 UTC>
|
|
357
358
|
linear_issue_id: <id-or-empty>
|
|
@@ -360,8 +361,8 @@ github_pr: <url-or-empty>
|
|
|
360
361
|
depends_on: []
|
|
361
362
|
conflicts_with: []
|
|
362
363
|
parallel: true|false
|
|
363
|
-
priority: low|medium|high
|
|
364
|
-
estimate:
|
|
364
|
+
priority: low|medium|high
|
|
365
|
+
estimate: S|M|L|XL
|
|
365
366
|
```
|
|
366
367
|
|
|
367
368
|
Required sections:
|
|
@@ -376,7 +377,7 @@ Required sections:
|
|
|
376
377
|
|
|
377
378
|
- `created` immutable
|
|
378
379
|
- `updated` real UTC system timestamp
|
|
379
|
-
- probe decision explicit before spec
|
|
380
|
+
- probe decision explicit before spec activation
|
|
380
381
|
- dependency graph acyclic before execution
|
|
381
382
|
- no absolute path leakage in shared output
|
|
382
383
|
|
|
@@ -384,66 +385,71 @@ Required sections:
|
|
|
384
385
|
|
|
385
386
|
## 7) Status models and transition policy
|
|
386
387
|
|
|
387
|
-
### 7.1 Why
|
|
388
|
+
### 7.1 Why compact runtime states exist
|
|
388
389
|
|
|
389
|
-
|
|
390
|
+
The v0.2 runtime uses compact status sets that are enforced by schemas and validation:
|
|
390
391
|
|
|
391
|
-
- `
|
|
392
|
-
- `
|
|
393
|
-
- `
|
|
392
|
+
- `planned` means a spec, plan, or workstream is defined but not actively being executed.
|
|
393
|
+
- `ready` means a task is executable and should not carry unresolved local dependencies.
|
|
394
|
+
- `in-progress` means implementation has started.
|
|
395
|
+
- `blocked` exposes dependency constraints explicitly.
|
|
396
|
+
- `done` and `complete` are terminal success states for delivery plans/tasks and specs respectively.
|
|
397
|
+
- `deferred` is the terminal non-completion state for postponed or canceled work.
|
|
398
|
+
|
|
399
|
+
Idea triage belongs outside executable task files. Review is a gate recorded in evidence, updates, quality notes, or PR state; it is not a canonical v0.2 task status.
|
|
394
400
|
|
|
395
401
|
### 7.2 Lifecycle definitions
|
|
396
402
|
|
|
397
403
|
#### Spec
|
|
398
404
|
|
|
399
|
-
`
|
|
400
|
-
optional terminal: `
|
|
405
|
+
`planned -> active -> complete`
|
|
406
|
+
optional terminal: `deferred`
|
|
401
407
|
|
|
402
|
-
Probe decision rule while spec is `
|
|
408
|
+
Probe decision rule while spec is `planned`:
|
|
403
409
|
|
|
404
|
-
- `probe_required: false` allows
|
|
405
|
-
- `probe_required: true` requires a Prototype Probe and recorded findings before
|
|
410
|
+
- `probe_required: false` allows activation once other discovery gates pass.
|
|
411
|
+
- `probe_required: true` requires a Prototype Probe and recorded findings before activation.
|
|
406
412
|
|
|
407
413
|
#### Delivery Project
|
|
408
414
|
|
|
409
|
-
`planned ->
|
|
410
|
-
optional terminal: `
|
|
415
|
+
`planned -> active -> done`
|
|
416
|
+
optional terminal: `deferred`
|
|
411
417
|
|
|
412
418
|
#### Task
|
|
413
419
|
|
|
414
|
-
`
|
|
415
|
-
optional branches: `blocked`, `
|
|
420
|
+
`ready -> in-progress -> done`
|
|
421
|
+
optional branches: `blocked`, `deferred`
|
|
416
422
|
|
|
417
423
|
### 7.3 Transition policy
|
|
418
424
|
|
|
419
|
-
- No `in-progress` with unmet
|
|
425
|
+
- No `ready`, `in-progress`, or `done` transition with unmet local dependencies.
|
|
420
426
|
- No `done` without evidence completion.
|
|
421
427
|
- No project `done` with unresolved required tasks.
|
|
422
|
-
- No spec `
|
|
423
|
-
- No spec `
|
|
428
|
+
- No spec `active` without explicit probe decision fields.
|
|
429
|
+
- No spec `active` with unresolved required probe findings.
|
|
424
430
|
- No spec `complete` without outcome review.
|
|
425
431
|
|
|
432
|
+
Current artifact scans and proposed transitions are strict for local task dependencies: `ready`, `in-progress`, and `done` tasks fail validation when they depend on unresolved local tasks.
|
|
433
|
+
|
|
426
434
|
### 7.4 Review semantics
|
|
427
435
|
|
|
428
|
-
|
|
436
|
+
Review is a quality gate before closure. It may include one or more:
|
|
429
437
|
|
|
430
438
|
- code review
|
|
431
439
|
- quality gate verification
|
|
432
440
|
- product acceptance for user-visible changes
|
|
433
441
|
|
|
434
|
-
Teams must define exact review semantics in local policy.
|
|
442
|
+
Teams must define exact review semantics in local policy and record the result in evidence, updates, or PR state.
|
|
435
443
|
|
|
436
444
|
### 7.5 Explicit Delano -> Linear status mapping
|
|
437
445
|
|
|
438
446
|
| Delano task status | Preferred Linear state |
|
|
439
447
|
|---|---|
|
|
440
|
-
| backlog | Triage or Backlog |
|
|
441
448
|
| ready | Todo |
|
|
442
449
|
| in-progress | In Progress |
|
|
443
|
-
| review | In Review |
|
|
444
450
|
| done | Done |
|
|
445
451
|
| blocked | Blocked (if exists) or Todo + blocked relation/label |
|
|
446
|
-
|
|
|
452
|
+
| deferred | Canceled, Icebox, or Backlog depending on team policy |
|
|
447
453
|
|
|
448
454
|
If team workflow names differ, maintain this semantic mapping in sync rules.
|
|
449
455
|
|
|
@@ -458,6 +464,17 @@ If team workflow names differ, maintain this semantic mapping in sync rules.
|
|
|
458
464
|
- **Rules**: constraints and policy
|
|
459
465
|
- **Hooks**: runtime tracking and guardrails
|
|
460
466
|
|
|
467
|
+
### 8.8 v0.2 runtime foundation
|
|
468
|
+
|
|
469
|
+
v0.2 adds enforceable local runtime surfaces around the handbook process:
|
|
470
|
+
|
|
471
|
+
- **Operating modes**: Mode 0 patch, Mode 1 scoped change, Mode 2 feature, Mode 3 uncertain feature, and Mode 4 multi-stream. Modes are additive hints for task depth and required proof, not a reason to skip safety gates.
|
|
472
|
+
- **Contract validation**: schemas and validators cover artifact scope, schema shape, operating modes, status transitions, evidence maps, strict fixtures, sync scaffolding, leases, metrics, text safety, context audit, and skill-output evals.
|
|
473
|
+
- **Evidence expectations**: done tasks need checked acceptance criteria plus implementation or validation evidence. v0.2 evidence mapping remains markdown-based; full criterion-to-ledger instance validation is a later maturity gate.
|
|
474
|
+
- **Dry-run sync**: GitHub and Linear sync surfaces inspect, classify drift, and produce repair plans without remote mutation unless a future explicit apply gate is approved.
|
|
475
|
+
- **Lease semantics**: multi-agent work uses leases with conflict zones, lifecycle state, and handoff summaries. Conflict checks must run before overlapping work proceeds.
|
|
476
|
+
- **Release gates**: `npm run build:assets`, package-manifest drift checks, PM validation, and `npm test` are the local release baseline. Formal CI publishing, enterprise state-machine orchestration, and non-mocked Linear behavior remain later maturity gates.
|
|
477
|
+
|
|
461
478
|
### 8.2 Skill contract standard
|
|
462
479
|
|
|
463
480
|
Each skill must define:
|
|
@@ -476,7 +493,7 @@ Each skill must define:
|
|
|
476
493
|
|
|
477
494
|
```yaml
|
|
478
495
|
name: breakdown-skill
|
|
479
|
-
intent: decompose
|
|
496
|
+
intent: decompose active plan into atomic tasks
|
|
480
497
|
inputs:
|
|
481
498
|
- spec_path
|
|
482
499
|
- plan_path
|
|
@@ -549,6 +566,7 @@ script_hooks:
|
|
|
549
566
|
| `query-log.sh` | query change stream |
|
|
550
567
|
| `test-and-log.sh` | capture test execution logs |
|
|
551
568
|
| `check-path-standards.sh` | path/privacy enforcement |
|
|
569
|
+
| `check-text-safety.mjs` | hidden/bidirectional Unicode control enforcement |
|
|
552
570
|
| `fix-path-standards.sh` | path normalization |
|
|
553
571
|
| `git-sparse-download.sh` | sparse external resource retrieval |
|
|
554
572
|
|
|
@@ -598,7 +616,7 @@ This keeps rapid learning without weakening team governance.
|
|
|
598
616
|
|
|
599
617
|
**Goal**
|
|
600
618
|
|
|
601
|
-
- define a measurable outcome,
|
|
619
|
+
- define a measurable outcome, create the planned Spec, and make the probe decision explicit
|
|
602
620
|
|
|
603
621
|
**Entry criteria**
|
|
604
622
|
|
|
@@ -611,7 +629,7 @@ This keeps rapid learning without weakening team governance.
|
|
|
611
629
|
|
|
612
630
|
**Exit artifacts**
|
|
613
631
|
|
|
614
|
-
-
|
|
632
|
+
- planned `spec.md` with uncertainty and probe decision recorded
|
|
615
633
|
|
|
616
634
|
**Gate**
|
|
617
635
|
|
|
@@ -624,29 +642,30 @@ This keeps rapid learning without weakening team governance.
|
|
|
624
642
|
|
|
625
643
|
**Goal**
|
|
626
644
|
|
|
627
|
-
- retire or bound material uncertainty before spec
|
|
645
|
+
- retire or bound material uncertainty before spec activation
|
|
628
646
|
|
|
629
647
|
**Entry criteria**
|
|
630
648
|
|
|
631
|
-
- `spec.md` is still `
|
|
649
|
+
- `spec.md` is still `planned`
|
|
632
650
|
- `probe_required: true`
|
|
633
651
|
|
|
634
652
|
**Primary components**
|
|
635
653
|
|
|
654
|
+
- skill: `prototype-skill`
|
|
636
655
|
- discovery artifacts from `spec.md`
|
|
637
656
|
- targeted prototype commands or narrow experiments
|
|
638
657
|
- `pm/validate.sh` if probe findings mutate contracts
|
|
639
658
|
|
|
640
659
|
**Exit artifacts**
|
|
641
660
|
|
|
642
|
-
- updated
|
|
643
|
-
- probe findings and
|
|
661
|
+
- updated planned `spec.md`
|
|
662
|
+
- probe findings and activation recommendation
|
|
644
663
|
|
|
645
664
|
**Gate**
|
|
646
665
|
|
|
647
666
|
- probe findings recorded
|
|
648
667
|
- touched surfaces and footguns explicit
|
|
649
|
-
-
|
|
668
|
+
- activation recommendation clear
|
|
650
669
|
|
|
651
670
|
### Stage C: Planning
|
|
652
671
|
|
|
@@ -656,7 +675,7 @@ This keeps rapid learning without weakening team governance.
|
|
|
656
675
|
|
|
657
676
|
**Entry criteria**
|
|
658
677
|
|
|
659
|
-
- `spec.md`
|
|
678
|
+
- `spec.md` active
|
|
660
679
|
|
|
661
680
|
**Primary components**
|
|
662
681
|
|
|
@@ -979,6 +998,7 @@ Every update should answer:
|
|
|
979
998
|
- immutable creation timestamps
|
|
980
999
|
- UTC timestamp policy
|
|
981
1000
|
- path privacy enforcement
|
|
1001
|
+
- hidden/bidirectional Unicode control enforcement
|
|
982
1002
|
- GitHub remote safety checks
|
|
983
1003
|
|
|
984
1004
|
### 14.2 Default team policy pack
|
|
@@ -1171,7 +1191,7 @@ This section is designed for live planning and execution meetings.
|
|
|
1171
1191
|
name: <project-name>
|
|
1172
1192
|
slug: <kebab-case>
|
|
1173
1193
|
owner: <person-or-team>
|
|
1174
|
-
status:
|
|
1194
|
+
status: planned
|
|
1175
1195
|
created: <ISO8601 UTC>
|
|
1176
1196
|
updated: <ISO8601 UTC>
|
|
1177
1197
|
outcome: <measurable target>
|
|
@@ -1222,7 +1242,7 @@ created: <ISO8601 UTC>
|
|
|
1222
1242
|
updated: <ISO8601 UTC>
|
|
1223
1243
|
linear_project_id:
|
|
1224
1244
|
risk_level: <low|medium|high>
|
|
1225
|
-
spec_status_at_plan_time: <
|
|
1245
|
+
spec_status_at_plan_time: <planned|active|complete|deferred>
|
|
1226
1246
|
---
|
|
1227
1247
|
|
|
1228
1248
|
# Delivery Plan: <project-name>
|
|
@@ -1277,6 +1297,7 @@ updated: <ISO8601 UTC>
|
|
|
1277
1297
|
id: T-001
|
|
1278
1298
|
name: <task-title>
|
|
1279
1299
|
status: ready
|
|
1300
|
+
workstream: WS-A
|
|
1280
1301
|
created: <ISO8601 UTC>
|
|
1281
1302
|
updated: <ISO8601 UTC>
|
|
1282
1303
|
linear_issue_id:
|
|
@@ -1424,7 +1445,7 @@ For each active epic scope:
|
|
|
1424
1445
|
|
|
1425
1446
|
#### Step 4: map statuses
|
|
1426
1447
|
|
|
1427
|
-
- `open` -> `
|
|
1448
|
+
- `open` -> `ready` when executable, or `deferred` when not actionable in the current delivery scope
|
|
1428
1449
|
- `in-progress` -> `in-progress`
|
|
1429
1450
|
- `closed` -> `done`
|
|
1430
1451
|
|
|
File without changes
|
package/install-delano.sh
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bvdm/delano",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "CLI for the Delano delivery runtime.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"bin": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"bin/",
|
|
15
15
|
"src/",
|
|
16
16
|
"assets/",
|
|
17
|
+
".delano/",
|
|
17
18
|
"README.md",
|
|
18
19
|
"HANDBOOK.md",
|
|
19
20
|
"install-delano.sh"
|
|
@@ -21,6 +22,34 @@
|
|
|
21
22
|
"scripts": {
|
|
22
23
|
"build:assets": "node scripts/build-npm-assets.mjs",
|
|
23
24
|
"prepack": "npm run build:assets",
|
|
24
|
-
"test": "node --test"
|
|
25
|
+
"test": "node --test",
|
|
26
|
+
"viewer": "node .delano/viewer/server.js",
|
|
27
|
+
"check:package-manifest": "node scripts/check-package-manifest-drift.mjs",
|
|
28
|
+
"check:agent-entry-docs": "node scripts/check-agent-entry-docs.mjs",
|
|
29
|
+
"check:artifact-scope": "node scripts/check-artifact-scope.mjs",
|
|
30
|
+
"check:artifact-schemas": "node scripts/check-artifact-schemas.mjs",
|
|
31
|
+
"check:operating-modes": "node scripts/check-operating-modes.mjs",
|
|
32
|
+
"check:status-transitions": "node scripts/check-status-transitions.mjs",
|
|
33
|
+
"check:evidence-map": "node scripts/check-evidence-map.mjs",
|
|
34
|
+
"check:strict-fixtures": "node scripts/check-strict-fixtures.mjs",
|
|
35
|
+
"check:sync-schemas": "node scripts/check-sync-schemas.mjs",
|
|
36
|
+
"check:local-sync-map": "node scripts/read-local-sync-map.mjs",
|
|
37
|
+
"check:github-sync": "node scripts/check-github-sync.mjs",
|
|
38
|
+
"check:github-status": "node scripts/check-github-status-inspection.mjs",
|
|
39
|
+
"check:linear-inspection": "node scripts/check-linear-issue-inspection.mjs",
|
|
40
|
+
"check:drift-report": "node scripts/build-drift-report.mjs",
|
|
41
|
+
"check:repair-plan": "node scripts/plan-sync-repairs.mjs",
|
|
42
|
+
"check:lease-contracts": "node scripts/check-lease-contracts.mjs",
|
|
43
|
+
"check:lease-manager": "node scripts/lease-manager.mjs self-test",
|
|
44
|
+
"check:lease-conflicts": "node scripts/check-lease-conflicts.mjs --zone scripts/lease-manager.mjs --mode exclusive",
|
|
45
|
+
"check:next-task": "node scripts/select-next-task.mjs --project delano-multi-agent-execution --stream default",
|
|
46
|
+
"check:worktree-health": "node scripts/check-worktree-health.mjs",
|
|
47
|
+
"check:text-safety": "node scripts/check-text-safety.mjs",
|
|
48
|
+
"check:delivery-metrics": "node scripts/check-delivery-metrics.mjs",
|
|
49
|
+
"check:handoff-summaries": "node scripts/check-handoff-summaries.mjs --self-test",
|
|
50
|
+
"check:project-metrics": "node scripts/summarize-project-metrics.mjs --json",
|
|
51
|
+
"check:context-audit": "node scripts/check-context-audit.mjs",
|
|
52
|
+
"check:skill-output-evals": "node scripts/check-skill-output-evals.mjs",
|
|
53
|
+
"check:closeout-learning": "node scripts/propose-closeout-learning.mjs --json && node scripts/check-closeout-learning-proposals.mjs"
|
|
25
54
|
}
|
|
26
55
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const { ANALYSIS_APPROVAL_FLAG, runOnboarding } = require("../lib/onboarding");
|
|
2
|
+
|
|
3
|
+
function getOnboardingHelp() {
|
|
4
|
+
return [
|
|
5
|
+
"Usage:",
|
|
6
|
+
" delano onboarding [options]",
|
|
7
|
+
"",
|
|
8
|
+
"Options:",
|
|
9
|
+
" --target <dir> Analyze the nearest AGENTS.md starting from this directory.",
|
|
10
|
+
` ${ANALYSIS_APPROVAL_FLAG} Explicitly approve AGENTS.md analysis without an interactive prompt.`,
|
|
11
|
+
" -h, --help Show command help.",
|
|
12
|
+
"",
|
|
13
|
+
"Behavior:",
|
|
14
|
+
" - Finds AGENTS.md by searching upward from the target directory.",
|
|
15
|
+
" - Requires explicit approval before analyzing the file.",
|
|
16
|
+
" - Uses the packaged onboarding skill rubric to print recommendations.",
|
|
17
|
+
" - Never edits AGENTS.md; changes remain a separate explicit approval step.",
|
|
18
|
+
"",
|
|
19
|
+
"Examples:",
|
|
20
|
+
" delano onboarding",
|
|
21
|
+
` delano onboarding ${ANALYSIS_APPROVAL_FLAG}`,
|
|
22
|
+
" delano onboarding --target ../repo"
|
|
23
|
+
].join("\n");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = {
|
|
27
|
+
getOnboardingHelp,
|
|
28
|
+
runOnboarding
|
|
29
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const path = require("node:path");
|
|
2
|
+
const { spawnSync } = require("node:child_process");
|
|
3
|
+
|
|
4
|
+
const { CliError } = require("../lib/errors");
|
|
5
|
+
const { findDelanoRoot, getPackageRoot } = require("../lib/runtime");
|
|
6
|
+
|
|
7
|
+
function parseViewerArgs(args) {
|
|
8
|
+
const options = {
|
|
9
|
+
target: process.cwd()
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
13
|
+
const arg = args[index];
|
|
14
|
+
|
|
15
|
+
if (arg === "--target") {
|
|
16
|
+
index += 1;
|
|
17
|
+
if (!args[index]) {
|
|
18
|
+
throw new CliError("Missing value for --target.", 1);
|
|
19
|
+
}
|
|
20
|
+
options.target = args[index];
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (arg.startsWith("--target=")) {
|
|
25
|
+
options.target = arg.slice("--target=".length);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
throw new CliError(`Unknown viewer option: ${arg}`, 1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
options.target = path.resolve(options.target);
|
|
33
|
+
return options;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getViewerHelp() {
|
|
37
|
+
return [
|
|
38
|
+
"Usage:",
|
|
39
|
+
" delano viewer [options]",
|
|
40
|
+
"",
|
|
41
|
+
"Options:",
|
|
42
|
+
" --target <dir> Delano repository to view (default: current directory)",
|
|
43
|
+
" -h, --help Show help",
|
|
44
|
+
"",
|
|
45
|
+
"Environment:",
|
|
46
|
+
" DELANO_VIEWER_PORT or PORT overrides the default port 3977."
|
|
47
|
+
].join("\n");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function runViewer(args) {
|
|
51
|
+
const options = parseViewerArgs(args);
|
|
52
|
+
const delanoRoot = findDelanoRoot(options.target);
|
|
53
|
+
if (!delanoRoot) {
|
|
54
|
+
throw new CliError(
|
|
55
|
+
`Could not find a Delano repository from ${options.target}. Run 'delano install' first or pass --target.`,
|
|
56
|
+
1
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const serverPath = path.join(getPackageRoot(), ".delano", "viewer", "server.js");
|
|
61
|
+
const result = spawnSync(process.execPath, [serverPath], {
|
|
62
|
+
cwd: delanoRoot,
|
|
63
|
+
stdio: "inherit",
|
|
64
|
+
env: {
|
|
65
|
+
...process.env,
|
|
66
|
+
DELANO_VIEWER_ROOT: delanoRoot
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (result.error) {
|
|
71
|
+
throw new CliError(`Failed to launch Delano viewer: ${result.error.message}`, 1);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return typeof result.status === "number" ? result.status : 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
module.exports = {
|
|
78
|
+
getViewerHelp,
|
|
79
|
+
parseViewerArgs,
|
|
80
|
+
runViewer
|
|
81
|
+
};
|
package/src/cli/index.js
CHANGED
|
@@ -3,7 +3,9 @@ const path = require("node:path");
|
|
|
3
3
|
|
|
4
4
|
const { CliError } = require("./lib/errors");
|
|
5
5
|
const { getPackageRoot } = require("./lib/runtime");
|
|
6
|
+
const { getOnboardingHelp, runOnboarding } = require("./commands/onboarding");
|
|
6
7
|
const { runInstall, getInstallHelp } = require("./commands/install");
|
|
8
|
+
const { runViewer, getViewerHelp } = require("./commands/viewer");
|
|
7
9
|
const { createWrapperCommand } = require("./commands/wrapper");
|
|
8
10
|
|
|
9
11
|
const wrapperCommands = {
|
|
@@ -14,11 +16,21 @@ const wrapperCommands = {
|
|
|
14
16
|
};
|
|
15
17
|
|
|
16
18
|
const commands = {
|
|
19
|
+
onboarding: {
|
|
20
|
+
description: "Analyze AGENTS.md with the approval-first onboarding skill.",
|
|
21
|
+
run: runOnboarding,
|
|
22
|
+
help: getOnboardingHelp
|
|
23
|
+
},
|
|
17
24
|
install: {
|
|
18
25
|
description: "Install the approved Delano runtime payload into a target repository.",
|
|
19
26
|
run: runInstall,
|
|
20
27
|
help: getInstallHelp
|
|
21
28
|
},
|
|
29
|
+
viewer: {
|
|
30
|
+
description: "Launch the read-only Delano UI for a local repository.",
|
|
31
|
+
run: runViewer,
|
|
32
|
+
help: getViewerHelp
|
|
33
|
+
},
|
|
22
34
|
init: wrapperCommands.init,
|
|
23
35
|
validate: wrapperCommands.validate,
|
|
24
36
|
status: wrapperCommands.status,
|
|
@@ -84,7 +96,9 @@ function getGeneralHelp() {
|
|
|
84
96
|
" delano <command> [options]",
|
|
85
97
|
"",
|
|
86
98
|
"Commands:",
|
|
99
|
+
" onboarding Analyze AGENTS.md with the approval-first onboarding skill",
|
|
87
100
|
" install Install the approved Delano runtime payload",
|
|
101
|
+
" viewer Launch the read-only local UI for .project contracts",
|
|
88
102
|
" init Run .agents/scripts/pm/init.sh in the current Delano repo",
|
|
89
103
|
" validate Run .agents/scripts/pm/validate.sh in the current Delano repo",
|
|
90
104
|
" status Run .agents/scripts/pm/status.sh in the current Delano repo",
|
|
@@ -95,15 +109,21 @@ function getGeneralHelp() {
|
|
|
95
109
|
" -v, --version Show version",
|
|
96
110
|
"",
|
|
97
111
|
"Examples:",
|
|
112
|
+
" delano onboarding",
|
|
113
|
+
" delano onboarding --approve-agents-analysis",
|
|
98
114
|
" delano --yes",
|
|
99
115
|
" delano --target ../my-repo --yes",
|
|
100
116
|
" npx -y @bvdm/delano@latest --yes",
|
|
117
|
+
" delano viewer",
|
|
101
118
|
" delano validate",
|
|
102
119
|
" delano next -- --all",
|
|
103
120
|
"",
|
|
104
121
|
"Shorthand:",
|
|
105
122
|
" delano [install-options] is equivalent to delano install [install-options].",
|
|
106
123
|
"",
|
|
124
|
+
"Recommended first step after install:",
|
|
125
|
+
" Run 'delano onboarding' to review AGENTS.md. The command requires explicit approval before analysis.",
|
|
126
|
+
"",
|
|
107
127
|
"Use 'delano <command> --help' for command-specific help."
|
|
108
128
|
].join("\n");
|
|
109
129
|
}
|
package/src/cli/lib/install.js
CHANGED
|
@@ -251,6 +251,7 @@ function applyInstallPlan(plan, options) {
|
|
|
251
251
|
|
|
252
252
|
console.log("");
|
|
253
253
|
console.log(`Installed ${plan.items.length} files into ${options.target}.`);
|
|
254
|
+
console.log("Recommended next step: run 'delano onboarding' to review AGENTS.md. The command asks for explicit approval before analysis.");
|
|
254
255
|
}
|
|
255
256
|
|
|
256
257
|
function normalizeManifestEntries(rawManifest) {
|