Repository navigation
Claude/fiction analysis tool vb1p h - #60
Merged
Merged
Conversation
The homepage never loaded Firebase auth until someone clicked "Sign in", so a returning author always saw the signed-out nav, and the sign-in dialog opened even though their session was intact. The session itself was never lost. - The workspace leaves a small hint (ml_signed_in) on sign-in and clears it on sign-out. When the hint is present the homepage loads auth immediately, keeps the Sign in / Get started buttons out of sight until Firebase answers, and shows "Open workspace". Firebase alone decides whether a session exists; the hint only decides whether to ask before a click. - Sign in, Get started, and the demo banner's "Create a free account" link now wait for the restored session (up to 5s) and open the workspace instead of a dialog for someone already signed in. - The pricing page waits for the restored session instead of reading currentUser before the SDK has loaded it. - Smoke test: after using the workspace, the homepage shows "Open workspace", hides Sign in, and index.html#signup opens the workspace. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VWzYm8L13Mra3ihjhuCM2U
Next to "Open workspace" the homepage now offers "Sign out". It ends the Firebase session, drops the sign-in hint and this tab's session cache, and the auth listener restores the signed-out nav. Drafts in local storage are left to the workspace's own recovery flow. The in-memory Firebase double now notifies auth listeners on signOut, as the real SDK does; the smoke test signs out from the nav and checks the buttons and hint. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VWzYm8L13Mra3ihjhuCM2U
…, unscored style
False findings removed
- Passive voice no longer matches any word ending in "-en" ("was then", "was open",
"were seven"); irregular participles are listed by word, and "gone"/"fallen" are out
because they are intransitive. Non-participle "-ed" words ("red", "naked", "indeed")
join the exceptions.
- Grammar: "as if she were" and other subjunctives are not agreement errors; a lowercase
word after "!" inside speech is cadence, not a capitalisation error; "gave her her own
way" is a double object, not a doubled word.
- The missing-comma dialogue-tag rule matched straight quotes only and treated a comma
before the closing quote as missing, so every correctly punctuated tag typed with
straight quotes was flagged and no smart-quoted one ever was. It now accepts the
comma and reads both quote styles.
- Repetition drops its fixed synonym table ("said" → "stated, remarked"); the finding
names the echo and leaves the word to the author, with no auto-fix. Function words
and the invisible tags said/asked are no longer echoes.
Scores that punished ordinary prose
- Transitions judges prose-to-prose paragraph boundaries only. Boundaries into or out
of a spoken line or a chapter heading are counted and shown, never scored; fewer
than three measurable boundaries is "not measured", not 0. The Secret Garden sample
moves from 26 to 67 with 406 dialogue boundaries set aside.
- Line editing no longer scores sentence-to-sentence word overlap (a published novel
ran 78% "unsupported" and sat at the maximum penalty) or pronoun-mix POV (a
first-person narrator describing anyone else read as mixed). Both stay as
descriptions.
- Copy Editing scores the set the workbench lists; grammar has its own dimension and
is not counted twice.
Style & Voice is described, not scored
- Its thresholds were never crossed by real prose, so every manuscript scored 100 and
the dimension only inflated the overall. Measurements stay; the card shows "—" and
the overall renormalises. The first-person regex is now case-insensitive and a
first-person narrator is called first person.
Dialogue
- A tag adverb must sit on a speech verb ("said Mary coldly"), so "not only" after a
quote is not one, and three-token tags are now caught. Fewer than ten lines is too
few to score a density.
UI: a null score renders as "not scored" or "—", never as 0; Transitions and Line
Editing detail rows say what was measured and what was set aside.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VWzYm8L13Mra3ihjhuCM2U
… tension words
The old fiction plot score was four booleans over a keyword lexicon ("conflict, danger,
fight…") in four equal quarters: possible values 0/33/67/100, a quiet literary novel
scored 0, and an excerpt was judged as a whole book. It is replaced by a structure
model built from how the manuscript is put together.
Units: chapters from headings, else scene breaks, else equal segments cut at paragraph
boundaries (sized to a book or a chapter). Each unit reports its word count and, from the
passage classifier, how much of it is scene (action and dialogue) against summary
(reflection, description, exposition), plus mean sentence length and the named cast
present.
Components, each with its basis in words:
- rhythm: scene share varies across units (full credit at a 25-point range)
- shape (full manuscripts only): the most scene-heavy unit sits in the back half and the
final unit comes down from it; a flat curve has no peak to place and says so instead
of being penalised twice
- unit length control: units within 0.3x to 3x the manuscript's own median
- cast persistence: named characters recur across units; the lead is present in most
The score is the mean of the components that could be assessed; everything that could
not be is listed under "Not assessed" with the reason. The methodology states what is
not measured: stakes, causality and what a character wants. Characters are analysed
once and shared with the structure model.
UI: the left rail shows scene share across the last two units, the card shows the scene
share by unit and the peak, the Detailed tab shows units, peak, release, range, length
control, cast and what was not assessed, and the next-step text is built from the
components. Book intelligence evidence follows the new fields.
Tests: ordering late peak > early peak > flat, segment and scene-break fallbacks, the
too-short case, per-unit provenance, the pipeline wiring, and the no-classifier case.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VWzYm8L13Mra3ihjhuCM2U
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
No description provided.