Skip to content

feat(loop): record what the content is, as an open field (split Step 1) - #127

Merged
wu908 merged 1 commit into
mainfrom
feat/content-form-plumbing
Sep 16, 2026
Merged

wu908 merged 1 commit into
mainfrom
feat/content-form-plumbing

Conversation

@wu908

@wu908 wu908 commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Step 1 of the taxonomy split, deliberately invisible: the digest now also asks the model to name what this content is — 作品展示, 教程, 踩坑复盘, 清单, 观点, 前后对比 — and the name is stored on the deliverable and carried onto the project at pickup. Nothing reads it yet, so the interface does not change and the whole step can be reverted by ignoring two columns.

Why this shape rather than a fourth enum value

"What is this content" is open by nature — the creator should never pick from a list, and the model should be able to name any shape it sees. The three values that remain keep doing the job that genuinely needs a comparable finite key: routing, which judgment fields are required, which signals are watched, and (content_genome) which learned rules apply. Widening the enum instead would mean rebuilding six tables carrying the CHECK constraint.

One deliberate tolerance

The open field's length cap is 40 while the prompt asks for 4–12 characters: capping it tightly in the contract would make a slightly-too-long name fail validation and discard the entire AI draft — the silent-degradation shape behind bug #85.

Verified against the real model, with the creator's own example

material named form behaviour key
「第30天,新叶终于变深了」 30天养护记录 record
「春天画了六张水彩,想听听你们的意见」 水彩作品展示 share

The second is the case the creator raised — "what if I am just sharing a piece I made" — and the name now says 作品展示 instead of forcing it into 分享.

Tests

  • the form is stored and mirrored in the judgment;
  • the fallback path invents nothing (null);
  • pickup carries it onto the project;
  • one test pins the split's invariant: a project routes identically with and without a form.

Reverting the pickup carry fails that test. Full backend suite: 507 passed. Migration 057 also adds the column to the 043 rebuild DDL constant — the trap that has bitten twice.

Step 1 of the taxonomy split, deliberately invisible: the digest now also asks
the model to name what this content *is* — 作品展示, 教程, 踩坑复盘, 清单, 观点,
前后对比 — and the name is stored on the deliverable and carried onto the
project at pickup. Nothing reads it yet, so the interface does not change and
the whole step can be reverted by ignoring two columns.

Why this shape rather than a fourth enum value: "what is this content" is open
by nature (the creator should never pick from a list, and the model should be
able to name any shape it sees), while the three values that remain keep doing
the job that genuinely needs a comparable finite key — routing, which judgment
fields are required, which signals are watched, and (content_genome) which
learned rules apply. Widening the enum instead would mean rebuilding six tables
carrying the CHECK constraint.

The open field's length cap is 40 while the prompt asks for 4–12 characters:
capping it tightly in the contract would make a slightly-too-long name fail
validation and discard the entire AI draft, which is the silent-degradation
shape behind bug #85.

Verified against the real model with the creator's own example:

| material | named form | behaviour key |
|---|---|---|
| 「第30天,新叶终于变深了」 | 30天养护记录 | record |
| 「春天画了六张水彩,想听听你们的意见」 | 水彩作品展示 | share |

The second is the case the creator raised — "what if I am just sharing a piece
I made" — and the name now says 作品展示 instead of forcing it into 分享.

Tests: the form is stored and mirrored in the judgment; the fallback path
invents nothing (null); pickup carries it; and one test pins the split's
invariant — a project routes identically with and without a form. Reverting the
pickup carry fails that test.

Full backend suite: 507 passed. Migration 057 also adds the column to the 043
rebuild DDL constant, which is the trap that has bitten twice.
@wu908
wu908 merged commit 8985c01 into main Sep 16, 2026
2 checks passed
@wu908
wu908 deleted the feat/content-form-plumbing branch September 16, 2026 06:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant