LearnNewsExamplesServices
Frontmatter
id15699
titleDefine profile-owned blog cover requirements and acceptance receipts
stateOpen
labels
enhancementdiscussionBlog Postdesignaiarchitecture
assignees[]
createdAtJul 22, 2026, 1:03 PM
updatedAtJul 24, 2026, 12:40 PM
githubUrlhttps://github.com/neomjs/neo/issues/15699
authorneo-gpt-emmy
commentsCount0
parentIssue13383
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[ ] 15701 Measure the first three profiled publication packages

Define profile-owned blog cover requirements and acceptance receipts

Open Backlog/active-chunk-8 enhancementdiscussionBlog Postdesignaiarchitecture
neo-gpt-emmy
neo-gpt-emmy commented on Jul 22, 2026, 1:03 PM

[GRADUATED_TO_TICKET: #15795]

Graduation status: D#15673 passed exact-anchor family quorum and graduated to #15795.

Parent: Epic #13383 remains the native owner.

Authority: the graduation refresh below is implementation authority. Reservation-era sections are retained only as falsifiable provenance.

Lane state: unassigned and unclaimed.

Graduation Refresh — authoritative

Selected disposition

The reservation's universal-default premise did not survive convergence. /blog-post owns named publishing profiles: hero/campaign work may require a distinct cover; standard posts remain thesis-driven opt-in. /imagegen owns raster-generation/editing mechanics. A missing cover is an error only when the selected profile requires one.

This remains a one-PR leaf under #13383 and is independent of #15795's implementation order.

Final Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
Cover eligibility D#15673 OQ21 + /blog-post Profile explicitly says required, optional, or refused Standard posts remain opt-in; unresolved profile blocks publication promotion, not drafting /blog-post workflow/reference Representative profile fixtures
Cover brief and accepted artifact /blog-post + /imagegen boundary Record thesis/claim refs, aspect/safe-area variants, alt text, provenance, immutable source/final hashes, and visual acceptance A manually produced asset is valid when it satisfies the same receipt Conditional /blog-post payload Bundle fixture + human visual receipt
Raster mechanics /imagegen /blog-post supplies the brief and consumes the accepted bundle without copying generation mechanics No generated asset when the profile permits refusal Cross-skill pointer Two production routes yielding the same receipt
Portal/media registration Live portal consumer Add only metadata a named renderer/embed consumer requires Keep metadata in article content/front matter when registry expansion is unearned Portal registration docs Rendered consumer + broken-link check

Decision Record impact

Aligned with #15795 and D#15673; no ADR is amended.

Decision Record

Not needed for a profile/receipt workflow. A canonical media schema or new portal-wide contract flips this to Required.

Discussion Criteria Mapping

  • D#15673 Option H / OQ21 → profile-owned cover eligibility, medium-owned SSOT, and shared claim/evidence references.
  • D#15673 OQ9/OQ16/OQ18 → immutable accepted-artifact identity, lineage, and publication binding.
  • STEP_BACK promotion acknowledgment → this marker/body refresh and preserved #13383 parent.

Final Acceptance Criteria

  • Define objective /blog-post profile inputs for required, optional, and refused covers; standard posts remain opt-in.
  • Add a reusable cover brief/receipt with thesis and claim refs, safe-area variants, alt text, provenance/disclosure, immutable source/final hashes, and human visual acceptance.
  • Route raster mechanics to /imagegen; duplicate no provider/model/tool parameters.
  • Preserve an explicit no-cover/refusal path when the selected profile permits it.
  • Add portal/registry fields only for a verified live consumer, with a rendered proof and broken-link fallback.
  • Verify representative hero, campaign, and standard profile fixtures plus the bounded review path.
  • Invoke /create-skill and /turn-memory-pre-flight in the PR if .agents/skills/** changes; carry this Contract Ledger into the PR.
  • Re-audit after the first three profiled packages; narrow or retire the default path if cover effort/correction cycles materially harm cadence or produce generic filler.

Final Signal Ledger

Family Peer Signal Exact binding
GPT Emmy (author) AUTHOR_SIGNAL frozen D#15673 body at 2026-07-24T10:15:56Z + STEP_BACK
Fable / Claude family Clio (non-author) GRADUATION_APPROVED same frozen body + STEP_BACK + author signal

Unresolved Dissent

None. The exact-anchor STEP_BACK reported zero blockers.

Unresolved Liveness

The returning Kimi seats retain a non-gating ratification courtesy because Iris and Phoebe materially shaped the source Discussion. Revalidate this ticket if #15795 expands into executable code/schema, the selected blog ownership seam changes, or new evidence invalidates an accepted invariant.

Context

The operator asked that the blog + video + cover recommendations become durable substrate now rather than remain chat memory. Fold 4 introduced the publishing-package option; Phoebe's non-author challenge retained a default cover only if a reusable brief/template and fast review path keep its cost bounded.

Live repository evidence on 2026-07-22:

  • learn/blog contains 15 posts; only 5 contain raster-image markup.
  • The current blog-post router promises narrative, sourcing, over-claim, registration, and review gates, but no cover contract.
  • The authoring guide registers the post in blog.json and does not define cover production or acceptance.
  • blog.json has no media fields.
  • Closed issues #5987 and #6012 are historical cover/visual precedents, not live ownership.

The Problem

“Every post gets a cover” is easy to state and costly to sustain. Without an explicit production and review boundary, it decays into one of two failures: bespoke artwork throttles the publishing cadence, or low-effort filler weakens the hero-piece quality bar. The current blog workflow cannot distinguish a missing required cover from a deliberate no-cover post, and it has no receipt proving safe-area, alt-text, source/provenance, or visual acceptance.

The Architectural Reality

  • /blog-post owns article eligibility, authoring, registration, and public-review gates.
  • /imagegen owns raster-generation/editing mechanics; this issue must specify the brief and accepted artifact, not duplicate provider/tool parameters.
  • blog.json is a navigation registry today, while BlogNeo.mjs models only the existing navigation fields. Graduation must decide whether cover metadata belongs there, in post front matter, or in a separate bounded manifest.
  • #13383 owns the sustained blog stream and is the correct parent.
  • No new .mjs placement is prescribed before graduation. Any graduated executable/schema proposal must run structural pre-flight first.

Reservation-Era Recommendation (superseded)

Adopt a default cover with a bounded path: every publishable post receives a distinct cover unless its selected profile explicitly opts out; the default path uses a reusable brief/template, safe-area variants, accessible alt text, immutable source/final references, and a fast human visual-acceptance receipt. If that path cannot stay cheap across the first measured packages, revert the universal default to profile-triggered covers.

Divergence Matrix

Option When it is right Source / evidence Falsifier
Recommended — bounded default cover A reusable brief/template plus fast acceptance makes consistency cheaper than repeated bespoke decisions D#15673 Fold 4 + Phoebe's Fold 5 challenge; 5/15 current posts contain raster markup Median cover effort or correction cycles materially delay the first three profiled packages, or templates produce misleading/generic art
Universal bespoke cover Every article needs a unique art-directed campaign asset and quality is worth the production cost Build Week poster/thumbnail work proves bespoke assets can be valuable Cadence or review capacity collapses; accepted visuals repeatedly require project-specific surgery
Thesis-driven opt-in only Visuals help only when the article's thesis has a genuine visual anchor The current corpus already ships many text-led posts Repeated missing/late social-preview assets or inconsistent public presentation create rework that the default path would have prevented

Reservation-Era Fix Sketch (superseded)

  1. Define the post profiles for which a cover is default, optional, or refused.
  2. Add a reusable cover brief with thesis, claim references, aspect/safe-area variants, alt text, disclosure/provenance, source hash, and immutable accepted-artifact identity.
  3. Route raster mechanics to /imagegen while keeping eligibility and acceptance in /blog-post.
  4. Select the metadata owner only after comparing post front matter, blog.json, and a package manifest.
  5. Define the bounded visual-review receipt and the decay trigger measured by the longitudinal sibling ticket.

Reservation-Era Contract Ledger (superseded)

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
Blog cover eligibility Graduated D#15673 + /blog-post Default/optional/refused is explicit per selected post profile No implicit universal rule; unresolved profile blocks promotion blog authoring guide Profile fixture + review receipt
Cover brief / accepted artifact Graduated D#15673 Carries thesis/claim refs, dimensions/safe areas, alt text, provenance, hashes, and acceptance Missing/invalid fields fail the cover gate without invalidating the article draft Conditional /blog-post reference Schema/fixture plus visual review
Raster production handoff /imagegen ownership boundary in D#15673 /blog-post supplies the brief and consumes the accepted bundle; no duplicated image-generation mechanics Manual accepted asset remains possible if it satisfies the same receipt Cross-skill link Two production routes yielding the same receipt
Portal/media registration Existing blog.json and BlogNeo surfaces; final owner pending graduation Store only the minimum media identity needed by consumers Keep metadata out of navigation registry if no live consumer earns it Portal registration docs Consumer test + rendered portal proof

Reservation-Era Decision Record Impact (superseded)

depends-on D#15673. No ADR is amended by this reservation.

Reservation-Era Decision Record (superseded)

PENDING D#15673. Graduation must classify this as Not needed, Optional, or Required.

Reservation-Era Exit Criteria (superseded)

Final implementation ACs are intentionally deferred. This reservation closes its current phase only when:

  • D#15673 graduates with the cover ownership/profile boundary resolved.
  • This body is refreshed against the exact graduated body version and signals.
  • Final Contract Ledger rows, tests/evidence, and one-PR decomposition replace the provisional sections.
  • /create-skill and /turn-memory-pre-flight are named as PR gates if /blog-post substrate changes.

Graduation Refresh Receipt

Completed by the authoritative graduation section above; the reservation-era text below remains provenance only.

Out of Scope

  • Generating covers for the existing backlog.
  • Implementing /video-create.
  • Social-channel distribution strategy.
  • Pinning a provider, model, prompt, or one universal pixel size before graduation.

Avoided Traps

  • Universal-by-guilt: “cover always” without an explicit opt-out and cost falsifier.
  • Wrong owner: teaching /blog-post image-generation mechanics.
  • Metadata expansion without a consumer: adding fields to blog.json merely because they are convenient.
  • Ticket graveyard: treating a cover ticket as traction without connecting it to #13383 and the measurement sibling.

Related

D#15673 · #13383 · #13689 · #5987 · #6012

Origin Session ID: cb60301d-74a4-4024-b80d-2f7efdbf9cd1

Retrieval Hint: "D#15673 publishing package bounded default cover Fold 4 Fold 5"; Memory Core memory c8ec72a9-a8e2-4989-ac93-76e3cd9faa96.

Authored by Emmy (GPT-5.6 Sol Ultra, Codex).