feat(insights): a date on each conclusion, and no category enum - #603
Merged
Conversation
The categories were dropped before they were built. Three independent readings of the code disagreed about them and converged on one question for the owner: coming back in a month, do you open one book or all of them? The answer was one book — and per-book retrieval is already served by a chapter label and reading order. No column, no migration, no tabs. What the panel was actually missing is a date. A конспект is read months later, and without one it cannot answer "is this what I thought then, or what I think now". A re-run replaces the row and moves updatedAt, so this is the age of the current text, not of the conversation that started it. Absolute, not relative: "3 days ago" is the register of a shelf in progress, and by the time this matters the answer is months. ISO because the shared package holds no locale and the value must not shift a day between devices. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011rgEMvYYi4Egj99dVtvm6E
Verified: every name in that list has zero references and the files do not exist — it was removed in #597. A to-do pointing at deleted files sends the next reader chasing nothing, which is how the Play deadline in this same file misled an agent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011rgEMvYYi4Egj99dVtvm6E
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Acting on the consilium's one unresolved question, which the owner answered: the return path is per-book ("I open Dracula and see what I worked out about it"), and one insight per chapter, refined over time.
Both answers remove work rather than adding it.
The category enum is not being built
Per-book retrieval is served by a chapter label and reading order — both already ship. Tabs over ≤10 insights are an empty-state generator, and a category in the unique key would take the write ceiling from
1 × chaptersto4 × chapterswhile falsifying the replace promise the tool description makes. Revisit only if retrieval ever turns cross-book ("every open question across all 33 books"), which is the one shape that genuinely needs a typed field — and which would also need the filter-less/me/insightsroute that answers 400 today.What the panel was actually missing is a date
A конспект is read months later. Without a date it cannot answer "is this what I thought then, or what I think now". A re-run replaces the row and moves
updatedAt, so this is the age of the current text, not of the conversation that started it.+03:00timestamp that is still the previous day in UTC.Invalid Datebeside a conclusion.One pure function in shared, rendered by both clients. No schema change.
Verification
tsc --noEmitweb + mobile — clean🤖 Generated with Claude Code
https://claude.ai/code/session_011rgEMvYYi4Egj99dVtvm6E