feat(linkedin-studio): N24 — promo-post-motor (hook-forge + shareability-gate) [skip-docs]
Step 9 (post-lock distribution gate) får to tillegg, begge scoped til utgave-promo: 1. Hook-forge (E#7): 5-8 krok-varianter for delingsteksten. 110-140-båndet håndheves PER VARIANT og MÅLES (perl -CSD; awk length/wc -c teller bytes og lyver på æ/ø/å). Utenfor båndet = diskvalifisert, ikke rangert lavere. Settet må spenne minst tre krok-typer, ellers er det omskrivinger, ikke valg. Hver variant må spores til en påstand kroppen faktisk gjør (ingen bait). Ingen predicted-engagement score — et tall som påstår å vite hva som sprer seg er oppfunnet (N22-defektklassen); operatøren rangerer. Valgt variant går GJENNOM randsone-gaten, aldri utenom. 2. Shareability-gate (E#8): konverter-modus får en ANDRE binær — deling. «Hvem deler dette til en kollega, og hvorfor?» + RESHARE/SAVE/SEND. Svaret må navngi en rolle og et avsender-motiv; «nyttig for alle i tech» er NEI. Blokkerende: to mislykkede omramminger => operatørvalg (pivot eller registrert foldIn), aldri en stille passering. Ti suiter grønne: test-runner 300/0 (287->300, +13 ubetingede; floor 268->281) · trends 300 · analytics 202 · hooks 191 · brain 134 · editions 72 · render 63 · specifics-bank 45 · tests 35 · contract-gate 33. Begge nye compound-predikater mutasjonstestet mot faktisk fil (fjernet literal => rød). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvtDSvQDUmjd5bXdAxUu6D
This commit is contained in:
parent
af80150019
commit
77426135a5
7 changed files with 337 additions and 56 deletions
|
|
@ -3079,6 +3079,170 @@ fi
|
|||
|
||||
echo ""
|
||||
|
||||
# --- Section 16z: Promo-Post Engine - hook-forge + shareability gate (N24 / E#7, E#8) ---
|
||||
echo "--- Promo-Post Engine: hook-forge + shareability gate (N24) ---"
|
||||
|
||||
# The edition's promo post is the acknowledgement engine: a peer forwarding it to a peer is the
|
||||
# signal the edition was written to earn. Two things were missing at Step 9 and both fail QUIETLY:
|
||||
# (E#7 forge) the shipped krok was the one the draft happened to end on - it never competed
|
||||
# against an alternative. The forge produces five to eight variants, enforces the
|
||||
# mobile cutoff PER VARIANT (measured, not estimated), spans at least three hook
|
||||
# types so the choice is real, and traces every variant to the locked body so a
|
||||
# variant cannot promise what the edition does not deliver.
|
||||
# (E#7 honesty) the forge carries ONLY checkable marks - measured length, hook type, body-trace.
|
||||
# A predicted-engagement score would be an invented composite, which is the exact
|
||||
# defect class N22 removed (fabricated percentiles / Velocity Score). This check is
|
||||
# the one most likely to erode, because a ranked list LOOKS more helpful.
|
||||
# (E#8 deling) a click is one reader; a forward is the acknowledgement. The gate asks who
|
||||
# forwards this and why, demands a named role and a sender-motive, and CANNOT be
|
||||
# resolved by re-reading the same copy more generously (never a silent pass).
|
||||
# (invariant) the forged variant goes THROUGH the N9 randsone gate, never around it - a forge
|
||||
# that bypassed the fact/language pass would reopen the hole N9 closed.
|
||||
# Both predicates are compound, so both carry a non-vacuity self-test (mirrors 16p/16y). All
|
||||
# checks are UNCONDITIONAL .md greps -> they raise the deps-absent floor.
|
||||
NL_N24="commands/newsletter.md"
|
||||
PR_N24="agents/persona-reviewer.md"
|
||||
STEP9_N24=$(awk '/^## Step 9:/{f=1} /^## Step 10:/{f=0} f' "$NL_N24")
|
||||
|
||||
forge_honest() { # $1 = text; honest iff it forges a SET, cuts on the band, and refuses an invented score
|
||||
echo "$1" | grep -qiF "five to eight hook variants" \
|
||||
&& echo "$1" | grep -qiF "disqualified, not ranked lower" \
|
||||
&& echo "$1" | grep -qiF "no predicted-engagement score"
|
||||
}
|
||||
|
||||
deling_gated() { # $1 = text; gated iff it asks the named-forwarder question, names the actions, and cannot self-resolve
|
||||
# -qiF throughout: these are concepts in running prose, where sentence position decides the
|
||||
# casing (N23 lesson - do not bend the prose to fit the lint).
|
||||
echo "$1" | grep -qiF "who forwards this to a colleague, and why" \
|
||||
&& echo "$1" | grep -qiF "RESHARE / SAVE / SEND" \
|
||||
&& echo "$1" | grep -qiF "never a silent pass"
|
||||
}
|
||||
|
||||
FORGE_SELFTEST_N24=1
|
||||
if ! forge_honest "forge five to eight hook variants; a variant outside the band is disqualified, not ranked lower, and carries no predicted-engagement score"; then
|
||||
FORGE_SELFTEST_N24=0; echo " non-vacuity FAIL: a fully-wired hook-forge probe was not detected"
|
||||
fi
|
||||
while IFS= read -r probe; do
|
||||
[ -z "$probe" ] && continue
|
||||
if forge_honest "$probe"; then
|
||||
FORGE_SELFTEST_N24=0; echo " false-positive FAIL: under-wired forge probe accepted -> $probe"
|
||||
fi
|
||||
done <<'NEGATIVE16Z1'
|
||||
forge five to eight hook variants and rank them by predicted engagement, best first
|
||||
five to eight hook variants, each disqualified, not ranked lower when out of band, scored 1-10 for reach
|
||||
generate a few hook options and let the operator pick the strongest one
|
||||
variants outside the band are disqualified, not ranked lower, and carry no predicted-engagement score
|
||||
NEGATIVE16Z1
|
||||
if [ "$FORGE_SELFTEST_N24" -eq 1 ]; then
|
||||
pass "hook-forge self-test: predicate needs the variant SET + band-cutoff + no invented score (1 accepted, 4 under-wired rejected)"
|
||||
else
|
||||
fail "hook-forge self-test failed - the N24 forge lint is vacuous or over-eager"
|
||||
fi
|
||||
|
||||
DELING_SELFTEST_N24=1
|
||||
if ! deling_gated "the gate asks who forwards this to a colleague, and why, records RESHARE / SAVE / SEND, and allows never a silent pass"; then
|
||||
DELING_SELFTEST_N24=0; echo " non-vacuity FAIL: a fully-gated shareability probe was not detected"
|
||||
fi
|
||||
while IFS= read -r probe; do
|
||||
[ -z "$probe" ] && continue
|
||||
if deling_gated "$probe"; then
|
||||
DELING_SELFTEST_N24=0; echo " false-positive FAIL: under-gated deling probe accepted -> $probe"
|
||||
fi
|
||||
done <<'NEGATIVE16Z2'
|
||||
ask who forwards this to a colleague, and why, then record RESHARE / SAVE / SEND and move on
|
||||
judge whether the post is shareable and saveable; never a silent pass
|
||||
who forwards this to a colleague, and why - answer it, and never a silent pass
|
||||
NEGATIVE16Z2
|
||||
if [ "$DELING_SELFTEST_N24" -eq 1 ]; then
|
||||
pass "shareability-gate self-test: predicate needs the named-forwarder question + the three actions + no silent pass (1 accepted, 3 under-gated rejected)"
|
||||
else
|
||||
fail "shareability-gate self-test failed - the N24 deling lint is vacuous or over-eager"
|
||||
fi
|
||||
|
||||
# (E#7 forge) Step 9 forges a variant SET and cuts on the band instead of inventing a score
|
||||
if forge_honest "$STEP9_N24"; then
|
||||
pass "newsletter.md Step 9 forges five to eight variants, cuts out-of-band, and invents no score (E#7)"
|
||||
else
|
||||
fail "newsletter.md Step 9 has no honest hook-forge - the krok still ships unchallenged, or is ranked by an invented number (E#7)"
|
||||
fi
|
||||
|
||||
# (E#7 measurement) the band is MEASURED per variant, with the multibyte-safe counter
|
||||
if echo "$STEP9_N24" | grep -qF "perl -CSD" \
|
||||
&& echo "$STEP9_N24" | grep -qiF "enforced per variant, never on the set"; then
|
||||
pass "Step 9 measures the hook band per variant with the multibyte-safe counter (awk length lies on ae/oe/aa)"
|
||||
else
|
||||
fail "Step 9 does not measure the band per variant - byte-counting over-reports Norwegian hooks (E#7)"
|
||||
fi
|
||||
|
||||
# (E#7 real choice) the surviving set must span hook types, or the forge produced rewordings
|
||||
if echo "$STEP9_N24" | grep -qiF "at least three distinct hook types"; then
|
||||
pass "Step 9 requires the surviving variants to span at least three hook types (a real choice, not rewordings)"
|
||||
else
|
||||
fail "Step 9 does not require type-spanning variants - eight rewordings of one idea is not a choice (E#7)"
|
||||
fi
|
||||
|
||||
# (E#7 no bait) every variant traces to a claim the LOCKED body makes
|
||||
if echo "$STEP9_N24" | grep -qiF "a claim the locked body actually makes"; then
|
||||
pass "Step 9 disqualifies a variant that promises what the locked body does not deliver (no bait krok)"
|
||||
else
|
||||
fail "Step 9 lets a hook variant promise what the edition never delivers - bait reaches the feed (E#7)"
|
||||
fi
|
||||
|
||||
# (invariant) the chosen variant is gated, not exempted - it re-enters the N9 randsone pass
|
||||
if echo "$STEP9_N24" | grep -qiF "through the randsone gate, never around it"; then
|
||||
pass "Step 9 routes the chosen forge variant through the randsone gate (N9 hole stays closed)"
|
||||
else
|
||||
fail "Step 9 does not route forged variants through the randsone gate - a forged hook could reach the feed ungated (N9)"
|
||||
fi
|
||||
|
||||
# (E#8 deling) the shareability gate is present at Step 9, with the whole predicate
|
||||
if deling_gated "$STEP9_N24"; then
|
||||
pass "newsletter.md Step 9 runs the shareability gate: named forwarder + RESHARE/SAVE/SEND + no silent pass (E#8)"
|
||||
else
|
||||
fail "newsletter.md Step 9 missing the shareability gate - nobody asks who would forward the edition (E#8)"
|
||||
fi
|
||||
|
||||
# (E#8 escape hatch) a twice-failed reframe becomes an OPERATOR decision, never a lowered bar
|
||||
if echo "$STEP9_N24" | grep -qiF "body-level finding" \
|
||||
&& echo "$STEP9_N24" | grep -qF "/linkedin:pivot"; then
|
||||
pass "Step 9 routes an unshareable edition to an operator decision (pivot or recorded fold-in), not to a softer read"
|
||||
else
|
||||
fail "Step 9 has no honest exit for an unshareable edition - the gate would resolve itself by lowering the bar (E#8)"
|
||||
fi
|
||||
|
||||
# (E#8 persistence) both new results are persisted where the resumption protocol can see them
|
||||
if echo "$STEP9_N24" | grep -qF "articles.NN.hookForge" \
|
||||
&& echo "$STEP9_N24" | grep -qF "articles.NN.personaSweep.deling"; then
|
||||
pass "Step 9 persists the forge and the share verdict to edition-state (resumable, auditable)"
|
||||
else
|
||||
fail "Step 9 does not persist hookForge / personaSweep.deling - the gate leaves no trace (E#7/E#8)"
|
||||
fi
|
||||
|
||||
# (E#8 agent contract) konverter-modus carries the SECOND binary, with role + motive + action
|
||||
if grep -qiF "who forwards this to a colleague, and why" "$PR_N24" 2>/dev/null \
|
||||
&& grep -qiF "named forwarder role" "$PR_N24" 2>/dev/null \
|
||||
&& grep -qiF "RESHARE / SAVE / SEND" "$PR_N24" 2>/dev/null; then
|
||||
pass "persona-reviewer konverter-modus returns the deling binary with a named role and an action (E#8)"
|
||||
else
|
||||
fail "$PR_N24 konverter-modus has no share verdict - Step 9's gate has no judge (E#8)"
|
||||
fi
|
||||
|
||||
# (E#8 anti-flattery) a manufactured forwarder is the false green this gate exists to prevent
|
||||
if grep -qiF "A generic answer is not an answer" "$PR_N24" 2>/dev/null; then
|
||||
pass "persona-reviewer refuses a generic forwarder ('anyone in tech' names nobody)"
|
||||
else
|
||||
fail "$PR_N24 accepts a generic answer to who-forwards-this - the gate would pass on flattery (E#8)"
|
||||
fi
|
||||
|
||||
# (E#7 role separation) the jury judges the chosen krok; the forge stays the editor's pen
|
||||
if grep -qiF "the forge is the editor's pen" "$PR_N24" 2>/dev/null; then
|
||||
pass "persona-reviewer does not write or rank the forge variants (the jury judges, the editor writes)"
|
||||
else
|
||||
fail "$PR_N24 may rank or rewrite forge variants - that breaks the jury/editor separation (E#7)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# --- Section 18: Assertion-Count Anti-Erosion (SC6) ---
|
||||
# The lint self-modifies its own checks, so a green run could mask a silently dropped
|
||||
# assertion. Pin the total pass()+fail() invocations as a monotonic floor; the count
|
||||
|
|
@ -3159,12 +3323,21 @@ echo ""
|
|||
# wiring grep + always-present/refusal-included grep + report leads-with-baseline/no-eyeball
|
||||
# compound grep + normal-variation-not-trend grep + report refusal-honest compound grep +
|
||||
# WoW-loses-to-baseline grep + analyze verify-before-diagnose grep + analyze never-upgrade-
|
||||
# refusal grep) = 251.
|
||||
# refusal grep) = 251; +17 for N23's seventeen UNCONDITIONAL Section-16y checks (regeneration-gate
|
||||
# self-test + template four-section grep + template distillate/defers grep + setup Step-3g grep +
|
||||
# setup menu-reachability grep + setup delegation grep + brain-block one-file count + advisor
|
||||
# distillation grep + advisor declared-over-inferred grep + two per-surface gate greps + five
|
||||
# consumption greps + absent-brief graceful grep) = 268; +13 for N24's thirteen UNCONDITIONAL
|
||||
# Section-16z checks (hook-forge self-test + shareability-gate self-test + Step-9 forge_honest
|
||||
# compound grep + Step-9 per-variant measurement grep + Step-9 type-span grep + Step-9 body-trace
|
||||
# grep + Step-9 randsone-routing grep + Step-9 deling_gated compound grep + Step-9 operator-exit
|
||||
# grep + Step-9 persistence grep + persona-reviewer deling-binary compound grep + persona-reviewer
|
||||
# generic-answer refusal grep + persona-reviewer forge/editor separation grep) = 281.
|
||||
# NB: the floor tracks the deps-absent MINIMUM (conditional TS suites warn-skip and drop
|
||||
# the count), so it is bumped only by UNCONDITIONAL new checks — NOT pinned to the
|
||||
# deps-present TOTAL_CHECKS (that would zero the warn-skip margin and false-fail a fresh
|
||||
# clone). Runs last so TOTAL_CHECKS sees every prior check.
|
||||
ASSERT_BASELINE_FLOOR=268
|
||||
ASSERT_BASELINE_FLOOR=281
|
||||
TOTAL_CHECKS=$((PASS + FAIL))
|
||||
if [ "$TOTAL_CHECKS" -ge "$ASSERT_BASELINE_FLOOR" ]; then
|
||||
pass "assertion-count anti-erosion: $TOTAL_CHECKS checks >= baseline floor $ASSERT_BASELINE_FLOOR"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue