Repository navigation
feat: README role and highlights, AI workflow page, About, potd entry - #12559
Merged
Merged
Conversation
The README's first screen now says who builds anyplot and how: models write the code and the owner leads them, in his own approved wording. Seven engineering decisions follow, each with its reason and a link to the code that carries it out, then a Mermaid diagram of the services and the pipeline. docs/concepts/ai-workflow.md tells the whole story the README links to: who does what, what the owner brings, the path of a change to production, how a repeated mistake becomes a rule (three dated cases from .claude/guardrails.md), the #12557 timeline, and the limits. Registered in docs/index.md (quick links, tree, concepts). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
One short paragraph each, in the site's voice, linked to /stats, /plots and /mcp through the router. The bot HTML of /about carries the same three sections, so crawlers read what visitors read. The palette link and the three new ones share one in-prose link helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
The plot of the day's header shows .use_my_data() beside github.open()
when the eligibility check names a lane for its spec and library, one
request per view as on the spec pages. The public lane opens /agent
through the router, the admin lane /debug/agent with a full page load.
The chat records agent_open{source: plot_of_the_day}: one line in
OPEN_SOURCES, documented in plausible.md and the design doc's entry
points.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
GitHub laid the single diagram out 1,674 px tall in a frame capped at 1,383 px, so its bottom row (anyplot-renderer) was cut off: GitHub's Mermaid ignores a subgraph's direction once its nodes link outside it, and it wraps long labels into narrow columns. The services and the pipeline share only the storage, so each now gets a small diagram of its own with short label lines, and the edges into "Use with my data" target the subgraph, so its left-to-right direction holds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
…tHub Left to right it was 1,299 px wide, which GitHub shrank to 66 % (about 11 px text) with its zoom controls over the last node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
The background in three sentences: the apprenticeship, the physics Diplom from Heidelberg University with its thesis, the work in data and AI since 2013, and defichain-data (2022 to 2024), built and run largely without AI, as the proof of the stack. Then four kinds of evidence; the structure bullet goes, since the bridge sentence and the README carry that point. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
…hysicist and data analyst" At 390 px the new .use_my_data() squeezed the plot of the day's filename to "plot…". On a phone the two actions now take their own line, right-aligned below the filename (274 of its 307 px visible at 390 px, 244 at 360); from 600 px up, and whenever the entry is absent, the header stays on one line as before. The About page's origin line says "by a physicist and data analyst" instead of "by a data scientist", matching the README and the style guide's story points. useAgentLaneOpen's docstring names the new entry point. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Approval is blocked by two active nit findings: missing page-level analytics coverage for the new allowlisted source and a missing required status line at the start of the new concept page.
2 open issues
What changed in this PR
This pull request adds portfolio framing for anyplot, documents its human-led AI development workflow, expands the About and SEO pages, and introduces an eligibility-aware .use_my_data() entry point for the plot of the day.
Changes:
- Adds README engineering highlights, architecture diagrams, and AI workflow documentation.
- Expands About-page, bot-rendered SEO, analytics, and agent-network content.
- Adds plot-of-the-day agent routing, responsive actions, source attribution, and tests.
| File | Description |
|---|---|
tests/unit/api/test_routers.py |
Verifies the SEO About page contains the new sections and links. |
README.md |
Adds owner perspective, engineering highlights, architecture diagrams, and documentation links. |
docs/reference/plausible.md |
Documents the new analytics source and About-page destinations. |
docs/index.md |
Registers the AI workflow documentation throughout the index. |
docs/concepts/ai-workflow.md |
Documents roles, development flow, guardrails, timeline, and limitations. |
docs/concepts/agent-network.md |
Documents the plot-of-the-day agent entry point. |
changelog.d/portfolio-framing.md |
Records the user-facing portfolio and landing-page changes. |
app/src/sections/landing/PlotOfTheDayTerminal.tsx |
Adds the eligibility-aware .use_my_data() action and responsive layout. |
app/src/sections/landing/PlotOfTheDayTerminal.test.tsx |
Tests eligibility behavior and public/admin routing. |
app/src/pages/AgentChatPage.tsx |
Accepts plot_of_the_day as an analytics source. |
app/src/pages/AboutPage.tsx |
Adds review, agent-chat, MCP, and updated origin content. |
app/src/pages/AboutPage.test.tsx |
Tests the new About-page links. |
app/src/hooks/useAgentLaneOpen.ts |
Updates entry-point documentation for the plot-of-the-day action. |
api/routers/seo.py |
Mirrors the About-page additions in bot-optimized HTML. |
Review effort: Lite
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…ed; status line on the AI workflow page Review of #12559: the page test now opens the chat with source=plot_of_the_day and asserts that agent_open carries that source, not "direct", and that the URL then drops it. Breaking the OPEN_SOURCES line turns it red ("direct" instead). The AI workflow page opens with a dated status line, because its counts were taken on 2026-11-04. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
… README's claims
scripts/readme_showcase.py redraws the owner's showcase layout:
- the wordmark, the eyebrow, and the title with "4 languages." in the
script italic;
- a 3 x 5 grid of light previews (the _800 derivatives), one spec per
library;
- a footer with the library count per language, the implementations
and the lines of code.
Every count comes from /stats and the library registry. It writes
docs/assets/readme-showcase.png (1600 x 2000, 222,781 bytes,
256-colour PNG once the full-colour file passes 600 KB). It stops when
MonoLisa or its italic cannot load, when text shaping is missing, or
when a pick has no preview; it never falls back to another font. The
image replaces the ridgeline OG card in the README and links to
/plots.
tests/unit/test_readme_claims.py reads each value the highlights, the
architecture and the About page (and its bot copy) state from its
source:
- core.defects.CRITERIA for the rubric's criteria and points;
- impl-review.yml's threshold formula for the bar and its step;
- AgentSettings and MAX_REVIEWS through ast for the pipeline bounds,
the idle time and the default model;
- the registry for the libraries;
- the @mcp_server.tool() count for the MCP tools.
Each value must stand right beside its keyword. The test also checks
every relative link against git ls-files and every in-page anchor
against the headings. A merged-pull-request count must be a floor:
the README and the AI workflow page now say "more than 850", and the
workflow page's decision count is a floor ("more than 80 times").
/write-docs gets the sync duty, the release procedure a step that
redraws the image and raises the floor, and /audit-licenses the new
asset in its baseline.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
…ecorded count Pre-PR check of the delta: the floor test matched any "N pull requests", so an unrelated count failed it, and it never checked the number, so "more than 50,000" passed. It now matches only "(more than|over) N pull requests from my account have merged", requires that claim in both texts, and bounds N by MERGED_PRS_SNAPSHOT (869, 2026-11-04): a multiple of 50, below the count and at most 50 below it. The release procedure's step 4 updates the snapshot and the floor in one commit. review_bar() allows spaces inside $(( ... )). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
#12566 moved the model routing out of CLAUDE.md into agentic/docs/agent-operations.md, so the page's opening now points there next to CLAUDE.md, the guardrails and the skills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
MarkusNeusinger
added a commit
that referenced
this pull request
Nov 5, 2026
No conflicts: AgentChatPage.tsx and its test keep the one field beside portfolio's plot_of_the_day source and its test; agent-network.md and plausible.md take both sides' text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
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.

