hadara 0.3.4-rc.0 → 0.4.0

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.
Files changed (83) hide show
  1. package/README.md +29 -29
  2. package/dist/cli/dashboard.js +16 -4
  3. package/dist/cli/docs.js +50 -0
  4. package/dist/cli/doctor.js +74 -3
  5. package/dist/cli/evidence-json.js +3 -0
  6. package/dist/cli/evidence.js +72 -0
  7. package/dist/cli/help.js +4 -3
  8. package/dist/cli/init.js +608 -122
  9. package/dist/cli/legacy-boundary.js +77 -0
  10. package/dist/cli/main.js +28 -0
  11. package/dist/cli/package-smoke.js +1 -0
  12. package/dist/cli/release-artifact.js +10 -1
  13. package/dist/cli/release-publish.js +9 -0
  14. package/dist/cli/task.js +142 -24
  15. package/dist/cli/validation.js +81 -0
  16. package/dist/context/context-pack.js +113 -19
  17. package/dist/context/session-start.js +61 -21
  18. package/dist/context/task-extractors.js +3 -2
  19. package/dist/core/schema.js +14 -0
  20. package/dist/core/timing.js +12 -0
  21. package/dist/dev/docker-check.js +3 -2
  22. package/dist/evidence/evidence.js +134 -11
  23. package/dist/evidence/semantics.js +3 -1
  24. package/dist/handoff/handoff-stale-problems.js +6 -1
  25. package/dist/handoff/handoff-suggestion.js +7 -1
  26. package/dist/handoff/handoff.js +1 -0
  27. package/dist/harness/validate.js +434 -72
  28. package/dist/schemas/close-source.schema.json +33 -0
  29. package/dist/schemas/docs-inbox.schema.json +50 -0
  30. package/dist/schemas/docs-read-map.schema.json +83 -0
  31. package/dist/schemas/docs-register.schema.json +70 -0
  32. package/dist/schemas/evidence-projection.schema.json +35 -0
  33. package/dist/schemas/schema-index.json +51 -2
  34. package/dist/schemas/task-audit-close.schema.json +7 -0
  35. package/dist/schemas/task-close.schema.json +4 -0
  36. package/dist/schemas/task-finalize.schema.json +40 -1
  37. package/dist/schemas/task-status.schema.json +117 -0
  38. package/dist/schemas/task-workbench.schema.json +97 -2
  39. package/dist/schemas/validation-run.schema.json +103 -0
  40. package/dist/services/capability-registry.js +216 -51
  41. package/dist/services/ci-gate.js +5 -2
  42. package/dist/services/clean-checkout-smoke.js +4 -2
  43. package/dist/services/dashboard-bootstrap.js +19 -4
  44. package/dist/services/dashboard-cache.js +2 -0
  45. package/dist/services/dashboard-task-detail.js +43 -13
  46. package/dist/services/dashboard-timeline.js +2 -2
  47. package/dist/services/docs-registry.js +485 -30
  48. package/dist/services/evidence-lint.js +9 -3
  49. package/dist/services/lifecycle-guide.js +11 -12
  50. package/dist/services/operational-debt.js +8 -14
  51. package/dist/services/operations-status-service.js +7 -1
  52. package/dist/services/package-recycle.js +101 -45
  53. package/dist/services/package-smoke.js +7 -2
  54. package/dist/services/proof-status.js +2 -0
  55. package/dist/services/protocol-consistency.js +13 -6
  56. package/dist/services/protocol-migration.js +2 -1
  57. package/dist/services/release-artifact.js +3 -2
  58. package/dist/services/release-closeout.js +2 -1
  59. package/dist/services/release-diagnostics.js +5 -4
  60. package/dist/services/release-dry-run.js +3 -2
  61. package/dist/services/state-projection.js +31 -16
  62. package/dist/services/task-read-model.js +7 -7
  63. package/dist/services/task-workbench.js +598 -29
  64. package/dist/services/validation-run.js +333 -0
  65. package/dist/services/workbench-next-actions.js +31 -20
  66. package/dist/services/write-preflight.js +2 -20
  67. package/dist/task/acceptance.js +27 -5
  68. package/dist/task/authoring-guidance.js +76 -0
  69. package/dist/task/lifecycle-next-actions.js +0 -1
  70. package/dist/task/task-capsule.js +24 -18
  71. package/dist/task/task-close-repair-plan.js +3 -2
  72. package/dist/task/task-close.js +319 -39
  73. package/dist/task/task-complete-flow.js +4 -3
  74. package/dist/task/task-create.js +1 -0
  75. package/dist/task/task-finalize.js +161 -28
  76. package/dist/task/task-finish.js +36 -8
  77. package/dist/task/task-lifecycle.js +8 -3
  78. package/dist/task/task-templates.js +5 -24
  79. package/dist/task/task-upgrade-scaffold.js +11 -60
  80. package/dist/tui/constants.js +1 -7
  81. package/dist/tui/read-model.js +6 -4
  82. package/dist/tui/snapshot.js +14 -2
  83. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.closeSource.v1",
