Repository navigation
blog: one cover series for every post (field-log posters, og + hero + thumbnail) - #1918
Merged
Merged
Conversation
This was referenced Oct 20, 2026
Merged
Closed
The covers were night-black posters; the /blog/ index is served in the day theme and they read as a different site. Restyle the series to the brand book: day paper (#f6f4ee) on a 1px square grid, ink (#0B0B0D) art and type, Big Shoulders Display 900 titles, ochre (#A06800) subtitles, and brand yellow (#FFC400) only as a fill on the one result each post is about. Flat: no halftone wash, grain, displacement or shadow. - motifs draw squares on a grid (dot = filled cell, ring = empty cell) - yellow trimmed to the earned result per post (the 28% cut, the vote's extra correct answers, the $0 local bill, the mask bug, the launch four, the 36 PoCs, the three passing gates, the lz4 route) - og PNG gets a 1px #d6d4cb frame so it keeps its edge on white timelines - blog.css: paper mount for the hero and thumbnail, square corners (v=3) - alt / og:image:alt updated where the drawing changed Same sizes and file names, so the meta tags are unchanged apart from alt.
xerj-org
force-pushed
the
blog/cover-series
branch
from
October 20, 2026 06:03
ae27866 to
2394f5d
Compare
Owner review of the live blog: - covers: the in-post hero and the index thumbnail are now art only (no title, subtitle or labels; motifs.LABELS = False), the motif's real bounding box fitted and centred in the frame. The page already carries the title, so the cover no longer repeats the header. The og card keeps its title and labels, because a social feed shows it on its own. Same file names and sizes. - alt: hero/thumbnail alt describes the art only (covers.POSTS alt); og:image:alt names the title plus the art (new og_alt) - post pages: every /blog/ page is served in the day theme (data-theme="day"), five posts were still night. blog.css tightens the day tokens to WCAG AAA on paper (#f6f4ee): body ink 17.9:1, secondary 8.3:1, accent text #6b4500 7.7:1; brand ochre #A06800 kept for rules and borders. Body 19px / 1.7, 68ch measure, lede 21px. No gradients or shadows; night toggle unchanged. blog.css?v=4 - route motif counts the 251 Releases packs (re-counted 2026-10-20)
xerj-org
added a commit
that referenced
this pull request
Oct 20, 2026
…home page - corpus-hub-v2 hero and thumbnail re-rendered art only (same names/sizes); img alt describes the art, og:image:alt the og card (title + art) - the post is served in the day theme like every /blog/ page (blog.css v4, reading theme from #1918); its own typography block is dropped in favour of #1918's - home page "From the blog": the three newest posts (Corpus Hub v2, the exploit hub, eval scars) with their cover thumbnails, replacing the two September cards with no images; responsive 3/2/1 columns
Owner
Author
|
Revision 3 (5dfe79a), from the owner's review of the live blog:
All scripts/seo gates pass. Deployed to production ahead of CI together with #1915 and #1953 (Pages deployment 117ddaf8). AI disclosure: prepared by an AI agent (Xerj Merger / Grok Bot) acting for the maintainers. |
xerj-org
added a commit
that referenced
this pull request
Oct 20, 2026
* blog: field-log cover series for every post (og card, in-post hero, index thumbnail) * sitemap: lastmod for the blog pages touched by the covers * blog covers: keep the route motif's node and caption inside the hero box * blog covers: light print on the brand palette, square-matrix motifs The covers were night-black posters; the /blog/ index is served in the day theme and they read as a different site. Restyle the series to the brand book: day paper (#f6f4ee) on a 1px square grid, ink (#0B0B0D) art and type, Big Shoulders Display 900 titles, ochre (#A06800) subtitles, and brand yellow (#FFC400) only as a fill on the one result each post is about. Flat: no halftone wash, grain, displacement or shadow. - motifs draw squares on a grid (dot = filled cell, ring = empty cell) - yellow trimmed to the earned result per post (the 28% cut, the vote's extra correct answers, the $0 local bill, the mask bug, the launch four, the 36 PoCs, the three passing gates, the lz4 route) - og PNG gets a 1px #d6d4cb frame so it keeps its edge on white timelines - blog.css: paper mount for the hero and thumbnail, square corners (v=3) - alt / og:image:alt updated where the drawing changed Same sizes and file names, so the meta tags are unchanged apart from alt. * blog: art-only covers, light AAA post pages Owner review of the live blog: - covers: the in-post hero and the index thumbnail are now art only (no title, subtitle or labels; motifs.LABELS = False), the motif's real bounding box fitted and centred in the frame. The page already carries the title, so the cover no longer repeats the header. The og card keeps its title and labels, because a social feed shows it on its own. Same file names and sizes. - alt: hero/thumbnail alt describes the art only (covers.POSTS alt); og:image:alt names the title plus the art (new og_alt) - post pages: every /blog/ page is served in the day theme (data-theme="day"), five posts were still night. blog.css tightens the day tokens to WCAG AAA on paper (#f6f4ee): body ink 17.9:1, secondary 8.3:1, accent text #6b4500 7.7:1; brand ochre #A06800 kept for rules and borders. Body 19px / 1.7, 68ch measure, lede 21px. No gradients or shadows; night toggle unchanged. blog.css?v=4 - route motif counts the 251 Releases packs (re-counted 2026-10-20) * blog: Corpus Hub v2 Corpus Hub v2 and xerj ask: route a plain question to one signed corpus, pull only that pack and answer locally. Every timing measured on xerj v1.0.0-rc.97; every count read live, with its source in the post. - cover from the light field-log series (route motif: 251 Releases packs behind the 14 catalogue corpora, the lz4 route in yellow), og card, in-post hero and index thumbnail - facts re-read on 2026-10-20 before publishing: contributors (3,663), corpora (3,659), multi-corpus people (70), lines (3,861,407 over 3,653 cards) and the top-ten table unchanged; repo 10,671 stars / 637 forks / 60 contributor accounts; hub stars 3 (two profiles, one corpus); Releases packs 245 -> 251; catalogue still 14 (2026-10-18 02:13 UTC) - reading typography for post bodies in blog.css (size/measure only, colours stay with the theme tokens); no light-theme dependency - head, sitemap and blogposts pack records regenerated * blog + home: art-only v2 cover, light post page, newest posts on the home page - corpus-hub-v2 hero and thumbnail re-rendered art only (same names/sizes); img alt describes the art, og:image:alt the og card (title + art) - the post is served in the day theme like every /blog/ page (blog.css v4, reading theme from #1918); its own typography block is dropped in favour of #1918's - home page "From the blog": the three newest posts (Corpus Hub v2, the exploit hub, eval scars) with their cover thumbnails, replacing the two September cards with no images; responsive 3/2/1 columns * sitemap: lastmod for the home page
Owner
Author
|
Xerj Merger made the fix: merged on owner's instruction ahead of the CI backlog; this content was already live (deploy 117ddaf8). |
2 of 5 tasks
cursor Bot
pushed a commit
that referenced
this pull request
Oct 20, 2026
Port the measured answer pages from #1928 (cef6b23) onto the article-shell branch. The sixth page, extract structured data from a web page into a JSON schema, is not included: that feature is still planned (#1797). Its capture stays in benchmarks/agent-intents-2026-10-19/02-* and is named as unpublished in that README and in llms-full.txt. OG cards are re-rendered in the light blog-cover palette from #1918 (paper #f6f4ee, ink, ochre subtitles, yellow as a fill only, no grain and no shadow). The dark cards from the stacked branch are not used. No page sets structured_data, so these pages do not emit FAQPage or HowTo. Existing articles gain links to the five new pages. The two links that pointed only at the held page are not added.
xerj-org
added a commit
that referenced
this pull request
Oct 20, 2026
* answers: five agent-intent pages, light field-log covers Port the measured answer pages from #1928 (cef6b23) onto the article-shell branch. The sixth page, extract structured data from a web page into a JSON schema, is not included: that feature is still planned (#1797). Its capture stays in benchmarks/agent-intents-2026-10-19/02-* and is named as unpublished in that README and in llms-full.txt. OG cards are re-rendered in the light blog-cover palette from #1918 (paper #f6f4ee, ink, ochre subtitles, yellow as a fill only, no grain and no shadow). The dark cards from the stacked branch are not used. No page sets structured_data, so these pages do not emit FAQPage or HowTo. Existing articles gain links to the five new pages. The two links that pointed only at the held page are not added. * seo: date the five new answer pages in the sitemap * answers: match the JSONL query time to the capture, and name each intent page's queries The JSONL intent page said the multi_match took 3 ms. The committed capture benchmarks/agent-intents-2026-10-19/03-jsonl-multi-match.json records "took":1, with 57 hits and issue #1801 first. The CSV match in 03-csv-match.json is also "took":1, so the page no longer says 1 to 3 ms. The reduced response, the evidence line, the table, the FAQ and the description now say 1 ms. Each of the five published intent sources gains a queries: list: the search strings that page is written to answer, taken from its own question and heading. The field is optional, not rendered, and published on answers/index.json. The sixth intent page, extract structured data from a web page, stays unpublished because schema-in JSON-out is still planned (#1797). Verified: build_articles --check, fix_heads --check, fix_links --check, mk_og_card --check, seo_lint 194 pages and 0 gate violations, factcheck --fail-on error with 0 ERROR, test_article_schema 10 tests, landing-constants-guard.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every blog post gets its own cover from one series, the engineering field-log poster. It replaces the generic
og/xerj-card.pngthat seven of the eight posts shared, and the one-off JEV card.Revision 2 (2026-10-20): light print on the brand palette
The first version was night-black with yellow halftone dots. The owner's feedback was that it looked unrelated to the site, because
/blog/is served in the day theme (paper#f6f4ee, ochre accents). The series is now restyled to the original brand book (landing/brand.html,landing/brandbook/), and it targets the current site on main, not the light-theme redesign (#1920):#f6f4eeon a faint 1px square grid. Art and type are in ink#0B0B0D. Titles are Big Shoulders Display 900 and subtitles are ochre#A06800.#FFC400is earned. It is used only as a fill, on the one result each post is about, and never for text: the 28% cut, the vote's 45 extra correct answers over Jev, the $0 local bill, the mask bug, the four launch corpora, the 36 PoCs, the three passing gates and the lz4 route.dot()draws a filled cell andring()draws an empty one.#d6d4cbframe so it keeps its edge on X, Slack and LinkedIn. The hero and thumbnail are framed byblog.css, which uses a paper mount and square corners (blog.css?v=3).og:image:altandaltwere updated only where the drawing changed (jevbars, vote, index28, tiles).The ninth cover,
corpus-hub-v2(route motif), ships with its post in #1915, which is stacked on this PR.Files
scripts/seo/blog_covers/holds the generator (covers.py,motifs.py), a README and the vendored OFL fonts. It is an offline tool (Playwright + Pillow) that CI does not run.landing/og/blog-<slug>.png(1200×630),landing/blog/covers/<slug>-hero.webp(1600×640) and<slug>-thumb.webp(640×336) are committed.pagedata.pysetsog_image/og_image_alt.fix_heads.py --writeregenerated the heads. The sitemap andtools/packs/xerj-blogposts/posts/*.jsonare regenerated.Checks run locally (all pass)
test_article_schema,test_urlmap,test_llms_field_report,build_articles --check,gen_sitemap --check(also re-run after the commit, no drift),fix_heads --check,fix_links --check,mk_og_card --check,seo_lint(0 gate violations),factcheck --self-test / --fixture-check / --fail-on error(0 ERROR),audit --fail-on critical,landing-constants-guard.sh. No workflow files changed. Index (day) and post (night) pages were rendered locally and checked.AI disclosure: this PR was prepared with an AI agent (Xerj Merger / Grok Bot) acting for the maintainers. The covers are drawn by code (HTML + SVG rendered in headless Chromium), not by an image model. Every number on a cover is quoted from its post.