Summary
Package E of the portfolio framing, plus B-03. It shows what the human behind anyplot does, in the owner's own wording, and backs every claim with a link to code or docs.
README. A "How I build anyplot" section on the first screen (the owner's approved text, verbatim). "Engineering highlights" lists seven decisions, each with its reason and the code that carries it out. "Architecture" has two Mermaid diagrams: the services, and the pipeline.
Docs page
docs/concepts/ai-workflow.md, "How anyplot is built with AI agents". It covers:.claude/guardrails.md;It's registered in all three parts of
docs/index.md, and the README links it.Site. The About page gets one short section each on the review, "Use with my data" and MCP, linked to
/stats,/plotsand/mcp. The bot HTML of/about(_ABOUT_BOT_BODY) carries the same sections. The landing page's plot of the day gets.use_my_data()besidegithub.open(). It shows only whenuseAgentEligibilitynames a lane for its pair, with one request per view. The chat records the new sourceagent_open{source: plot_of_the_day}: one line inOPEN_SOURCES, documented inplausible.mdand in the design doc's entry points.Plan
The draft the owner reviewed lives outside the repository. Where the build departs from it:
anyplot-renderer. GitHub's Mermaid ignores a subgraph's direction once its nodes link outside it, and it wraps long labels. The services and the pipeline share only the storage, so each gets its own diagram. Both now fit their frames at scale 1 with 16 px text, measured on the pushed branch.api -- … --> chattargets the subgraph on purpose. An edge to the nodeagentswould make GitHub ignore the subgraph's left-to-right direction, and that inherited direction is what stacked the boxes into the tall, clipped layout. A pre-PR check noted that some older Mermaid renderers reject edges to a subgraph. GitHub renders it, and the README is read there.gh pr list --state merged --author MarkusNeusinger): 866 intomainand 3 into other branches. The approved text said 864.plot_of_the_dayis a new source rather than a reuse oflanding, which is documented as the 2026-11-02 hero line.Texts to read
The README's "How I build anyplot" section is the owner's approved text, verbatim, with 869 in place of 864. Everything else this PR adds that a visitor or reader sees follows.
About page (
AboutPage.tsx, house style)❯ review: every implementation is scored before it ships. automated checks come first: the code runs, the image isn't blank, the canvas has its size. then an ai reviewer scores the render on a 100-point rubric of 24 criteria — visual quality, design, spec compliance, data quality, code quality, and library mastery — blind to any earlier score. a first review needs 90; below that, ai repairs the defects the review named and the plot is reviewed again, up to four times. the [stats page] shows the score distribution per library.❯ use with my data: experimental, open to everyone since 2 november 2026. [pick any plot], choose.use_my_data(), and paste your data. an agent adapts that plot's code to your columns, renders it in a sandbox with no network access, reviews the render against the catalogue's rubric, repairs it once if needed, and hands back the image and the code. your chat and data live only in server memory and are deleted after an hour idle, unless you send feedback.❯ mcp: the same catalogue, served to ai coding assistants over the model context protocol. six tools search specs by tag, return a spec with its implementations, and fetch one library's code, so your assistant starts from code that already rendered and passed review. setup on the [mcp page].❯ origin, changed: built in Visp, a small town in the Swiss Alps, by a physicist and data analyst looking for one place to find the right plot for the data in front of him — and a way to explore what each library does best. (It said "by a data scientist". The new wording matches the README's "physicist" and the style guide's "data analyst" in §3.8. The bot HTML has no origin section, so there's nothing to mirror.)Bot HTML of
/about(api/routers/seo.py): the same three new paragraphs in sentence case, under<h2>Review</h2>,<h2>Use with my data</h2>and<h2>MCP server</h2>.Plot of the day (
PlotOfTheDayTerminal.tsx): the visible label.use_my_data()and the accessible nameUse with my data(the existingUSE_MY_DATA_LABEL).README "Engineering highlights" and "Architecture";
docs/concepts/ai-workflow.md: as in the draft the owner reviewed, with the deltas listed under Plan. "What I bring" uses only the CV facts the owner confirmed:It names no employer and claims no security experience.
Test plan
yarn lint,fm:check,type-check,test(1,654 passed),build.ruff check .,ruff format --check .,mypy api core, andpytest tests/unit tests/integration -n auto(26,834 passed, 176 skipped).uv run python -m tools.changelog check --base origin/main/agent/laneand/agent/eligibilitywere mocked, and every/agent/sessionsrequest was aborted, so no session opened.github.open(), with no page overflow. The click opens/agent?spec=…&library=…&language=…&source=plot_of_the_day. The About sections render with their three router links.plot…);#engineering-highlightsanchor resolves, and both Mermaid frames fit (899 and 712 px, scale 1, 16 px text).10b83612: nothing blocking. Its one low finding, the subgraph edge target, is kept on purpose (see Plan).https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8