4
+ "x-hadara-schema-id": "hadara.closeSource.v1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": ["schemaVersion", "command", "ok", "taskId", "protocol", "sourceHash", "sourceUnits", "excludedRawInputs", "issues"],
8
+ "properties": {
9
+ "schemaVersion": { "const": "hadara.closeSource.v1" },
10
+ "command": { "const": "task.close-source" },
11
+ "ok": { "type": "boolean" },
12
+ "taskId": { "type": "string" },
13
+ "protocol": { "const": "0.4" },
14
+ "sourceHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$|^sha256:missing-task$" },
15
+ "sourceUnits": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "object",
19
+ "additionalProperties": true,
20
+ "required": ["kind", "path", "sha256", "closeSourceRole"],
21
+ "properties": {
22
+ "kind": { "enum": ["file", "registry", "derived-projection"] },
23
+ "path": { "type": "string" },
24
+ "selector": { "type": "string" },
25
+ "sha256": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
26
+ "closeSourceRole": { "enum": ["included", "consistency-check", "snapshot"] }
27
+ }
28
+ }
29
+ },
30
+ "excludedRawInputs": { "type": "array", "items": { "type": "string" } },
31
+ "issues": { "type": "array" }
32
+ }
33
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.docs.inbox.v1",
4
+ "x-hadara-schema-id": "hadara.docs.inbox.v1",
5
+ "title": "HADARA Docs Inbox Report",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["schemaVersion", "command", "ok", "source", "summary", "items", "issues"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "hadara.docs.inbox.v1" },
11
+ "command": { "const": "docs.inbox" },
12
+ "ok": { "type": "boolean" },
13
+ "source": { "$ref": "#/$defs/source" },
14
+ "summary": {
15
+ "type": "object",
16
+ "additionalProperties": true,
17
+ "required": ["items", "errors", "warnings"],
18
+ "properties": {
19
+ "items": { "type": "number" },
20
+ "errors": { "type": "number" },
21
+ "warnings": { "type": "number" }
22
+ }
23
+ },
24
+ "items": { "type": "array", "items": { "$ref": "#/$defs/issue" } },
25
+ "issues": { "type": "array", "items": { "$ref": "#/$defs/issue" } }
26
+ },
27
+ "$defs": {
28
+ "source": {
29
+ "type": "object",
30
+ "additionalProperties": true,
31
+ "required": ["registryPath", "registryPresent", "inferred"],
32
+ "properties": {
33
+ "registryPath": { "const": ".hadara/docs-registry.json" },
34
+ "registryPresent": { "type": "boolean" },
35
+ "inferred": { "type": "boolean" }
36
+ }
37
+ },
38
+ "issue": {
39
+ "type": "object",
40
+ "additionalProperties": true,
41
+ "required": ["severity", "code", "message"],
42
+ "properties": {
43
+ "severity": { "type": "string", "enum": ["warning", "error"] },
44
+ "code": { "type": "string", "minLength": 1 },
45
+ "message": { "type": "string", "minLength": 1 },
46
+ "path": { "type": "string", "minLength": 1 }
47
+ }
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.docs.readMap.v1",
4
+ "x-hadara-schema-id": "hadara.docs.readMap.v1",
5
+ "title": "HADARA Docs Read Map Report",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["schemaVersion", "command", "ok", "taskId", "source", "task", "readFirst", "readIfNeeded", "doNotReadByDefault", "driftWarnings", "issues"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "hadara.docs.readMap.v1" },
11
+ "command": { "const": "docs.read-map" },
12
+ "ok": { "type": "boolean" },
13
+ "taskId": { "type": "string" },
14
+ "source": { "$ref": "#/$defs/source" },
15
+ "task": {
16
+ "type": "object",
17
+ "additionalProperties": true,
18
+ "required": ["capsulePath", "capsulePresent", "title"],
19
+ "properties": {
20
+ "capsulePath": { "oneOf": [{ "type": "string" }, { "type": "null" }] },
21
+ "capsulePresent": { "type": "boolean" },
22
+ "title": { "oneOf": [{ "type": "string" }, { "type": "null" }] }
23
+ }
24
+ },
25
+ "readFirst": { "type": "array", "items": { "$ref": "#/$defs/entry" } },
26
+ "readIfNeeded": { "type": "array", "items": { "$ref": "#/$defs/entry" } },
27
+ "doNotReadByDefault": { "type": "array", "items": { "$ref": "#/$defs/entry" } },
28
+ "driftWarnings": { "type": "array", "items": { "$ref": "#/$defs/driftWarning" } },
29
+ "issues": { "type": "array", "items": { "$ref": "#/$defs/issue" } }
30
+ },
31
+ "$defs": {
32
+ "source": {
33
+ "type": "object",
34
+ "additionalProperties": true,
35
+ "required": ["registryPath", "registryPresent", "inferred"],
36
+ "properties": {
37
+ "registryPath": { "const": ".hadara/docs-registry.json" },
38
+ "registryPresent": { "type": "boolean" },
39
+ "inferred": { "type": "boolean" }
40
+ }
41
+ },
42
+ "entry": {
43
+ "type": "object",
44
+ "additionalProperties": true,
45
+ "required": ["path", "title", "kind", "status", "readWhen", "readTier", "authority", "editPolicy", "source", "reason"],
46
+ "properties": {
47
+ "path": { "type": "string", "minLength": 1 },
48
+ "title": { "type": "string", "minLength": 1 },
49
+ "kind": { "type": "string", "minLength": 1 },
50
+ "status": { "type": "string", "minLength": 1 },
51
+ "readWhen": { "type": "array", "items": { "type": "string", "minLength": 1 } },
52
+ "readTier": { "type": "string", "minLength": 1 },
53
+ "authority": { "type": "string", "minLength": 1 },
54
+ "editPolicy": { "type": "string", "minLength": 1 },
55
+ "source": { "type": "string", "enum": ["registry", "task-capsule", "discovery"] },
56
+ "reason": { "type": "string", "minLength": 1 }
57
+ }
58
+ },
59
+ "driftWarning": {
60
+ "type": "object",
61
+ "additionalProperties": true,
62
+ "required": ["code", "path", "risk", "reviewRequiredBeforeUse", "reason"],
63
+ "properties": {
64
+ "code": { "type": "string", "minLength": 1 },
65
+ "path": { "type": "string", "minLength": 1 },
66
+ "risk": { "type": "string", "enum": ["low", "medium", "high"] },
67
+ "reviewRequiredBeforeUse": { "type": "boolean" },
68
+ "reason": { "type": "string", "minLength": 1 }
69
+ }
70
+ },
71
+ "issue": {
72
+ "type": "object",
73
+ "additionalProperties": true,
74
+ "required": ["severity", "code", "message"],
75
+ "properties": {
76
+ "severity": { "type": "string", "enum": ["warning", "error"] },
77
+ "code": { "type": "string", "minLength": 1 },
78
+ "message": { "type": "string", "minLength": 1 },
79
+ "path": { "type": "string", "minLength": 1 }
80
+ }
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.docs.register.v1",
4
+ "x-hadara-schema-id": "hadara.docs.register.v1",
5
+ "title": "HADARA Docs Register Report",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["schemaVersion", "command", "ok", "mode", "path", "source", "action", "document", "writes", "issues"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "hadara.docs.register.v1" },
11
+ "command": { "const": "docs.register" },
12
+ "ok": { "type": "boolean" },
13
+ "mode": { "type": "string", "enum": ["dry-run", "execute"] },
14
+ "path": { "type": "string" },
15
+ "source": {
16
+ "type": "object",
17
+ "additionalProperties": true,
18
+ "required": ["registryPath", "registryPresent", "inferred"],
19
+ "properties": {
20
+ "registryPath": { "const": ".hadara/docs-registry.json" },
21
+ "registryPresent": { "type": "boolean" },
22
+ "inferred": { "type": "boolean" }
23
+ }
24
+ },
25
+ "action": { "type": "string", "enum": ["create", "already-registered", "blocked"] },
26
+ "document": { "oneOf": [{ "$ref": "#/$defs/document" }, { "type": "null" }] },
27
+ "writes": {
28
+ "type": "array",
29
+ "items": { "type": "string", "minLength": 1 }
30
+ },
31
+ "issues": {
32
+ "type": "array",
33
+ "items": { "$ref": "#/$defs/issue" }
34
+ }
35
+ },
36
+ "$defs": {
37
+ "document": {
38
+ "type": "object",
39
+ "additionalProperties": true,
40
+ "required": ["path", "title", "kind", "status", "readWhen", "requiredReading", "updateOwner", "updatedByCommands"],
41
+ "properties": {
42
+ "path": { "type": "string", "minLength": 1 },
43
+ "title": { "type": "string", "minLength": 1 },
44
+ "kind": { "type": "string", "minLength": 1 },
45
+ "status": { "type": "string", "minLength": 1 },
46
+ "readWhen": {
47
+ "type": "array",
48
+ "items": { "type": "string", "minLength": 1 }
49
+ },
50
+ "requiredReading": { "type": "boolean" },
51
+ "updateOwner": { "type": "string", "minLength": 1 },
52
+ "updatedByCommands": {
53
+ "type": "array",
54
+ "items": { "type": "string", "minLength": 1 }
55
+ }
56
+ }
57
+ },
58
+ "issue": {
59
+ "type": "object",
60
+ "additionalProperties": true,
61
+ "required": ["severity", "code", "message"],
62
+ "properties": {
63
+ "severity": { "type": "string", "enum": ["warning", "error"] },
64
+ "code": { "type": "string", "minLength": 1 },
65
+ "message": { "type": "string", "minLength": 1 },
66
+ "path": { "type": "string", "minLength": 1 }
67
+ }
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.evidence.projection.v1",
4
+ "x-hadara-schema-id": "hadara.evidence.projection.v1",
5
+ "title": "HADARA Evidence Projection Report",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["schemaVersion", "command", "ok", "taskId", "mode", "source", "target", "wouldChange", "generatedSlots", "afterHash", "issues"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "hadara.evidence.projection.v1" },
11
+ "command": { "const": "evidence.project" },
12
+ "ok": { "type": "boolean" },
13
+ "taskId": { "type": "string", "pattern": "^T-[0-9]{4,}$" },
14
+ "mode": { "enum": ["dry-run", "execute"] },
15
+ "source": { "type": "string" },
16
+ "target": { "type": "string" },
17
+ "wouldChange": { "type": "boolean" },
18
+ "generatedSlots": { "type": "array", "items": { "type": "string" } },
19
+ "beforeHash": { "type": "string" },
20
+ "afterHash": { "type": "string" },
21
+ "issues": { "type": "array", "items": { "$ref": "#/$defs/issue" } }
22
+ },
23
+ "$defs": {
24
+ "issue": {
25
+ "type": "object",
26
+ "additionalProperties": true,
27
+ "required": ["severity", "code", "message"],
28
+ "properties": {
29
+ "severity": { "enum": ["error", "warning", "info"] },
30
+ "code": { "type": "string" },
31
+ "message": { "type": "string" }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -8,6 +8,13 @@
8
8
  "owner": "core/actor-context",
9
9
  "notes": "Documents the Phase 6 common actor/run context for future workflow-compression and multi-agent compatible reports."
10
10
  },
11
+ {
12
+ "id": "hadara.closeSource.v1",
13
+ "path": "src/schemas/close-source.schema.json",
14
+ "status": "fixture",
15
+ "owner": "task/task-close",
16
+ "notes": "Documents normalized 0.4 close-source payloads and source units for task close/audit proof boundaries."
17
+ },
11
18
  {
12
19
  "id": "hadara.dashboard.bootstrap.v1",
13
20
  "path": "src/schemas/dashboard-bootstrap.schema.json",
@@ -50,6 +57,13 @@
50
57
  "owner": "services/evidence-summary",
51
58
  "notes": "Compact read-only evidence id summary for agent copy/paste and close-proof discovery."
52
59
  },
60
+ {
61
+ "id": "hadara.evidence.projection.v1",
62
+ "path": "src/schemas/evidence-projection.schema.json",
63
+ "status": "fixture",
64
+ "owner": "evidence/evidence",
65
+ "notes": "Dry-run and execute report for regenerating the EVIDENCE.md projection file from canonical evidence.jsonl."
66
+ },
53
67
  {
54
68
  "id": "hadara.evidence.lint.v1",
55
69
  "path": "src/schemas/evidence-lint.schema.json",
@@ -169,6 +183,20 @@
169
183
  "owner": "services/docs-registry",
170
184
  "notes": "Documents the Phase 7.3 document registry list projection returned by hadara docs list --json."
171
185
  },
186
+ {
187
+ "id": "hadara.docs.readMap.v1",
188
+ "path": "src/schemas/docs-read-map.schema.json",
189
+ "status": "fixture",
190
+ "owner": "services/docs-registry",
191
+ "notes": "Documents the 0.4 registry-backed docs read-map report returned by hadara docs read-map --json."
192
+ },
193
+ {
194
+ "id": "hadara.docs.inbox.v1",
195
+ "path": "src/schemas/docs-inbox.schema.json",
196
+ "status": "fixture",
197
+ "owner": "services/docs-registry",
198
+ "notes": "Documents the 0.4 docs inbox report for registry and unregistered-spec attention items."
199
+ },
172
200
  {
173
201
  "id": "hadara.docs.mark.v1",
174
202
  "path": "src/schemas/docs-mark.schema.json",
@@ -176,6 +204,13 @@
176
204
  "owner": "services/docs-cleanup",
177
205
  "notes": "Documents the Phase 7.5 registry-only document cleanup status transition report returned by hadara docs mark --json."
178
206
  },
207
+ {
208
+ "id": "hadara.docs.register.v1",
209
+ "path": "src/schemas/docs-register.schema.json",
210
+ "status": "fixture",
211
+ "owner": "services/docs-registry",
212
+ "notes": "Documents the 0.4 registry-first document registration report returned by hadara docs register --json."
213
+ },
179
214
  {
180
215
  "id": "hadara.docs.archivePlan.v1",
181
216
  "path": "src/schemas/docs-archive-plan.schema.json",
@@ -363,14 +398,21 @@
363
398
  "path": "src/schemas/task-next.schema.json",
364
399
  "status": "fixture",
365
400
  "owner": "task/next",
366
- "notes": "Documents read-only next-task recommendation reports from handoff, Development Slices, Task Board fallback, and backlog state."
401
+ "notes": "Documents compatibility next-task recommendation reports; new agent loops should prefer task status without --task."
402
+ },
403
+ {
404
+ "id": "hadara.task.status.v1",
405
+ "path": "src/schemas/task-status.schema.json",
406
+ "status": "fixture",
407
+ "owner": "task/status",
408
+ "notes": "Documents read-only task status selection reports when no Task Capsule is selected."
367
409
  },
368
410
  {
369
411
  "id": "hadara.task.workbench.v1",
370
412
  "path": "src/schemas/task-workbench.schema.json",
371
413
  "status": "fixture",
372
414
  "owner": "task/workbench",
373
- "notes": "Documents read-only Phase 3 task operator console reports from task status."
415
+ "notes": "Documents selected-capsule task status workbench reports with loop phase and next-action guidance."
374
416
  },
375
417
  {
376
418
  "id": "hadara.runtime.version.v1",
@@ -512,6 +554,13 @@
512
554
  "owner": "smoke/evidence",
513
555
  "notes": "Documents reduced public smoke evidence summaries attached by package-smoke and clean-checkout smoke execution."
514
556
  },
557
+ {
558
+ "id": "hadara.validation.run.v1",
559
+ "path": "src/schemas/validation-run.schema.json",
560
+ "status": "fixture",
561
+ "owner": "validation/run",
562
+ "notes": "Documents validation command execution reports that append evidence and update TASK.md Validation rows."
563
+ },
515
564
  {
516
565
  "id": "hadara.releaseArtifact.manifest.v1",
517
566
  "path": "src/schemas/release-artifact-manifest.schema.json",
@@ -34,6 +34,8 @@
34
34
  },
35
35
  "currentValidationReportHash": { "type": "string" },
36
36
  "currentSourceHash": { "type": "string" },
37
+ "currentSlotRegistryHash": { "type": "string" },
38
+ "currentSlotRegistryVersion": { "type": "number" },
37
39
  "latestCloseEvidence": { "type": "object", "additionalProperties": true },
38
40
  "auditVerdict": {
39
41
  "type": "object",
@@ -45,6 +47,11 @@
45
47
  "closeEvidenceValid": { "type": "boolean" },
46
48
  "reportHashMatches": { "type": "boolean" },
47
49
  "sourceHashMatches": { "type": "boolean" },
50
+ "slotRegistryHashMatches": { "type": "boolean" },
51
+ "recordedSlotRegistryHash": { "type": "string" },
52
+ "recordedSlotRegistryVersion": { "type": "number" },
53
+ "currentSlotRegistryHash": { "type": "string" },
54
+ "currentSlotRegistryVersion": { "type": "number" },
48
55
  "writeBoundary": { "const": "read-only" },
49
56
  "model": { "const": "validation-close-audit" }
50
57
  }
@@ -43,6 +43,8 @@
43
43
  "issueCount": { "type": "number" },
44
44
  "validatedBeforeCloseEvidenceReportHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$|^sha256:missing-task$" },
45
45
  "validatedBeforeCloseEvidenceSourceHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$|^sha256:missing-task$" },
46
+ "slotRegistryVersion": { "type": "number" },
47
+ "slotRegistryHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$|^sha256:missing-task$" },
46
48
  "validatedBeforeCloseEvidenceHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$|^sha256:missing-task$" }
47
49
  }
