@zhuk/spego 0.11.0 → 0.13.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.
- package/CHANGELOG.md +20 -1
- package/README.md +28 -5
- package/dist/artifacts/engine.d.ts +4 -7
- package/dist/artifacts/engine.js +76 -23
- package/dist/artifacts/engine.js.map +1 -1
- package/dist/artifacts/schemas.js +19 -1
- package/dist/artifacts/schemas.js.map +1 -1
- package/dist/artifacts/storage.d.ts +3 -2
- package/dist/artifacts/storage.js +42 -7
- package/dist/artifacts/storage.js.map +1 -1
- package/dist/artifacts/types.d.ts +1 -1
- package/dist/artifacts/types.js +1 -0
- package/dist/artifacts/types.js.map +1 -1
- package/dist/artifacts/validation.js +1 -1
- package/dist/artifacts/validation.js.map +1 -1
- package/dist/cli/body-input.js +12 -2
- package/dist/cli/body-input.js.map +1 -1
- package/dist/cli/commands/artifact.js +81 -13
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/meta.js +1 -1
- package/dist/cli/commands/meta.js.map +1 -1
- package/dist/cli/commands/mirror.d.ts +2 -0
- package/dist/cli/commands/mirror.js +253 -0
- package/dist/cli/commands/mirror.js.map +1 -0
- package/dist/cli/commands/view.js +29 -27
- package/dist/cli/commands/view.js.map +1 -1
- package/dist/cli/epic-slug.d.ts +2 -0
- package/dist/cli/epic-slug.js +17 -0
- package/dist/cli/epic-slug.js.map +1 -0
- package/dist/cli/runtime.d.ts +2 -0
- package/dist/cli/runtime.js +2 -1
- package/dist/cli/runtime.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/{commands → command-meta}/registry.js +11 -0
- package/dist/command-meta/registry.js.map +1 -0
- package/dist/delivery/mirror.d.ts +62 -0
- package/dist/delivery/mirror.js +466 -0
- package/dist/delivery/mirror.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/generator/claude.js +1 -1
- package/dist/generator/claude.js.map +1 -1
- package/dist/index/indexer.js +37 -8
- package/dist/index/indexer.js.map +1 -1
- package/dist/index/revisions.d.ts +2 -2
- package/dist/index/revisions.js +18 -3
- package/dist/index/revisions.js.map +1 -1
- package/dist/workflows/registry.js +71 -1
- package/dist/workflows/registry.js.map +1 -1
- package/dist/workspace/config.d.ts +0 -66
- package/dist/workspace/config.js +4 -13
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/init.js +16 -2
- package/dist/workspace/init.js.map +1 -1
- package/dist/workspace/paths.d.ts +12 -0
- package/dist/workspace/paths.js +69 -0
- package/dist/workspace/paths.js.map +1 -1
- package/package.json +2 -4
- package/dist/commands/registry.js.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- /package/dist/{commands → command-meta}/registry.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.13.0] - 2026-07-21
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `epic` artifact type for mirroring OpenSpec changes with deps, links, requires, and gaps metadata.
|
|
7
|
+
- `sprint-plan` metadata can list ordered OpenSpec changes, enforced to one non-closed sprint at a time.
|
|
8
|
+
- `spego mirror` command deriving the delivery mirror (sprint board, blockers, gaps, drift warnings, next-change suggestion) from OpenSpec changes and `epic`/`sprint-plan` artifacts, with `--graph`, `--gaps`, and deterministic `--json` output.
|
|
9
|
+
- `spego-groom` workflow skill for syncing delivery-mirror epics with active OpenSpec changes, analyzing deps/requires/gaps, and maintaining sprint plans.
|
|
10
|
+
|
|
3
11
|
## [Unreleased]
|
|
4
12
|
|
|
5
|
-
|
|
13
|
+
## [0.12.0] - 2026-07-12
|
|
14
|
+
|
|
15
|
+
### Security
|
|
16
|
+
- Reject symlinked workspace paths and artifact files so Spego cannot read or write outside `.spego`.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Renamed `src/commands/` to `src/command-meta/` for clarity — only the metadata registry lives there, not command implementations.
|
|
20
|
+
- Lint script now enforces zero warnings (`eslint src test --max-warnings 0`).
|
|
21
|
+
|
|
22
|
+
### Removed
|
|
23
|
+
- Removed `main` and `types` entry points and deleted `src/index.ts` — spego is CLI-only, not a library package.
|
|
24
|
+
- Removed legacy `orchestration` config block acceptance from `readConfig()`; workspaces with stale `orchestration:` in `.spego/config.yaml` now get a `VALIDATION_FAILED` error telling them to delete the property.
|
|
6
25
|
|
|
7
26
|
## [0.11.0] - 2026-05-31
|
|
8
27
|
|
package/README.md
CHANGED
|
@@ -5,8 +5,7 @@ Agent-first product orchestration: markdown-first artifact engine with SQLite in
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npm install
|
|
9
|
-
npm run build
|
|
8
|
+
npm install --global @zhuk/spego
|
|
10
9
|
spego init --agents claude,opencode --demo false
|
|
11
10
|
```
|
|
12
11
|
|
|
@@ -27,6 +26,7 @@ spego init --agents claude,opencode --demo false
|
|
|
27
26
|
| `spego skills` | Regenerate agent skill files |
|
|
28
27
|
| `spego epics` | List delivery epics |
|
|
29
28
|
| `spego tasks --change <name>` | List tasks for a change |
|
|
29
|
+
| `spego mirror` | Show delivery mirror board |
|
|
30
30
|
| `spego index rebuild` | Rebuild SQLite index from files |
|
|
31
31
|
|
|
32
32
|
All commands accept `--cwd <dir>` to set the project root.
|
|
@@ -57,7 +57,10 @@ The legacy `spego view --format markdown|json` flag is **deprecated** and will b
|
|
|
57
57
|
|
|
58
58
|
## Artifact Types
|
|
59
59
|
|
|
60
|
-
Built-in: `prd`, `okr`, `retro`, `sprint-plan`, `brainstorm`, `usecases`, `design`, `api`, `architecture`, `decision`, `risk`, `qa`, `ceremony`
|
|
60
|
+
Built-in: `prd`, `epic`, `okr`, `retro`, `sprint-plan`, `brainstorm`, `usecases`, `design`, `api`, `architecture`, `decision`, `risk`, `qa`, `ceremony`
|
|
61
|
+
|
|
62
|
+
- `epic` mirrors an OpenSpec change. Its optional meta supports `deps`, `links`, `requires`, and `gaps`.
|
|
63
|
+
- `sprint-plan` may include ordered `changes`; a change can belong to only one non-closed sprint-plan.
|
|
61
64
|
|
|
62
65
|
Custom types can be registered via workspace config (`extraArtifactTypes`).
|
|
63
66
|
|
|
@@ -92,6 +95,14 @@ The adapter is read-only. It observes OpenSpec state but does not create, contin
|
|
|
92
95
|
|
|
93
96
|
Archived changes under `openspec/changes/archive/` are excluded. A change with no `tasks.md` is reported as `planning-incomplete`.
|
|
94
97
|
|
|
98
|
+
## Delivery Mirror
|
|
99
|
+
|
|
100
|
+
`spego mirror` derives the delivery mirror on demand — it never writes artifacts or OpenSpec state. It combines active and archived OpenSpec changes with `epic` and `sprint-plan` artifacts into a sprint board: sprints in date order (undated last), changes in each sprint-plan's list order, per-change status, blockers, gaps, and missing artifacts (`requires` minus resolvable `links`). A change is blocked when a dependency is incomplete and not scheduled in the same or an earlier sprint.
|
|
101
|
+
|
|
102
|
+
The default output is the human board. `--graph` shows dependency edges; `--gaps` focuses on gap flags and missing artifacts. The global `--json` flag emits a deterministic `{ sprints, ungrouped, warnings, next }` document in all modes; `next` names the first pending, unblocked change or is `null` with a hint to groom.
|
|
103
|
+
|
|
104
|
+
Every rendering attaches drift warnings: `dangling-dep`, `dep-cycle`, `ungroomed-change`, `orphan-epic`, `archived-in-sprint`, and `closable-sprint`. Repair belongs to the groom workflow; mirror only reports.
|
|
105
|
+
|
|
95
106
|
## OpenCode Workflows
|
|
96
107
|
|
|
97
108
|
When `opencode` is listed in `.spego/config.yaml` agents, `spego init` and `spego skills` generate static OpenCode commands under `.opencode/commands/`:
|
|
@@ -185,13 +196,13 @@ OpenSpec prompts and spego workflow skills are separate surfaces:
|
|
|
185
196
|
- OPSX/OpenSpec prompts live under `.claude/commands/opsx/` and `.claude/skills/openspec-*/`.
|
|
186
197
|
- spego-generated commands and workflow skills live under `.claude/commands/spego/` and `.claude/skills/spego-*/`.
|
|
187
198
|
|
|
188
|
-
OpenSpec owns change execution and lifecycle state: proposal, design, specs, tasks, apply, verify, sync, and archive. spego owns durable product-thinking artifacts: `brainstorm`, `qa`, `risk`, and `retro
|
|
199
|
+
OpenSpec owns change execution and lifecycle state: proposal, design, specs, tasks, apply, verify, sync, and archive. spego owns durable product-thinking artifacts: `brainstorm`, `qa`, `risk`, and `retro`, plus delivery-mirror state: `epic` and `sprint-plan` written only by the groom workflow. The OpenSpec delivery adapter exposed through `spego epics` and `spego tasks` is read-only.
|
|
189
200
|
|
|
190
201
|
Use combined workflows when an OpenSpec change needs durable thinking around it:
|
|
191
202
|
|
|
192
203
|
| Lane | OpenSpec action | spego action |
|
|
193
204
|
|------|-----------------|--------------|
|
|
194
|
-
| Before implementation | Create or continue a change with OPSX/OpenSpec, then read `proposal.md`, `design.md`, specs, and `tasks.md` | `spego-change-brainstorm` creates a `brainstorm` artifact |
|
|
205
|
+
| Before implementation | Create or continue a change with OPSX/OpenSpec, then read `proposal.md`, `design.md`, specs, and `tasks.md` | `spego-groom` grooms the delivery mirror; `spego-change-brainstorm` creates a `brainstorm` artifact |
|
|
195
206
|
| During implementation | Keep task state and artifact mutations in OPSX/OpenSpec | `spego-change-review` creates `qa` or `risk` findings |
|
|
196
207
|
| Before archive | Run OPSX/OpenSpec verification | `spego-change-verify-report` creates a `qa` verification report |
|
|
197
208
|
| After completion | Archive or complete the OpenSpec change | `spego-change-retro` creates a `retro` artifact |
|
|
@@ -214,6 +225,18 @@ spego --json create --type retro --title "<change-name> retro" --body "<retrospe
|
|
|
214
225
|
|
|
215
226
|
If a combined workflow discovers that OpenSpec artifacts need to change, use the matching OPSX/OpenSpec command. Do not mutate OpenSpec lifecycle state through spego.
|
|
216
227
|
|
|
228
|
+
### groom
|
|
229
|
+
|
|
230
|
+
Delivery-mirror workflow that reconciles active OpenSpec changes with `epic` and `sprint-plan` artifacts. One Groomer persona runs five phases:
|
|
231
|
+
|
|
232
|
+
1. `orient` — read `spego mirror --json` and `spego epics --json`, then classify drift warnings.
|
|
233
|
+
2. `sync` — create missing epics for ungroomed active changes and propose orphan-epic disposition.
|
|
234
|
+
3. `analyze` — update deps, requires, supporting links, and gap notes on epics.
|
|
235
|
+
4. `plan` — propose releasable, testable sprint groupings and create or update `sprint-plan` artifacts after confirmation.
|
|
236
|
+
5. `summarize` — report epics, dispositions, sprint plans, and the next-change suggestion.
|
|
237
|
+
|
|
238
|
+
Sole writer: groom persists mirror state only through `spego create` / `spego update` with `--expected-revision`; it never writes `openspec/` or mutates OpenSpec lifecycle. Orphan disposition and sprint closes require explicit confirmation; default is keep.
|
|
239
|
+
|
|
217
240
|
### elicit
|
|
218
241
|
|
|
219
242
|
Iterative refinement of an existing artifact using named methods (clarify, sharpen, generalize, specialize, stress-test, contextualize, simplify, formalize). A single Refiner persona proposes changes, confirms with the user, and applies via `spego update --expected-revision`. Maximum 5 cycles per session. Outputs a `qa` summary and in-place updates of the source artifact.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type WorkspacePaths } from '../workspace/paths.js';
|
|
2
2
|
import { type IndexedArtifact, type ListOptions, type RebuildReport } from '../index/indexer.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type ArtifactRecord } from './types.js';
|
|
4
4
|
import { type WorkspaceConfig } from '../workspace/config.js';
|
|
5
5
|
export interface EngineOptions {
|
|
6
6
|
/** Project root containing `.spego/`. Defaults to cwd. */
|
|
@@ -12,9 +12,12 @@ export declare class ArtifactEngine {
|
|
|
12
12
|
readonly config: WorkspaceConfig;
|
|
13
13
|
private readonly db;
|
|
14
14
|
private closed;
|
|
15
|
+
private readonly resolvedRoot;
|
|
15
16
|
private constructor();
|
|
16
17
|
static open(opts?: EngineOptions): Promise<ArtifactEngine>;
|
|
17
18
|
close(): void;
|
|
19
|
+
renderMarkdown(record: ArtifactRecord): string;
|
|
20
|
+
private assertSprintChangesAvailable;
|
|
18
21
|
create(input: unknown): Promise<ArtifactRecord>;
|
|
19
22
|
private resolveCreateSlug;
|
|
20
23
|
readById(id: string): Promise<ArtifactRecord>;
|
|
@@ -35,11 +38,5 @@ export declare class ArtifactEngine {
|
|
|
35
38
|
}>;
|
|
36
39
|
readRevision(id: string, revision: number): Promise<ArtifactRecord>;
|
|
37
40
|
rebuildIndex(): Promise<RebuildReport>;
|
|
38
|
-
/**
|
|
39
|
-
* Direct accessor used by the export module. Resolves the latest record
|
|
40
|
-
* for an indexed entry without re-querying SQLite.
|
|
41
|
-
*/
|
|
42
41
|
readForIndexed(indexed: IndexedArtifact): Promise<ArtifactRecord>;
|
|
43
|
-
/** Convenience accessor for callers that need the latest frontmatter. */
|
|
44
|
-
static frontmatterFromRecord(record: ArtifactRecord): ArtifactFrontmatter;
|
|
45
42
|
}
|
package/dist/artifacts/engine.js
CHANGED
|
@@ -1,28 +1,47 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
2
3
|
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import { artifactFilePath, artifactTypeDir, resolveWorkspacePaths, } from '../workspace/paths.js';
|
|
4
|
-
import { closeIndexDb, ensureIndexSchema, openIndexDb
|
|
4
|
+
import { artifactFilePath, artifactTypeDir, resolveWorkspacePaths, resolveContainmentRoot, rejectIfSymlink, } from '../workspace/paths.js';
|
|
5
|
+
import { closeIndexDb, ensureIndexSchema, openIndexDb } from '../index/db.js';
|
|
5
6
|
import { getArtifactById, getArtifactByTypeSlug, listArtifacts, listRevisions, rebuildIndex, upsertArtifact, } from '../index/indexer.js';
|
|
6
|
-
import { atomicWriteFile, readArtifactFile, renderArtifactFile
|
|
7
|
+
import { atomicWriteFile, readArtifactFile, renderArtifactFile } from './storage.js';
|
|
7
8
|
import { writeRevisionSnapshot, readRevisionSnapshot } from '../index/revisions.js';
|
|
8
9
|
import { makeSlug, uniqueSlug } from './slug.js';
|
|
9
10
|
import { artifactFrontmatterSchema, } from './types.js';
|
|
10
11
|
import { assertSupportedType, parseCreateInput, parseUpdateInput, validateArtifactMeta, } from './validation.js';
|
|
11
12
|
import { knownArtifactTypes, readConfig } from '../workspace/config.js';
|
|
12
13
|
import { SpegoError } from '../errors.js';
|
|
14
|
+
function sprintChanges(meta) {
|
|
15
|
+
const changes = meta.changes;
|
|
16
|
+
if (!Array.isArray(changes))
|
|
17
|
+
return null;
|
|
18
|
+
return changes.filter((change) => typeof change === 'string');
|
|
19
|
+
}
|
|
13
20
|
/** Create with `await ArtifactEngine.open(opts)`; remember to `close()`. */
|
|
14
21
|
export class ArtifactEngine {
|
|
15
22
|
paths;
|
|
16
23
|
config;
|
|
17
24
|
db;
|
|
18
25
|
closed = false;
|
|
19
|
-
|
|
26
|
+
resolvedRoot;
|
|
27
|
+
constructor(paths, config, db, resolvedRoot) {
|
|
20
28
|
this.paths = paths;
|
|
21
29
|
this.config = config;
|
|
22
30
|
this.db = db;
|
|
31
|
+
this.resolvedRoot = resolvedRoot;
|
|
23
32
|
}
|
|
24
33
|
static async open(opts = {}) {
|
|
25
|
-
const
|
|
34
|
+
const rawRoot = path.resolve(opts.projectRoot ?? process.cwd());
|
|
35
|
+
const paths = resolveWorkspacePaths(rawRoot);
|
|
36
|
+
// Lstat-guard owned components before resolving containment root.
|
|
37
|
+
await rejectIfSymlink(paths.workspaceRoot);
|
|
38
|
+
await rejectIfSymlink(paths.artifactsRoot);
|
|
39
|
+
await rejectIfSymlink(paths.revisionsRoot);
|
|
40
|
+
await rejectIfSymlink(paths.indexRoot);
|
|
41
|
+
await rejectIfSymlink(paths.configPath);
|
|
42
|
+
await rejectIfSymlink(paths.indexDbPath);
|
|
43
|
+
// Resolve .spego realpath as containment root.
|
|
44
|
+
const resolvedRoot = await resolveContainmentRoot(paths.workspaceRoot);
|
|
26
45
|
let config;
|
|
27
46
|
try {
|
|
28
47
|
config = await readConfig(paths.configPath);
|
|
@@ -33,9 +52,15 @@ export class ArtifactEngine {
|
|
|
33
52
|
}
|
|
34
53
|
throw err;
|
|
35
54
|
}
|
|
55
|
+
// Reject symlinked type directories for all known types.
|
|
56
|
+
const known = knownArtifactTypes(config);
|
|
57
|
+
for (const t of known) {
|
|
58
|
+
await rejectIfSymlink(artifactTypeDir(paths, t));
|
|
59
|
+
await rejectIfSymlink(path.join(paths.revisionsRoot, t));
|
|
60
|
+
}
|
|
36
61
|
const db = openIndexDb(paths.indexDbPath);
|
|
37
62
|
ensureIndexSchema(db);
|
|
38
|
-
return new ArtifactEngine(paths, config, db);
|
|
63
|
+
return new ArtifactEngine(paths, config, db, resolvedRoot);
|
|
39
64
|
}
|
|
40
65
|
close() {
|
|
41
66
|
if (this.closed)
|
|
@@ -43,6 +68,36 @@ export class ArtifactEngine {
|
|
|
43
68
|
this.closed = true;
|
|
44
69
|
closeIndexDb(this.db);
|
|
45
70
|
}
|
|
71
|
+
renderMarkdown(record) {
|
|
72
|
+
return renderArtifactFile(record.frontmatter, record.body);
|
|
73
|
+
}
|
|
74
|
+
assertSprintChangesAvailable(meta, selfId) {
|
|
75
|
+
const changes = sprintChanges(meta);
|
|
76
|
+
if (!changes || changes.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
const claimed = new Set(changes);
|
|
79
|
+
for (const row of listArtifacts(this.db, { type: 'sprint-plan' })) {
|
|
80
|
+
if (row.id === selfId)
|
|
81
|
+
continue;
|
|
82
|
+
if (row.meta.status === 'closed')
|
|
83
|
+
continue;
|
|
84
|
+
const ownerChanges = sprintChanges(row.meta);
|
|
85
|
+
if (!ownerChanges)
|
|
86
|
+
continue;
|
|
87
|
+
const change = ownerChanges.find((name) => claimed.has(name));
|
|
88
|
+
if (!change)
|
|
89
|
+
continue;
|
|
90
|
+
throw new SpegoError('VALIDATION_FAILED', `Change "${change}" already belongs to non-closed sprint-plan ${row.slug}`, {
|
|
91
|
+
change,
|
|
92
|
+
owner: {
|
|
93
|
+
id: row.id,
|
|
94
|
+
type: row.type,
|
|
95
|
+
slug: row.slug,
|
|
96
|
+
title: row.title,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
46
101
|
// ---------------------------------------------------------------- create
|
|
47
102
|
async create(input) {
|
|
48
103
|
const data = parseCreateInput(input);
|
|
@@ -62,15 +117,16 @@ export class ArtifactEngine {
|
|
|
62
117
|
meta: validatedMeta,
|
|
63
118
|
});
|
|
64
119
|
const filePath = artifactFilePath(this.paths, fm.type, fm.slug);
|
|
120
|
+
if (fm.type === 'sprint-plan')
|
|
121
|
+
this.assertSprintChangesAvailable(fm.meta);
|
|
65
122
|
// File-first: write canonical + snapshot, then mirror to index.
|
|
66
|
-
await atomicWriteFile(filePath, renderArtifactFile(fm, data.body));
|
|
67
|
-
const snapPath = await writeRevisionSnapshot(this.paths, fm, data.body);
|
|
123
|
+
await atomicWriteFile(filePath, renderArtifactFile(fm, data.body), this.resolvedRoot);
|
|
124
|
+
const snapPath = await writeRevisionSnapshot(this.paths, fm, data.body, this.resolvedRoot);
|
|
68
125
|
upsertArtifact(this.db, fm, filePath, snapPath);
|
|
69
126
|
return { frontmatter: fm, body: data.body, path: filePath };
|
|
70
127
|
}
|
|
71
128
|
async resolveCreateSlug(data) {
|
|
72
129
|
const desired = data.slug ? makeSlug(data.slug) : makeSlug(data.title);
|
|
73
|
-
// Existing slugs come from the index (fast) and fallback file scan (truth).
|
|
74
130
|
const existing = new Set();
|
|
75
131
|
for (const row of listArtifacts(this.db, { type: data.type, includeDeleted: true })) {
|
|
76
132
|
existing.add(row.slug);
|
|
@@ -125,7 +181,11 @@ export class ArtifactEngine {
|
|
|
125
181
|
const current = await readArtifactFile(indexed.path);
|
|
126
182
|
if (data.expectedRevision !== undefined &&
|
|
127
183
|
data.expectedRevision !== current.frontmatter.revision) {
|
|
128
|
-
throw new SpegoError('REVISION_CONFLICT', `Stale revision for ${id}: expected ${data.expectedRevision}, current ${current.frontmatter.revision}`, {
|
|
184
|
+
throw new SpegoError('REVISION_CONFLICT', `Stale revision for ${id}: expected ${data.expectedRevision}, current ${current.frontmatter.revision}`, {
|
|
185
|
+
id,
|
|
186
|
+
expectedRevision: data.expectedRevision,
|
|
187
|
+
currentRevision: current.frontmatter.revision,
|
|
188
|
+
});
|
|
129
189
|
}
|
|
130
190
|
if (data.meta !== undefined) {
|
|
131
191
|
data.meta = validateArtifactMeta(indexed.type, data.meta);
|
|
@@ -138,8 +198,10 @@ export class ArtifactEngine {
|
|
|
138
198
|
revision: current.frontmatter.revision + 1,
|
|
139
199
|
updatedAt: new Date().toISOString(),
|
|
140
200
|
});
|
|
141
|
-
|
|
142
|
-
|
|
201
|
+
if (fm.type === 'sprint-plan')
|
|
202
|
+
this.assertSprintChangesAvailable(fm.meta, indexed.id);
|
|
203
|
+
await atomicWriteFile(indexed.path, renderArtifactFile(fm, nextBody), this.resolvedRoot);
|
|
204
|
+
const snapPath = await writeRevisionSnapshot(this.paths, fm, nextBody, this.resolvedRoot);
|
|
143
205
|
upsertArtifact(this.db, fm, indexed.path, snapPath);
|
|
144
206
|
return { frontmatter: fm, body: nextBody, path: indexed.path };
|
|
145
207
|
}
|
|
@@ -166,8 +228,8 @@ export class ArtifactEngine {
|
|
|
166
228
|
updatedAt: new Date().toISOString(),
|
|
167
229
|
deletedAt: new Date().toISOString(),
|
|
168
230
|
});
|
|
169
|
-
await atomicWriteFile(indexed.path, renderArtifactFile(fm, current.body));
|
|
170
|
-
const snapPath = await writeRevisionSnapshot(this.paths, fm, current.body);
|
|
231
|
+
await atomicWriteFile(indexed.path, renderArtifactFile(fm, current.body), this.resolvedRoot);
|
|
232
|
+
const snapPath = await writeRevisionSnapshot(this.paths, fm, current.body, this.resolvedRoot);
|
|
171
233
|
upsertArtifact(this.db, fm, indexed.path, snapPath);
|
|
172
234
|
return { frontmatter: fm, body: current.body, path: indexed.path };
|
|
173
235
|
}
|
|
@@ -192,18 +254,9 @@ export class ArtifactEngine {
|
|
|
192
254
|
const known = knownArtifactTypes(this.config);
|
|
193
255
|
return rebuildIndex(this.db, this.paths, known);
|
|
194
256
|
}
|
|
195
|
-
// ------------------------------------------------------------ frontmatter
|
|
196
|
-
/**
|
|
197
|
-
* Direct accessor used by the export module. Resolves the latest record
|
|
198
|
-
* for an indexed entry without re-querying SQLite.
|
|
199
|
-
*/
|
|
200
257
|
async readForIndexed(indexed) {
|
|
201
258
|
const file = await readArtifactFile(indexed.path);
|
|
202
259
|
return { ...file, path: indexed.path };
|
|
203
260
|
}
|
|
204
|
-
/** Convenience accessor for callers that need the latest frontmatter. */
|
|
205
|
-
static frontmatterFromRecord(record) {
|
|
206
|
-
return record.frontmatter;
|
|
207
|
-
}
|
|
208
261
|
}
|
|
209
262
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/artifacts/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/artifacts/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,30 @@ export const ARTIFACT_META_SCHEMAS = {
|
|
|
16
16
|
date: z.string().optional(),
|
|
17
17
|
tags: z.array(z.string()).optional(),
|
|
18
18
|
}),
|
|
19
|
-
'sprint-plan': z
|
|
19
|
+
'sprint-plan': z
|
|
20
|
+
.object({
|
|
20
21
|
sprint: z.string().optional(),
|
|
21
22
|
startDate: z.string().optional(),
|
|
22
23
|
endDate: z.string().optional(),
|
|
23
24
|
status: z.enum(['planned', 'active', 'closed']).optional(),
|
|
24
25
|
tags: z.array(z.string()).optional(),
|
|
26
|
+
changes: z.array(z.string().min(1)).optional(),
|
|
27
|
+
})
|
|
28
|
+
.refine((meta) => !meta.changes || new Set(meta.changes).size === meta.changes.length, {
|
|
29
|
+
path: ['changes'],
|
|
30
|
+
message: 'changes must be unique within a sprint-plan',
|
|
31
|
+
}),
|
|
32
|
+
epic: z.object({
|
|
33
|
+
deps: z.array(z.string()).optional(),
|
|
34
|
+
links: z.array(z.string()).optional(),
|
|
35
|
+
requires: z.array(z.string().min(1)).optional(),
|
|
36
|
+
gaps: z
|
|
37
|
+
.array(z.object({
|
|
38
|
+
flag: z.string().min(1),
|
|
39
|
+
note: z.string().optional(),
|
|
40
|
+
}))
|
|
41
|
+
.optional(),
|
|
42
|
+
tags: z.array(z.string()).optional(),
|
|
25
43
|
}),
|
|
26
44
|
brainstorm: z.object({
|
|
27
45
|
status: z.enum(['open', 'closed']).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/artifacts/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAiC;IACjE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;IAEF,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC3D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrC,CAAC;IAEF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrC,CAAC;IAEF,aAAa,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/artifacts/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export declare function parseArtifactFile(text: string, sourcePath: string): {
|
|
|
6
6
|
frontmatter: ArtifactFrontmatter;
|
|
7
7
|
body: string;
|
|
8
8
|
};
|
|
9
|
-
/** Read and parse a markdown artifact file from disk. */
|
|
9
|
+
/** Read and parse a markdown artifact file from disk, rejecting symlinked targets. */
|
|
10
10
|
export declare function readArtifactFile(absPath: string): Promise<{
|
|
11
11
|
frontmatter: ArtifactFrontmatter;
|
|
12
12
|
body: string;
|
|
@@ -14,5 +14,6 @@ export declare function readArtifactFile(absPath: string): Promise<{
|
|
|
14
14
|
/**
|
|
15
15
|
* Atomically write a markdown file: write to a temp sibling, fsync, rename.
|
|
16
16
|
* Rename on the same filesystem is atomic on POSIX and Windows (ReplaceFile).
|
|
17
|
+
* Verifies containment when `resolvedRoot` is provided.
|
|
17
18
|
*/
|
|
18
|
-
export declare function atomicWriteFile(absPath: string, contents: string): Promise<void>;
|
|
19
|
+
export declare function atomicWriteFile(absPath: string, contents: string, resolvedRoot?: string): Promise<void>;
|
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import YAML from 'yaml';
|
|
4
4
|
import { artifactFrontmatterSchema } from './types.js';
|
|
5
5
|
import { SpegoError } from '../errors.js';
|
|
6
|
+
import { assertParentContained } from '../workspace/paths.js';
|
|
6
7
|
const FENCE_OPEN = /^---\r?\n/;
|
|
7
8
|
const FENCE_CLOSE = /\r?\n---\r?\n?/;
|
|
8
9
|
/** Render frontmatter + body to a single markdown string. */
|
|
@@ -21,12 +22,16 @@ export function renderArtifactFile(frontmatter, body) {
|
|
|
21
22
|
export function parseArtifactFile(text, sourcePath) {
|
|
22
23
|
const openMatch = text.match(FENCE_OPEN);
|
|
23
24
|
if (!openMatch) {
|
|
24
|
-
throw new SpegoError('VALIDATION_FAILED', `Missing frontmatter block in ${sourcePath}`, {
|
|
25
|
+
throw new SpegoError('VALIDATION_FAILED', `Missing frontmatter block in ${sourcePath}`, {
|
|
26
|
+
path: sourcePath,
|
|
27
|
+
});
|
|
25
28
|
}
|
|
26
29
|
const afterOpen = text.slice(openMatch[0].length);
|
|
27
30
|
const closeMatch = afterOpen.match(FENCE_CLOSE);
|
|
28
31
|
if (!closeMatch || closeMatch.index === undefined) {
|
|
29
|
-
throw new SpegoError('VALIDATION_FAILED', `Unterminated frontmatter block in ${sourcePath}`, {
|
|
32
|
+
throw new SpegoError('VALIDATION_FAILED', `Unterminated frontmatter block in ${sourcePath}`, {
|
|
33
|
+
path: sourcePath,
|
|
34
|
+
});
|
|
30
35
|
}
|
|
31
36
|
const yamlText = afterOpen.slice(0, closeMatch.index);
|
|
32
37
|
const body = afterOpen.slice(closeMatch.index + closeMatch[0].length).replace(/^\n+/, '');
|
|
@@ -37,7 +42,10 @@ export function parseArtifactFile(text, sourcePath) {
|
|
|
37
42
|
data = YAML.parse(yamlText);
|
|
38
43
|
}
|
|
39
44
|
catch (err) {
|
|
40
|
-
throw new SpegoError('VALIDATION_FAILED', `Invalid YAML frontmatter in ${sourcePath}`, {
|
|
45
|
+
throw new SpegoError('VALIDATION_FAILED', `Invalid YAML frontmatter in ${sourcePath}`, {
|
|
46
|
+
path: sourcePath,
|
|
47
|
+
cause: err.message,
|
|
48
|
+
});
|
|
41
49
|
}
|
|
42
50
|
const result = artifactFrontmatterSchema.safeParse(data);
|
|
43
51
|
if (!result.success) {
|
|
@@ -48,8 +56,26 @@ export function parseArtifactFile(text, sourcePath) {
|
|
|
48
56
|
}
|
|
49
57
|
return { frontmatter: result.data, body };
|
|
50
58
|
}
|
|
51
|
-
/** Read and parse a markdown artifact file from disk. */
|
|
59
|
+
/** Read and parse a markdown artifact file from disk, rejecting symlinked targets. */
|
|
52
60
|
export async function readArtifactFile(absPath) {
|
|
61
|
+
// Reject if the file itself is a symlink.
|
|
62
|
+
let stat;
|
|
63
|
+
try {
|
|
64
|
+
stat = await fs.lstat(absPath);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err.code === 'ENOENT') {
|
|
68
|
+
throw new SpegoError('ARTIFACT_NOT_FOUND', `Artifact file not found at ${absPath}`, {
|
|
69
|
+
path: absPath,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
if (stat.isSymbolicLink()) {
|
|
75
|
+
throw new SpegoError('WORKSPACE_CONTAINMENT', `Symlinked artifact file at ${absPath}`, {
|
|
76
|
+
path: absPath,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
53
79
|
let text;
|
|
54
80
|
try {
|
|
55
81
|
text = await fs.readFile(absPath, 'utf8');
|
|
@@ -67,8 +93,12 @@ export async function readArtifactFile(absPath) {
|
|
|
67
93
|
/**
|
|
68
94
|
* Atomically write a markdown file: write to a temp sibling, fsync, rename.
|
|
69
95
|
* Rename on the same filesystem is atomic on POSIX and Windows (ReplaceFile).
|
|
96
|
+
* Verifies containment when `resolvedRoot` is provided.
|
|
70
97
|
*/
|
|
71
|
-
export async function atomicWriteFile(absPath, contents) {
|
|
98
|
+
export async function atomicWriteFile(absPath, contents, resolvedRoot) {
|
|
99
|
+
if (resolvedRoot) {
|
|
100
|
+
await assertParentContained(resolvedRoot, absPath);
|
|
101
|
+
}
|
|
72
102
|
await fs.mkdir(path.dirname(absPath), { recursive: true });
|
|
73
103
|
const tmp = `${absPath}.${process.pid}.${Date.now()}.tmp`;
|
|
74
104
|
const handle = await fs.open(tmp, 'w', 0o644);
|
|
@@ -76,14 +106,19 @@ export async function atomicWriteFile(absPath, contents) {
|
|
|
76
106
|
await handle.writeFile(contents, 'utf8');
|
|
77
107
|
await handle.sync();
|
|
78
108
|
}
|
|
79
|
-
|
|
109
|
+
catch (err) {
|
|
80
110
|
await handle.close();
|
|
111
|
+
await fs.unlink(tmp).catch(() => undefined);
|
|
112
|
+
throw new SpegoError('WRITE_FAILED', `Failed to write artifact to ${absPath}`, {
|
|
113
|
+
path: absPath,
|
|
114
|
+
cause: err.message,
|
|
115
|
+
});
|
|
81
116
|
}
|
|
117
|
+
await handle.close();
|
|
82
118
|
try {
|
|
83
119
|
await fs.rename(tmp, absPath);
|
|
84
120
|
}
|
|
85
121
|
catch (err) {
|
|
86
|
-
// Clean up temp file if rename failed.
|
|
87
122
|
await fs.unlink(tmp).catch(() => undefined);
|
|
88
123
|
throw new SpegoError('WRITE_FAILED', `Failed to write artifact to ${absPath}`, {
|
|
89
124
|
path: absPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/artifacts/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAA4B,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/artifacts/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAA4B,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,UAAU,GAAG,WAAW,CAAC;AAC/B,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,WAAgC,EAAE,IAAY;IAC/E,wEAAwE;IACxE,wDAAwD;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QACvC,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,cAAc;QACjC,cAAc,EAAE,OAAO;KACxB,CAAC,CAAC,OAAO,EAAE,CAAC;IACb,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;IAC7D,OAAO,QAAQ,IAAI,YAAY,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,UAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,gCAAgC,UAAU,EAAE,EAAE;YACtF,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,qCAAqC,UAAU,EAAE,EAAE;YAC3F,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1F,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,0EAA0E;QAC1E,+DAA+D;QAC/D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,+BAA+B,UAAU,EAAE,EAAE;YACrF,IAAI,EAAE,UAAU;YAChB,KAAK,EAAG,GAAa,CAAC,OAAO;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,0BAA0B,UAAU,EAAE,EAAE;YAChF,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAIpD,0CAA0C;IAC1C,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,UAAU,CAAC,oBAAoB,EAAE,8BAA8B,OAAO,EAAE,EAAE;gBAClF,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,8BAA8B,OAAO,EAAE,EAAE;YACrF,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,UAAU,CAAC,oBAAoB,EAAE,8BAA8B,OAAO,EAAE,EAAE;gBAClF,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,QAAgB,EAChB,YAAqB;IAErB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,+BAA+B,OAAO,EAAE,EAAE;YAC7E,IAAI,EAAE,OAAO;YACb,KAAK,EAAG,GAAa,CAAC,OAAO;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,+BAA+B,OAAO,EAAE,EAAE;YAC7E,IAAI,EAAE,OAAO;YACb,KAAK,EAAG,GAAa,CAAC,OAAO;SAC9B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { z } from 'zod';
|
|
|
3
3
|
* Built-in artifact types from the product spec. Custom types may be added
|
|
4
4
|
* via workspace config (see config schema).
|
|
5
5
|
*/
|
|
6
|
-
export declare const BUILTIN_ARTIFACT_TYPES: readonly ["prd", "okr", "retro", "sprint-plan", "brainstorm", "usecases", "design", "api", "architecture", "decision", "risk", "qa", "ceremony"];
|
|
6
|
+
export declare const BUILTIN_ARTIFACT_TYPES: readonly ["prd", "okr", "retro", "sprint-plan", "epic", "brainstorm", "usecases", "design", "api", "architecture", "decision", "risk", "qa", "ceremony"];
|
|
7
7
|
export type BuiltinArtifactType = (typeof BUILTIN_ARTIFACT_TYPES)[number];
|
|
8
8
|
export type ArtifactType = string;
|
|
9
9
|
/** ISO-8601 datetime string. */
|
package/dist/artifacts/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,KAAK;IACL,KAAK;IACL,OAAO;IACP,aAAa;IACb,MAAM;IACN,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,KAAK;IACL,cAAc;IACd,UAAU;IACV,MAAM;IACN,IAAI;IACJ,UAAU;CACD,CAAC;AAKX,gCAAgC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;AAE3F;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACxC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACnD,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -60,7 +60,7 @@ export function validateArtifactMeta(type, meta) {
|
|
|
60
60
|
return validateMetaForType(type, meta);
|
|
61
61
|
}
|
|
62
62
|
catch (err) {
|
|
63
|
-
if (err instanceof
|
|
63
|
+
if (err instanceof z.ZodError) {
|
|
64
64
|
throw new SpegoError('VALIDATION_FAILED', `Invalid metadata for artifact type: ${type}`, {
|
|
65
65
|
type,
|
|
66
66
|
issues: err.issues,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/artifacts/validation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/artifacts/validation.ts"],"names":[],"mappings":"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"}
|