feat(linkedin-studio): N15 — do-next-kontrakt (recordDoNext + skrivere/lesere + forrige-utgave-kalibrering) [skip-docs]
Måling som ikke endrer neste utgave er teater: report/analyze/ab-test/48h-monitor endte alle i chat (grep do.next = 0 i hele repoet). N15 gjør kanalen til en kontrakt. - recordDoNext i hooks/scripts/state-updater.mjs (TDD, 17 nye tester): seksjonen Do-Next Directives, rader "[dato] (kilde) direktiv — evidence: peker". Levetid = erstatt-per-kilde + 60-dagers aldersgulv, maks 3 per skriv, additiv scalar last_donext_date, $-sikre replacement-funksjoner. CLI: --record-do-next. - Skrivere: report Step 7b, analyze Step 6b, ab-test 2c.6 (kun Adopt), post-feedback-monitor (kun 48h-sjekken); analytics-interpreter emitterer nå anbefalinger på do-next-form (imperativ + evidens). - Lesere: post/quick/batch/create Step 0 + newsletter Step 1, som i tillegg kalibrerer på forrige utgaves MÅLTE tall via queue-id-match (queue.json → analytics/posts) med eksplisitt honest-miss — aldri estimert. - Guards: test-runner Section 16v (15 ubetingede sjekker, floor 198 → 213), $-safety-batteriet dekker recordDoNext (coverage-gate fanget den nye eksporten). Suiter: test-runner 232/0, hooks 191/0, trends 300/0, brain 134/0, editions 72/0, specifics-bank 45/0, contract-gate 33/0, tests 35/0, render 60/0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QxvWAjte7vPcF79QeSRvRJ
This commit is contained in:
parent
f0532dce3f
commit
b45fdad911
16 changed files with 713 additions and 6 deletions
|
|
@ -209,6 +209,45 @@ const BATTERY = [
|
|||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
fn: "recordDoNext",
|
||||
cases: [
|
||||
{
|
||||
path: "section CREATE, free-text directive/evidence",
|
||||
run: () => mod.recordDoNext(SAMPLE, {
|
||||
recordDate: "2026-05-30", source: "report",
|
||||
directives: [{ directive: PAYLOAD, evidence: PAYLOAD }],
|
||||
}),
|
||||
expect: [`(report) ${PAYLOAD} — evidence: ${PAYLOAD}`],
|
||||
once: [/^## Do-Next Directives$/gm],
|
||||
},
|
||||
{
|
||||
path: "section REWRITE (supersede/prune path) — the kept + new rows are re-emitted",
|
||||
run: () => {
|
||||
// Two writes: the second rebuilds the section body, so a `$`-bearing row
|
||||
// written by ANOTHER source has to survive being re-emitted verbatim.
|
||||
const first = mod.recordDoNext(SAMPLE, {
|
||||
recordDate: "2026-05-28", source: "ab-test",
|
||||
directives: [{ directive: PAYLOAD, evidence: PAYLOAD }],
|
||||
today: new Date("2026-06-10T00:00:00Z"),
|
||||
});
|
||||
return mod.recordDoNext(first.content, {
|
||||
recordDate: "2026-05-30", source: "report",
|
||||
directives: [{ directive: PAYLOAD, evidence: PAYLOAD }],
|
||||
today: new Date("2026-06-10T00:00:00Z"),
|
||||
});
|
||||
},
|
||||
expect: [`(ab-test) ${PAYLOAD} — evidence: ${PAYLOAD}`, `(report) ${PAYLOAD} — evidence: ${PAYLOAD}`],
|
||||
once: [/^## Do-Next Directives$/gm],
|
||||
},
|
||||
{
|
||||
path: "date additive-insert via last_post_date anchor — recordDate fuzzed",
|
||||
run: () => mod.recordDoNext(SAMPLE, { recordDate: PAYLOAD, source: "report", directives: ["d"] }),
|
||||
expect: [`last_donext_date: "${PAYLOAD}"`],
|
||||
once: [/^last_donext_date:/gm],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// --- Backstop 1: coverage completeness -------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue