/** * Attachment storage tables: attachments, attachment_refs. * * @epic T760 * @task T796 */ /** * Allowed owner-entity types for `attachment_refs.owner_type`. * * Exported as the SSoT const array so the consolidated docs target schema * (`schema/cleo-project/docs.ts`, T11360) references this identifier rather * than re-declaring the literal — per the canonical typing report §5a. */ export declare const ATTACHMENT_OWNER_TYPES: readonly ["task", "observation", "session", "decision", "learning", "pattern"]; /** * Allowed lifecycle states for `attachments.lifecycle_status`. * * Mirrors the supersession workflow proven on `brain_decisions.confirmation_state` * (T1826) and extended for documents with the `draft`, `archived`, and * `deprecated` terminal states. * * Validation is enforced at the dispatch layer (not via a SQL CHECK constraint) * so future taxonomy additions do NOT require a schema migration. * * @task T10158 (Epic T10157 / Saga T9855) */ export declare const ATTACHMENT_LIFECYCLE_STATUSES: readonly ["draft", "proposed", "accepted", "superseded", "archived", "deprecated"]; /** Discriminated union of attachment lifecycle states. */ export type AttachmentLifecycleStatus = (typeof ATTACHMENT_LIFECYCLE_STATUSES)[number]; /** * Registry of stored attachments (blob content). * * Storage path: `.cleo/attachments/sha256//.` * * @epic T760 * @task T796 */ export declare const attachments: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{ name: "attachments"; schema: undefined; columns: { id: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: true; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; sha256: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; attachmentJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; refCount: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "number int53"; data: number; driverParam: number; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: undefined; baseColumn: never; identity: undefined; generated: undefined; }, {}>; slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; type: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; lifecycleStatus: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string enum"; data: "archived" | "proposed" | "accepted" | "superseded" | "deprecated" | "draft"; driverParam: string; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: ["draft", "proposed", "accepted", "superseded", "archived", "deprecated"]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; supersedes: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; supersededBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; summary: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; keywords: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; topics: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; relatedTasks: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; ownerVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; docVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "number int53"; data: number; driverParam: number; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: undefined; baseColumn: never; identity: undefined; generated: undefined; }, {}>; displayAlias: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachments"; dataType: "number int53"; data: number; driverParam: number; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: undefined; baseColumn: never; identity: undefined; generated: undefined; }, {}>; }; dialect: "sqlite"; }>; /** * Ref-counted junction table linking attachments to owner entities. * * @epic T760 * @task T796 */ export declare const attachmentRefs: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{ name: "attachment_refs"; schema: undefined; columns: { attachmentId: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachment_refs"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; ownerType: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachment_refs"; dataType: "string enum"; data: "task" | "observation" | "decision" | "pattern" | "learning" | "session"; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: ["task", "observation", "session", "decision", "learning", "pattern"]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; ownerId: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachment_refs"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; attachedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachment_refs"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; attachedBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "attachment_refs"; dataType: "string"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; }; dialect: "sqlite"; }>; /** * Allowed relations for a `docs_wikilinks` edge. * * A wikilink is a DERIVED, slug-addressed edge between two docs (or a doc and a * task) reconstructed from the authoritative provenance columns on * `attachments` — there is no hand-authored edge here. The relation enumerates * which source column produced the edge: * * - `supersedes` — `attachments.supersedes` (newer → older) * - `superseded-by` — `attachments.superseded_by` (older → newer) * - `related-task` — `attachments.related_tasks` JSON membership (doc → T####) * - `topic` — `attachments.topics` JSON co-membership (doc ↔ doc sharing a topic) * * Kept slug-primary so the edge table is Obsidian-grade (vault links are * slug-addressed) and survives attachment-id churn across versions. * * @task T11826 (Epic T11781 / Saga T11778) */ export declare const DOCS_WIKILINK_RELATIONS: readonly ["supersedes", "superseded-by", "related-task", "topic"]; /** Discriminated union of `docs_wikilinks.relation` values. */ export type DocsWikilinkRelation = (typeof DOCS_WIKILINK_RELATIONS)[number]; /** * `docs_wikilinks` — DERIVED, slug-addressed edge table for the docs graph. * * Per the ratified Docs-SSoT model (saga T11778): `cleo.db` is the SOLE doc * authority, and `docs_wikilinks` is a *minimal edge table derived from* * `supersedes` + `relatedTasks` + `topics` on `attachments`. It is NOT an * authoritative input surface — it is rebuilt idempotently from the provenance * columns by {@link import('../../docs/wikilinks.js').rebuildDocsWikilinks}. * * The table makes the bidirectional backlink graph queryable in O(edges) * without recomputing the BFS, which is what the Obsidian plugin (T11827) * renders. `cleo docs graph` (T10164) continues to compute the provenance BFS * but hydrates persisted backlinks from this table when present. * * Edges are slug-primary; `to_slug` carries a doc slug for `topic` / * `supersedes` / `superseded-by` edges and a `T####` task id for `related-task` * edges (`to_is_task = 1`). No markdown body `[[link]]` parsing is performed * (AC4) — the edges derive purely from structured provenance columns. * * @task T11826 (Epic T11781 / Saga T11778) */ export declare const docsWikilinks: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{ name: "docs_wikilinks"; schema: undefined; columns: { fromSlug: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "docs_wikilinks"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; toSlug: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "docs_wikilinks"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; relation: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "docs_wikilinks"; dataType: "string enum"; data: "topic" | "supersedes" | "superseded-by" | "related-task"; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: ["supersedes", "superseded-by", "related-task", "topic"]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; toIsTask: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "docs_wikilinks"; dataType: "boolean"; data: boolean; driverParam: number; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: undefined; baseColumn: never; identity: undefined; generated: undefined; }, {}>; derivedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{ name: string; tableName: "docs_wikilinks"; dataType: "string"; data: string; driverParam: string; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}>; }; dialect: "sqlite"; }>; export type AttachmentRow = typeof attachments.$inferSelect; export type NewAttachmentRow = typeof attachments.$inferInsert; export type AttachmentRefRow = typeof attachmentRefs.$inferSelect; export type NewAttachmentRefRow = typeof attachmentRefs.$inferInsert; /** Row type for `docs_wikilinks` SELECT queries. */ export type DocsWikilinkRow = typeof docsWikilinks.$inferSelect; /** Row type for `docs_wikilinks` INSERT operations. */ export type NewDocsWikilinkRow = typeof docsWikilinks.$inferInsert; //# sourceMappingURL=attachments.d.ts.map