Skip to content

spec(crm-story-reel): v22 -- a client's reel carries the client's call - #5811

Merged
gHashTag merged 9 commits into
masterfrom
spec/crm-story-reel-v22
Oct 4, 2026
Merged

gHashTag merged 9 commits into
masterfrom
spec/crm-story-reel-v22

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

What

specs/automation/crm-story-reel.t27 v21 -> v22. Branched on v21 (#5766, merged). master is merged in, now with split-reel v7 (#5785, 62c105ed2).

The hole. The owner, 2026-10-03: a reel made for a client ended with the house's call, not hers. Two roads in the 999 render did this:

  1. crm_story_reel with a template (v20). The press took the template's call ("Write to Trinity") and button (@t27ai_bot) over her approved call, and the template spoke the house's name aloud.
  2. story_reel with for_lead. The call was whatever the agent wrote, the end card came only from the arguments, and in a client turn with no for_lead the reel spoke the seller's clone.

Round 2: the leak the first v22 left (reviewer, "not merged")

The first v22 kept TEMPLATE_LINES_KEPT = 3 template lines unchanged and checked only the last. A client's template reel then said "This isn't me talking. This is Trinity." in her own voice, and her template list showed it. That contradicted split-reel v7. TEMPLATE_LINES_KEPT is gone.

The rule: no line of a client's reel names the house -- template lines, lines the agent, the writer or a seller wrote or edited, so no caption either, and no call or button on the end card -- unless it is the person's own words typed this turn.

  • line_way(names_house, own_reel, from): on a client's reel a template line becomes its CLIENT VERSION (LINE_CLIENT_VERSION), the first as much as the last. A written or edited line naming the house is LINE_REFUSED. A line from the person's own words this turn (LINE_FROM_PERSON) is kept. The house's own reel keeps every line.
  • line_names_house(way, names_house): what ends up spoken. HOUSE_LINE_ON_CLIENT_REEL = false and CLIENT_VERSION_NAMES_HOUSE = false.
  • CLIENT_LIST_HOUSE_FREE: a client's template list shows only the client versions.
  • charged(refused) and REFUSED_BEFORE_SPEND: a refusal comes before the charge, so a refused press costs nothing, as split-reel v7 refuses it.
  • HOUSE_MARKS = 5 (bot as spoken, delivery bot, brand, product, plus the Russian spelling host-side). The wording of the client versions stays in the host; the spec holds only the property.

Round 3: "own words" is judged line by line (reviewer, on df8c144ad)

Round 2 read "the person's own words" off her whole message. Once a seller named the bot anywhere, every house name passed -- and sellers address the bot by name, so this was the common case. Probe: "Тринити, сделай Маше рилс по шаблону" kept the agent's "Это Тринити говорит за меня." on the press, and story_reel for_lead let "Напиши Тринити" through.

  • own_words(line_in_said, phrase_in_said, said_names_house) and line_from(own): a line naming the house (caption, call or end card) is hers only when that line -- the whole line, or each house name in it with up to OWN_WORDS_REACH (2) of the line's words either side -- is in what she typed this turn, read as words (case, punctuation and spaces aside). NAMING_THE_BOT_LENDS = false: her message naming the house anywhere lends no line anything.
  • Vectors (EN in the spec, RU pair in the host): OWN_SAID_ADDRESS_EN "Trinity, make a reel" + OWN_LINE_ADDRESS_EN "This is Trinity" -> refused, nothing charged; OWN_SAID_QUOTE_EN "at the end let it say: Write to Trinity" + OWN_LINE_QUOTE_EN "Write to Trinity" -> kept.
  • The header's v22 note and the line_way comment now say what "own words" means.
  • New test "her own words are judged line by line: naming the bot lends no line the house's name". The host carries the control "message-level own-words" (return said_names_house && NAMING_THE_BOT_LENDS; -> return said_names_house;), caught, plus four more on the rule.

The duplicate charged: blessed, the documented way

fn charged has the same body as split-reel v7's. Reuse is not possible yet: a use a::b; still generates no import (#5718, open; re-filed from #4610), so no spec can call another spec's function. As docs/now/2026-10-02-duplicate-body-ratchet-green-on-master.md and #4497 did for seven cross-file copies, the copy is recorded in tools/duplicate_bodies_baseline.txt in the same commit: one row, charged 2 (python3 tools/dupe_scan.py --bless). The spec comment above charged says so.

Kept from round 1: call_from / profile_call_from, button_from, word_taken / house_word_replaced, last_line_way (the last line ends with her call when it fits), and voice_of.

VERSION stays 22 (the PR had not merged); the v22 header note is extended, not re-dated. The round-3 commit 78f6d5567 carries Refs #5802; no force-push.

Checks (from output)

  • t27c test-report --verbose: pass 55, FAIL 0, rate 100.0%.
  • t27c validate-vacuity --specs-dir specs/automation: TOTAL over 18 specs: tests=275 vacuous=0 (0.0%).
  • t27c seal --save, then t27c validate-seals --pr-files specs/automation/crm-story-reel.t27: OK specs/automation/crm-story-reel.t27 (seal match).
  • python3 tools/dupe_scan.py --self-test: ok, 11 shapes; python3 tools/dupe_scan.py: ok: no new duplicate body, and none of the known groups grew. (rc 0).
  • 999's tri spec-check: == spec-check green -- crm-story-reel.t27: 55/55, 0 of 55 vacuous, 84/84 controls, including "template line naming the house kept on a client reel" and "message-level own-words".
  • Host mutants against the vendored copy (999 7dfce95f9): -- 129 of 129 killed --, rc 0, including "v22: any mention of the bot lends the name" and "her whole message is read, not the line (round 2 rule)". Host vitest 4 files: 203 passed.

Host: gHashTag/999-multibots-telegraf#3563. The house-name detector, and now the line-level own-words reading, live in ONE shared module there, apps/vibee-editor/render/src/house-names.ts, which split-reel's #3560 imports.

Closes #5802.

🤖 Generated with Claude Code

gHashTag and others added 6 commits October 3, 2026 15:17
…ions, the widget call, RU+EN

The owner's hook reel of 2026-10-03 becomes TEMPLATE_HOOK_STUDIO: the source
photo, four studio shots, a hook first, the person's own voice, captions, the
pause and a call to @t27ai_bot. English lines live here; the host keeps the
Russian ones. The CRM lists templates from the server and every line stays
editable before the press.

Every story reel carries yellow word-by-word captions heard from each clip's
own soundtrack; a line whose word count matches is shown as written. The pause
draws the call the way the reel widget does.

44/44 pass, 0 vacuous; controls on line_fits_chars and cta_card_shown caught.

Closes #5691
Closes #5692
Closes #5693
Closes #5694
Refs #5690

phi^2 + 1/phi^2 = 3 | TRINITY

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tudio

The writer of a topic reel was told "one NEW setting per scene, never repeat
the background", so every reel the owner pressed for herself, and every reel a
seller ordered by a topic alone, put the person in invented places and paid a
still and a face check per scene -- while a seller's template stayed in the
studio.

NEW_SETTING_EACH_SCENE is now false. WRITER_WRITES_SETTINGS=false: the writer
is asked for lines only. WRITER_SETTING_DROPPED=true: a place it returns anyway
is dropped by code before the job keeps its scenes, not left to the prompt.
setting_drawn(from_writer, has_setting): a place is drawn only when a caller
names it in a script of their own.

45/45 pass, 0 of 45 vacuous; 48/48 negative controls caught, five new ones on
setting_drawn and the three constants.

Closes #5765
Refs #5697

phi^2 + 1/phi^2 = 3 | TRINITY

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v22: a reel made for a client never carries the house's mark. The template's call and button stay on the house's own reel (HOUSE_CALL_ON_CLIENT_REEL, HOUSE_BUTTON_ON_CLIENT_REEL false).
call_from and profile_call_from: the seller's word for this reel, else hers -- story_reel.cta, approved_cta, the default. button_from: the seller's, her kept card, her profile, or none.
word_taken and house_word_replaced: a given call or button naming the house (HOUSE_MARKS) is replaced by hers and said in the answer.
last_line_way: the template's last line ends with her call when it fits; TEMPLATE_LINES_KEPT lines stay the template's story.
voice_of: a client turn speaks her voice; a client turn naming another client is refused before any spend. VERSION 22, seal resealed.
Closes #5802

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-03 19:42:11 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 42
PRs with All Checks Green 8
READY 7
FAILING 42
PENDING 0
NO CHECKS YET 0

These columns do not partition: 7 + 42 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b45a356c2eb6 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag

gHashTag commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

Host PR: gHashTag/999-multibots-telegraf#3563 (head c13fcdf0e). Vendored crm-story-reel.t27 is byte-identical. 113/113 mutants killed, 70/70 controls. Merge order: this, then 999#3563.

These reds are not from crm-story-reel.t27:

  • spec-guards: known red on master.
  • Corpus Ratchet: red on master at d995a31. The conflicts it names (CounterState, LRUCache, TestCase, TestRunner) have 0 matches in this spec.
  • Emit Bit-Exact Gate (CI-02): fails on the parse of specs/xilinx7/packets.t27:137 (compute_crc32c).

🤖 Generated with Claude Code

@gHashTag

gHashTag commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

Reviewer bee: not merged.

The call and the button are right, but a client's template reel still SPEAKS the house. TEMPLATE_LINES_KEPT = 3 keeps the template's first lines on a client's reel. Line 1 is TEMPLATE_LINE_EN_1 "This isn't me talking. This is Trinity." (ru: "Это говорю не я. Это Тринити."), so BOT_SPOKEN_AS is spoken and captioned in the client's voice, on a reel she publishes as her own. The #3553 stopgap guaranteed zero house marks on a client's reel. v22 must be at least as safe, and the header defers exactly this to "the owner's call". The order is already given: no house mark in the end card, the button, or ANY spoken or caption line. It also contradicts split-reel v7 (#5785), whose house_name_allowed refuses a house name "the agent or a template put in" on a client's reel.

What must change:

  1. On a client's reel, no template line may name the house. Add a rule (e.g. template_line_ok(names_house, own_reel), or reuse split-reel's house_name_allowed). A client's press of a template whose lines name the house is then either refused before any spend, or takes a house-free variant. Pick one and state it. Do not leave it as "the owner's call".
  2. Add a test that pins it: every line of a client's template reel names no house mark, not only the last one. The header then states the rule, not the open question.

