git:20261021.6ab12ef to git:20261024.6f2ef1c

1 added, 0 removed. Audit A to A.

# DOX — packages/client/src/lib/openspec
Files in this directory. One row per source file. See change: fold-oversized-agents-directories.
| File | Purpose |
|------|---------|
+ | `archived-artifact-path.ts` | Pure `activeChangeOfPath(path)` (name of an `openspec/changes/<name>/…` path, `archive/` excluded) and `archivedArtifactPath(path, entries)` (same sub-path under the newest exactly-named archive entry via `matchArchiveEntries`, else `null`). See change: fix-archived-session-view-header-and-stale-artifact-tab (D2). |
| `openspec-dependencies-api.ts` | `fetchDependencies(cwd, change)` / `saveDependencies(body)` for `/api/openspec/dependencies`; `DependenciesApiError {status, reason}`; types `DependenciesGet`, `DeclaredDependencies`. See change: add-openspec-change-dependencies. |
| `openspec-dependencies-view.ts` | Pure board helpers: `hasDependencyGraph`, `showDependencyUi` (default schema `pi-spec-driven` or any `hasFile`), `showDeclareHint` (`dependencies` artifact `ready`, graph present), `orderByWave` (waves → null → no field), `executionOrderDrop` (own column no-op; other column appends), `sourceOrderAfterMove` (source column's MANUAL order, never the wave display). See change: add-openspec-change-dependencies. |
| `OpenSpecMapContext.tsx` | `OpenSpecMapContext` + `useOpenSpecMap()`: App's `openspecMap` for attachment resolution; absent provider → empty map. See change: resolve-archived-attached-proposal. |
| `archive-cache.ts` | Shared per-cwd cache for `GET /api/openspec-archive`: in-flight dedupe, activeSig invalidation, 5 min TTL, 30 s error retry. Exports `requestArchive`, `getArchiveState`, `activeSignature`, `subscribeArchiveCache`. See change: resolve-archived-attached-proposal. |
| `openspec-board-order.ts` | Pure per-change ordering helpers. `defaultChangeSort` orders in-progress → others → complete, then name. → see `openspec-board-order.ts.AGENTS.md` |
| `openspec-board-worktree.ts` | `deriveWorktreeProgress(session, changeName, mainDone, openspecMap)`. Returns null for non-worktree session. → see `openspec-board-worktree.ts.AGENTS.md` |
| `openspec-config-api.ts` | Fetch helpers for OpenSpec config + update endpoints. Adds saveOpenSpecConfig(), runOpenSpecUpdate(), fetchUpdateStatus(); OpenSpecUpdateStatus type module-private. See change: add-openspec-profile-settings. Adds `runOpenSpecInit` (+`OpenSpecInitError` w/ stderr), `fetchOpenSpecPollSettings`, `setOfferInitialization`, `addOpenSpecOptOut`/`removeOpenSpecOptOut` (GET→PUT read-modify-write on /api/config). See change: add-openspec-init-affordances. |
| `openspec-group-palette.ts` | Curated color palette constant + resolver for OpenSpec group swatches. See change: add-openspec-change-grouping. |
| `openspec-groups-api.ts` | Fetch helpers for `/api/openspec/groups` CRUD + assignment endpoints. → see `openspec-groups-api.ts.AGENTS.md` |
| `openspec-tasks-api.ts` | Pure fetch wrappers for `/api/openspec/tasks` endpoints. Exports `OpenSpecTask`, `TasksPayload`,… → see `openspec-tasks-api.ts.AGENTS.md` |
| `openspec-workflow-schema-api.ts` | Client wrappers for `POST /api/openspec/workflow-schema`. Exports `runWorkflowSchemaAction(req)` → `WorkflowSchemaOutcome`, `allowedWorkflowSchemaActions(status)` (Remove hidden while configured = pi-spec-driven), `workflowSchemaPresentation(status)` → `{key,severity,label,chipLabel,sentence,recommended,menu}` (11-row first-match table, pure), `richParts(template,codes,texts?)`, `SEVERITY_PILL_CLASS`, `previousDefaultOptions(status)` (spec-driven + `projectSchemas`), `workflowSchemaNeedsAttention(status)`, `workflowSchemaSettingsHref(cwd)`, `WORKFLOW_SCHEMA_NAME`, `BUILTIN_DEFAULT_SCHEMA`. Tested by `__tests__/openspec-workflow-schema-api.test.ts` (#U1). See change: add-pi-spec-driven-schema. |
| `rendered-cwds.ts` | Pure `computeRenderedCwds`: cwds the OpenSpec reconcile pulls; adds attached sessions' cwd+mainPath (ended incl.) and archive-route candidates. See change: resolve-archived-attached-proposal. |
| `resolve-attachment.ts` | Pure `resolveAttachment(session, activeByCwd, getArchive)` → `active\|archived\|missing\|unresolved{loading\|disabled\|error}`; order active(cwd)→active(mainPath)→archive(cwd)→archive(mainPath); `matchArchiveEntries` exact-name escaped regex; same-name pick = newest ≥ local start day −1, else newest. See change: resolve-archived-attached-proposal. |
| `useAttachmentResolution.ts` | Hooks: `useAttachmentResolution(session, changesFallback?)`, `useResolvedAttachments(sessions, preload?)`, `useArchiveEntries(cwd, mapOverride?)`; lazy archive fetch via archive-cache. See change: resolve-archived-attached-proposal. |