48
50
  },
@@ -61,6 +63,8 @@
61
63
  "excludedFromCurrentValidationLoop": { "const": true },
62
64
  "validationReportHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
63
65
  "sourceHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
66
+ "slotRegistryVersion": { "type": "number" },
67
+ "slotRegistryHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
64
68
  "markdownPath": { "type": "string" },
65
69
  "evidencePath": { "type": "string" }
66
70
  }
@@ -4,11 +4,32 @@
4
4
  "x-hadara-schema-id": "hadara.task.finalize.v1",
5
5
  "type": "object",
6
6
  "additionalProperties": true,
7
- "required": ["schemaVersion", "command", "ok", "readOnly", "mode", "taskId", "generatedAt", "actor", "summary", "steps", "nextActions", "issues"],
7
+ "required": ["schemaVersion", "command", "ok", "state", "planStatus", "blockingIssues", "pendingWrites", "readOnly", "mode", "taskId", "generatedAt", "actor", "summary", "steps", "nextActions", "issues"],
8
8
  "properties": {
9
9
  "schemaVersion": { "const": "hadara.task.finalize.v1" },
10
10
  "command": { "const": "task.finalize" },
11
11
  "ok": { "type": "boolean" },
12
+ "state": { "enum": ["blocked", "ready-to-close", "closed-valid", "closed-stale", "in-progress"] },
13
+ "planStatus": { "enum": ["blocked", "executable", "executable-with-deferred-checks", "satisfied", "pending"] },
14
+ "blockingIssues": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
15
+ "deferredChecks": {
16
+ "type": "array",
17
+ "items": { "enum": ["finish", "ready", "close", "audit-close"] }
18
+ },
19
+ "partialExecutionRisk": { "type": "boolean" },
20
+ "pendingWrites": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "additionalProperties": true,
25
+ "required": ["step", "writeBoundary", "paths"],
26
+ "properties": {
27
+ "step": { "enum": ["finish", "ready", "close", "audit-close"] },
28
+ "writeBoundary": { "enum": ["read-only", "task-local", "evidence-append"] },
29
+ "paths": { "type": "array", "items": { "type": "string" } }
30
+ }
31
+ }
32
+ },
12
33
  "readOnly": { "type": "boolean" },
13
34
  "mode": { "enum": ["dry-run", "execute", "execute-refused"] },
14
35
  "taskId": { "type": "string" },
@@ -25,6 +46,11 @@
25
46
  "blocked": { "type": "number" },
26
47
  "satisfied": { "type": "number" },
27
48
  "executeSupported": { "type": "boolean" },
49
+ "deferredChecks": {
50
+ "type": "array",
51
+ "items": { "enum": ["finish", "ready", "close", "audit-close"] }
52
+ },
53
+ "partialExecutionRisk": { "type": "boolean" },
28
54
  "evaluatedReports": { "type": "array", "items": { "type": "string" } },
29
55
  "skippedReports": { "type": "array", "items": { "type": "string" } }
30
56
  }
@@ -76,6 +102,19 @@
76
102
  }
77
103
  }
78
104
  },
105
+ "diagnostics": {
106
+ "type": "object",
107
+ "additionalProperties": true,
108
+ "required": ["generatedBy", "commandPath", "durationMs", "slowThresholdMs", "slow"],
109
+ "properties": {
110
+ "generatedBy": { "const": "cli" },
111
+ "commandPath": { "type": "string" },
112
+ "durationMs": { "type": "number" },
113
+ "slowThresholdMs": { "type": "number" },
114
+ "slow": { "type": "boolean" },
115
+ "note": { "type": "string" }
116
+ }
117
+ },
79
118
  "primaryNextAction": { "type": "object", "additionalProperties": true },
80
119
  "nextActions": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
81
120
  "issues": {
@@ -0,0 +1,117 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "hadara.task.status.v1",
4
+ "x-hadara-schema-id": "hadara.task.status.v1",
5
+ "x-hadara-field-classes": {
6
+ "stable": [
7
+ "schemaVersion",
8
+ "command",
9
+ "ok",
10
+ "mode",
11
+ "summary.recommendations",
12
+ "loop.phase",
13
+ "loop.primaryNextAction",
14
+ "recommendations",
15
+ "issues",
16
+ "nextActions"
17
+ ],
18
+ "additive": [
19
+ "sources.*",
20
+ "diagnostics",
21
+ "loop.deprecatedCommands",
22
+ "nextActions.*"
23
+ ],
24
+ "experimental": [
25
+ "generatedAt"
26
+ ],
27
+ "deprecated": []
28
+ },
29
+ "type": "object",
30
+ "additionalProperties": true,
31
+ "required": ["schemaVersion", "command", "ok", "generatedAt", "projectRoot", "mode", "summary", "loop", "recommendations", "sources", "issues", "nextActions"],
32
+ "properties": {
33
+ "schemaVersion": { "const": "hadara.task.status.v1" },
34
+ "command": { "const": "task.status" },
35
+ "ok": { "type": "boolean" },
36
+ "generatedAt": { "type": "string" },
37
+ "projectRoot": { "type": "string" },
38
+ "mode": { "const": "select-work" },
39
+ "summary": {
40
+ "type": "object",
41
+ "additionalProperties": true,
42
+ "required": ["recommendations", "nextActions"],
43
+ "properties": {
44
+ "recommendations": { "type": "number" },
45
+ "nextActions": { "type": "number" }
46
+ }
47
+ },
48
+ "loop": {
49
+ "type": "object",
50
+ "additionalProperties": true,
51
+ "required": ["phase", "summary", "statusCommand", "deprecatedCommands"],
52
+ "properties": {
53
+ "phase": { "const": "select-work" },
54
+ "summary": { "type": "string" },
55
+ "statusCommand": { "type": "string" },
56
+ "primaryNextAction": { "type": "object", "additionalProperties": true },
57
+ "deprecatedCommands": {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "object",
61
+ "additionalProperties": true,
62
+ "required": ["command", "replacement", "removal", "note"],
63
+ "properties": {
64
+ "command": { "type": "string" },
65
+ "replacement": { "type": "string" },
66
+ "removal": { "const": "planned" },
67
+ "note": { "type": "string" }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ },
73
+ "recommendations": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
74
+ "diagnostics": {
75
+ "type": "object",
76
+ "additionalProperties": true,
77
+ "required": ["generatedBy", "commandPath", "durationMs", "slowThresholdMs", "slow"],
78
+ "properties": {
79
+ "generatedBy": { "const": "cli" },
80
+ "commandPath": { "type": "string" },
81
+ "durationMs": { "type": "number" },
82
+ "slowThresholdMs": { "type": "number" },
83
+ "slow": { "type": "boolean" },
84
+ "note": { "type": "string" }
85
+ }
86
+ },
87
+ "sources": {
88
+ "type": "object",
89
+ "additionalProperties": true,
90
+ "required": ["taskNext"],
91
+ "properties": {
92
+ "taskNext": { "type": "object", "additionalProperties": true }
93
+ }
94
+ },
95
+ "issues": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
96
+ "nextActions": {
97
+ "type": "array",
98
+ "items": {
99
+ "type": "object",
100
+ "additionalProperties": true,
101
+ "required": ["id", "kind", "required", "priority", "message", "sourceIssueCodes"],
102
+ "properties": {
103
+ "id": { "type": "string" },
104
+ "kind": { "enum": ["command", "review", "edit", "remediation", "audit", "continue"] },
105
+ "required": { "type": "boolean" },
106
+ "priority": { "enum": ["now", "soon", "optional"] },
107
+ "command": { "type": "string" },
108
+ "executeCommand": { "type": "string" },
109
+ "message": { "type": "string" },
110
+ "path": { "type": "string" },
111
+ "sourceIssueCodes": { "type": "array", "items": { "type": "string" } },
112
+ "loopBoundary": { "type": "boolean" }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }