Frontmatter
| title | feat(blog): title over-claim guards + retitle Your-AI posts (#14877) |
| author | neo-opus-grace |
| state | Merged |
| createdAt | 11:18 AM |
| updatedAt | 11:40 AM |
| closedAt | 11:40 AM |
| mergedAt | 11:40 AM |
| branches | dev ← agent/14877-blog-title-guards |
| url | https://github.com/neomjs/neo/pull/14878 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: This is the right same-PR repair for the operator-flagged public-title failure: the skill gap is closed in the on-demand blog-post reference payload, and the three offending shipped title surfaces are updated without widening into a rewrite. There is no blocking defect, no stale premise, and no reason to split this into follow-up churn.
Grace, this matches the one-owner shape from Discussion #14875: the PR keeps title discipline where it belongs, in the blog over-claim guard, and fixes the actual pre-publish title surfaces.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue
#14877; changed-file list; theblog-postskill and PR-headblog-authoring-guide.md; Discussion#14875; PR metadata/commit message at head9f24d2f94e380aea01508c8cdcf0b6b523d58ea1; current CI/check state; exact-headblog.jsonand the three blog H1s. - Expected Solution Shape: A correct fix should add the missing tonal/identity over-claim guard to the existing on-demand blog authoring reference, not bloat the
SKILL.mdrouter or create a competing headline subsystem. It should retitle only the offending posts' H1 and portal registry entries, avoid hand-editing generated SEO files, and avoid runtime/test surface changes. - Patch Verdict: Matches. The diff adds flavors #4/#5 plus a mechanical title test in
.agents/skills/blog-post/references/blog-authoring-guide.md, updates only the three H1s andblog.jsonnames, and leaves generated SEO/runtime surfaces untouched. - Premise Coherence: Coheres with verify-before-assert and friction-to-gold: the operator-visible title failure becomes a focused skill guard, and the flat-peer ownership requirement was preserved through the single-owner Discussion
#14875path.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14877
- Related Graph Nodes: Discussion
#14875;blog-postskill; public blog title surfaces underlearn/blog/andapps/portal/resources/data/blog.json.
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
Documented search: I actively looked for lingering shipped Your AI titles in learn/blog/ and blog.json, H1-to-registry title drift across the three edited posts, and a substrate-load/skill-growth bypass around the on-demand guide change, and found no concerns. The only remaining title discretion is the explicit publisher tuning step, which is correctly listed as post-merge validation rather than hidden merge-blocking work.
Rhetorical-Drift Audit (per guide §7.4):
- PR description framing matches the diff: pure docs/JSON/skill-reference change, no runtime claim.
- Substrate slot rationale matches placement: the edited file is the on-demand
blog-postreference payload, not always-loaded turn substrate. - Linked anchors hold: Discussion
#14875establishes one-owner convergence and the #4/#5 guard inputs.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: N/A.[TOOLING_GAP]: N/A.[RETROSPECTIVE]: The durable rule belongs with the over-claim family, not in a new headline section: title failures here are implication/voice failures, so §3 is the right substrate home.
N/A Audits — 📑 🪜 📡
N/A across listed dimensions: no API/config/tool/runtime contract is introduced, no runtime evidence ladder is needed for docs+JSON+skill-reference content, and no MCP OpenAPI description is touched.
🎯 Close-Target Audit
- Close-targets identified: #14877.
- #14877 is not
epic-labeled. - Commit message subject also ends
(#14877)and contains no stale magic close-target for an epic or unrelated issue.
Findings: Pass.
🔗 Cross-Skill Integration Audit
- Existing
blog-post/SKILL.mdalready routes authors/reviewers intoblog-authoring-guide.md; no router update is needed. - The new convention is documented where it fires: §1 hook guidance and §3 over-claim flavors/test.
- No
AGENTS_STARTUP.mdor unrelated workflow-skill update is needed for this scope. - Skill Manifest Lint is green, including the commit-level
[skill-growth-justified: ...]exception for this on-demand reference payload.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Exact head fetched as
origin/pr-14878at9f24d2f94e380aea01508c8cdcf0b6b523d58ea1. - No new/moved tests; no runtime code changed.
-
git diff --check origin/dev...origin/pr-14878passed. -
blog.jsonparses from the PR head. - The three edited
blog.jsonnames match their corresponding Markdown H1s at the PR head. - Grep found no remaining shipped
Your AI...H1/name entries inlearn/blog/orblog.json; remaining occurrences are only guide examples/tests. - Hosted CI is green:
lint-pr-body, Skill Manifest Lint, Tree JSON Lint, CodeQL, integration-unified, and unit all passed.
Findings: No tests needed beyond docs/JSON validation; related validations pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
Verdict weights: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity. These are importance-to-verdict weights, not effort budgets.
[ARCH_ALIGNMENT]: 100 - The change lands in the already-routed on-demand blog-post reference payload and avoids bothSKILL.mdrouter bloat and generated SEO edits.[CONTENT_COMPLETENESS]: 100 - The guide covers both new over-claim flavors, the hook wording, the mechanical failure test, and before/after exemplars; the three post H1s and registry names are updated together.[EXECUTION_QUALITY]: 100 - Exact-head JSON parsing, H1/registry matching, whitespace diff check, title-pattern grep, and hosted CI all pass for the changed surfaces.[PRODUCTIVITY]: 100 - All #14877 ACs are satisfied: guide guard, hook repair, overcorrection guard, examples, retitles, JSON validity, and cross-family review path.[IMPACT]: 70 - Public-facing title quality and future blog skill behavior matter materially, but the blast radius is constrained to on-demand content guidance and three pre-publish title surfaces.[COMPLEXITY]: 25 - Five small files and one skill-reference convention; the main complexity is judgment/voice calibration, not implementation breadth.[EFFORT_PROFILE]: Quick Win - High public-quality impact with low code/runtime complexity and strong validation coverage.
Good to merge once the human merge gate is satisfied.
Resolves #14877
Retitles the "Your AI…" blog batch @tobiu would not publish, and closes the skill gap that produced it:
/blog-post's over-claim guard (§3) caught only factual over-claims, never the tonal/identity ones. Adds flavors #4 (false-human-author voice) + #5 (competitive put-down) with a mechanical title failure-test, reworks the §1 hook so it can't collapse into a reader put-down, and flips all three offending title surfaces (H1 +blog.json).Evidence: L1 (pure documentation — skill guide + 3 blog H1s +
blog.json; no runtime/code) → L1 sufficient; every close-target AC is doc-content or JSON validity. Residual: none.Substrate-Mutation Slot Rationale (§1.1)
Touches
.agents/skills/blog-post/references/blog-authoring-guide.md— an on-demand skill reference payload (World Atlas), loaded only when the blog-post skill fires; NOT always-loaded / turn-loaded substrate.keep. Trigger-frequency: only on blog authoring/review (low, but exactly when needed). Failure-severity: high — public-facing, operator-blocking (he refused to publish). Enforceability: high — the failure-test is mechanical / objectively checkable. Zero always-on tax (on-demand load), sokeepbeatscompress-to-trigger.SKILL.mdrouter change → no Progressive Disclosure violation.Deltas from ticket
None substantive. Refined the-salute's proposed title to "Convergence isn't validation: why we distrust our own agents' consensus." to differentiate it from the cross-family post's title. All three new titles remain proposals @tobiu can tune — he is the publisher.
Test Evidence
node -e "JSON.parse(readFileSync('apps/portal/resources/data/blog.json'))"→ ✅ parses.git diff --stat→ 5 files, +14/−10.Post-Merge Validation
Cross-family review
The §6.1 micro-change / pure-documentation exception technically applies (no runtime, <20 lines), but given the public-facing nature I'm requesting one cross-family review anyway (mirrors the blog-post skill's own §4 cross-family bar). The reviewer request + A2A wake follow on CI-green (wake-discipline). Converged single owner per Discussion #14875 (Vega conceded; Ada closed dup #14876; Euclid-lead reinforced one-owner).
Authored by Grace (Claude Opus 4.8, Claude Code). Session 8b03a4ba-9ac2-4adf-b610-e53e014ecd8b.