summaryrefslogtreecommitdiff
path: root/project_claudomator_stories_not_null_bug.md
diff options
context:
space:
mode:
authorClaude Code <claude@terst.org>2026-08-15 18:06:00 +0000
committerClaude Code <claude@terst.org>2026-08-15 18:06:00 +0000
commita6d58e009efcc06e7b5221d75ebed36533786dce (patch)
treecfeded4c1bb8e61a4c117aced0b42e7d4aa0e15a /project_claudomator_stories_not_null_bug.md
parenteb0932bddad0daa47c36cd20599944c3dc45482a (diff)
Merge titanium's diverged memory tree into the shared historyHEADmain
Titanium and tungsten had grown two separate, unreconciled memory sets for the same -workspace scope. Ports over 18 titanium-only entries (12 claudomator files, the fork-scope-creep lesson, the doot Google Tasks OAuth limitation, the default-subagent-driven-execution preference, scout's Facebook priority, Hawaii GIS endpoints), merges two true duplicates into their existing tungsten files rather than keeping parallel copies (the migration-rename incident -- same 022->023 rename, same commit, titanium's version added the confirmed-safe-to-patch-prod-directly carve-out tungsten's didn't have; the APK build OOM note, folded into project_doot_widget_build.md as a RAM-constrained-host fallback), and marks doot_future_task_scheduling_ideas.md as historical now that all four of its backlog items (budgets, labels/projects, buckets, chains) are built.
Diffstat (limited to 'project_claudomator_stories_not_null_bug.md')
-rw-r--r--project_claudomator_stories_not_null_bug.md14
1 files changed, 14 insertions, 0 deletions
diff --git a/project_claudomator_stories_not_null_bug.md b/project_claudomator_stories_not_null_bug.md
new file mode 100644
index 0000000..65dae50
--- /dev/null
+++ b/project_claudomator_stories_not_null_bug.md
@@ -0,0 +1,14 @@
+---
+name: claudomator-stories-not-null-bug
+description: "POST /api/stories fails with NOT NULL constraint errors unless validation and deploy_config are explicitly passed, contradicting their documented \"nil/omitted if unset\" semantics"
+metadata:
+ node_type: memory
+ type: project
+ originSessionId: 560b9055-7a3f-483e-b1a0-1a4c70419390
+---
+
+`POST /api/stories` rejects a request that omits `validation` or `deploy_config` with `"NOT NULL constraint failed: stories.validation_json"` / `"...stories.deploy_config"`. `internal/story/story.go`'s `Story.Validation`/`Story.DeployConfig` fields (`json.RawMessage`, `omitempty`) are documented as "freeform JSON... nil/omitted if unset" and `internal/storage/story.go` has a `rawJSONOrNull` helper that appears intended to convert a nil `RawMessage` to a real SQL NULL — but the `stories` table's `validation_json`/`deploy_config` columns apparently have `NOT NULL` constraints that contradict this. Found 2026-07-10 while creating a story via the REST API directly (no chatbot MCP story-creation tool was exposed in that session).
+
+**Why:** Not investigated further — could be the columns were declared `NOT NULL` in an early migration before the "nullable, freeform" design was settled, or `rawJSONOrNull` has a bug. Not fixed as part of this finding.
+
+**How to apply:** When creating a story via `POST /api/stories` (REST directly, not through a UI/tool that already works around this), always pass explicit `"validation": {}` and `"deploy_config": {}` even if you have no real content for them yet — omitting either field fails the request. Worth a real fix (either drop the `NOT NULL` constraint via a migration, or make `rawJSONOrNull` actually write a valid empty-JSON default instead of relying on true SQL NULL) if this comes up again.