feat(types)!: drop the blob column type (ADR-0005 Amendment 2)
ci / gate (push) Failing after 35s
ci / manifests (push) Successful in 3s
website / deploy (push) Successful in 35s

blob was a dead-end: declarable but never fillable (no literal in either
mode, seed-unsupported), so a blob column could only ever hold NULL. Remove
Type::Blob + Value/CellValue::Blob + the base64 CSV path + the grammar slot
+ completion/render/type-change/seed handling + the binder refusal (whose
message also carried a user-facing "DSL" copy-rule bug). The vocabulary is
now nine types; base64 stays (clipboard OSC-52).

Backward compat is the ADR-0015 migration framework's first real use: a
v1->v2 format bump (CURRENT_SCHEMA_VERSION across serializer/parser/skeleton)
with a migrator that rewrites `type: blob` -> `type: text`, and a forced .db
rebuild from the migrated text when a blob column was actually converted
(the stale .db keeps a STRICT BLOB engine column). Conversion to text is
non-destructive and CSV-free. Covered by a full-stack integration test and a
Tier-4 PTY test that opens a real legacy v1-blob project.

Also sweeps the nine-type vocabulary through CLAUDE.md, requirements.md, the
website (type reference, seed doc, highlight grammar), and the ADR-0030/0033/
0035 cross-references; CHANGELOG Removed entry; handoff-79.

BREAKING CHANGE: the `blob` column type is removed. Existing projects that
declared a blob column are migrated on first open (the column becomes text;
the original project.yaml is kept as a .v1.bak).
This commit is contained in:
claude@clouddev1
2026-06-22 21:25:38 +00:00
parent 1a2002dbf6
commit 6b4c4dcea4
41 changed files with 506 additions and 390 deletions
-1
View File
@@ -117,7 +117,6 @@ pub fn schema_every_type() -> SchemaCache {
("b", Type::Bool),
("dt", Type::Date),
("ts", Type::DateTime),
("data", Type::Blob),
("sid", Type::ShortId),
("auto", Type::Serial),
("note", Type::Text),
@@ -1,5 +1,6 @@
---
source: tests/typing_surface/create_table.rs
assertion_line: 89
description: "input=\"create table Customers with pk Code(\" cursor=36"
expression: "& a"
---
@@ -45,11 +46,6 @@ Assessment {
kind: Keyword,
mode: Both,
},
Candidate {
text: "blob",
kind: Keyword,
mode: Both,
},
Candidate {
text: "serial",
kind: Keyword,
@@ -107,11 +103,6 @@ Assessment {
kind: Keyword,
mode: Both,
},
Candidate {
text: "blob",
kind: Keyword,
mode: Both,
},
Candidate {
text: "serial",
kind: Keyword,
@@ -1,5 +1,6 @@
---
source: tests/typing_surface/delete_with_where.rs
assertion_line: 76
description: "input=\"delete from Things where ts=\" cursor=28"
expression: "& a"
---
@@ -35,11 +36,6 @@ Assessment {
kind: Identifier,
mode: Both,
},
Candidate {
text: "data",
kind: Identifier,
mode: Both,
},
Candidate {
text: "dt",
kind: Identifier,
@@ -1,5 +1,6 @@
---
source: tests/typing_surface/rename_change_column.rs
assertion_line: 69
description: "input=\"change column in Customers: Email (\" cursor=35"
expression: "& a"
---
@@ -45,11 +46,6 @@ Assessment {
kind: Keyword,
mode: Both,
},
Candidate {
text: "blob",
kind: Keyword,
mode: Both,
},
Candidate {
text: "serial",
kind: Keyword,
@@ -107,11 +103,6 @@ Assessment {
kind: Keyword,
mode: Both,
},
Candidate {
text: "blob",
kind: Keyword,
mode: Both,
},
Candidate {
text: "serial",
kind: Keyword,
@@ -1,5 +1,6 @@
---
source: tests/typing_surface/where_expression.rs
assertion_line: 50
description: "input=\"delete from Things where k between \" cursor=35"
expression: "& a"
---
@@ -35,11 +36,6 @@ Assessment {
kind: Identifier,
mode: Both,
},
Candidate {
text: "data",
kind: Identifier,
mode: Both,
},
Candidate {
text: "dt",
kind: Identifier,
@@ -1,5 +1,6 @@
---
source: tests/typing_surface/where_expression.rs
assertion_line: 58
description: "input=\"delete from Things where k in (\" cursor=31"
expression: "& a"
---
@@ -35,11 +36,6 @@ Assessment {
kind: Identifier,
mode: Both,
},
Candidate {
text: "data",
kind: Identifier,
mode: Both,
},
Candidate {
text: "dt",
kind: Identifier,