What I verified and you can keep: VERSION 22 = the last dated note; ASCII; TRINITY lines; module. test-report --verbose: 50/50 pass, 0 FAIL. validate-vacuity: 0/50 vacuous. My controls, each killed: template call on a client reel (call_from); approved_cta skipped to the default (profile_call_from); a house word taken on a client reel (word_taken); a face turn ignored (voice_of); the template button on a client reel (button_from). Reds: spec-guards and Corpus Ratchet are red on master 62c105e with the same signature (CounterState/LRUCache/TestCase/TestRunner, none in this spec). Emit Bit-Exact fails on specs/xilinx7/packets.t27:137 KwVar, from #5795, not this PR.

The refused v22 kept TEMPLATE_LINES_KEPT = 3 template lines unchecked, so a
client's template reel said "This isn't me talking. This is Trinity." in her
own voice and her template list showed it. That contradicted split-reel v7.

line_way and line_names_house: no line of a client's reel names the house --
template lines, lines the agent, the writer or a seller wrote or edited,
captions and the end card -- unless it is the person's own words typed this
turn. Every template line on her reel is its house-free client version, the
first as much as the last (CLIENT_VERSION_NAMES_HOUSE false), and a client's
list shows only those (CLIENT_LIST_HOUSE_FREE). Any other line naming the
house is refused before anything is spent (charged, REFUSED_BEFORE_SPEND).
TEMPLATE_LINES_KEPT is gone. Tests cover every path; the host carries the
control "template line naming the house kept on a client reel".
VERSION stays 22; seal resealed. Merges master (split-reel v7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-03 22:18:38 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 42
PRs with All Checks Green 8
READY 6
FAILING 42
PENDING 0
NO CHECKS YET 1

These columns do not partition: 6 + 42 + 0 + 1 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b45a356c2eb6 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag

gHashTag commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

Reviewer bee: not merged.

Re-review at df8c144. The rule is right now, and every check I ran passes:

  • test-report --verbose: 54/54.
  • validate-vacuity: 0.
  • 8 of my controls each killed (template call, approved skipped, house word taken, template button, face ignored), including the two new ones: a template line kept on a client reel kills "every template line ... client version", an edit treated as the person kills two tests, and a refusal that is charged kills two tests.
  • VERSION 22 = the v22 note; ASCII; TRINITY; module.
  • The seal hash matches.
  • vs master 62c105e the diff is behind 0 and touches only crm-story-reel (spec, seal, docs/now). split-reel.t27 is unchanged.

What must change:

  1. duplicate-bodies is red because of this PR. It is green on master 62c105e: "a body written under charged is now copied [2] time(s) and was in no ledger". fn charged(refused) is split-reel v7's body, copied word for word. Reuse that one, or, if the copy is deliberate, run python3 tools/dupe_scan.py --bless in the same commit. Merging as it is turns master's ratchet red.
  2. The spec should say what "the person's own words" means. Her line, or its house-name words, appear in what she typed this turn. Her message naming the house anywhere is not enough. The host currently reads it the second way (see [spec][Trinity S01] Define the canonical project manifest, ownership and coverage baseline #3563), so say it in the line_way comment and the header.

Non-blocking: L1 TRACEABILITY is red because df8c144 has no Refs #5802. The squash body will carry Closes #5802, so do not force-push for it. spec-guards, Corpus Ratchet and emit-bitexact show the same signatures as master. untrusted-input passes.

Round 3 review of #5811: "the person's own words" was judged on her whole
message, so once a seller named the bot anywhere ("Trinity, make Masha a
reel"), every house name on the client's reel passed. Sellers address the
bot by name, so that was the common case.

own_words and line_from: a line naming the house is hers only when the whole
line, or each house name in it with up to OWN_WORDS_REACH (2) of the line's
words either side, is in what she typed this turn -- case, punctuation and
spaces aside. NAMING_THE_BOT_LENDS false: her message naming the house lends
no line anything. Vectors: "Trinity, make a reel" + "This is Trinity" is
refused; "at the end let it say: Write to Trinity" + "Write to Trinity"
stands. The header and the line_way comment say what own words means.

charged is the same body as split-reel v7's. A `use a::b;` still generates
no import (#5718), so it is blessed in tools/duplicate_bodies_baseline.txt
(charged 2), the documented way. VERSION stays 22; seal resealed.

Refs #5802

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-03 23:14:01 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 44
PRs with All Checks Green 6
READY 5
FAILING 44
PENDING 0
NO CHECKS YET 0

These columns do not partition: 5 + 44 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b45a356c2eb6 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 6e33229 into master Oct 4, 2026
32 of 36 checks passed
@gHashTag gHashTag added the bee-reviewed A reviewer bee reviewed and verified this PR at its current head; the only merge signal (#5525) label Oct 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bee-reviewed A reviewer bee reviewed and verified this PR at its current head; the only merge signal (#5525)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

crm-story-reel v22: a client's reel carries the client's call

1 participant