Repository navigation
Publish model description pages, with versions, AI disclosure and a solutions layout - #15
Conversation
Each model description now carries a MAJOR.MINOR version, a status (draft for 0.x, released from 1.0), an AI-assistance level from 0 to 4 with what AI was used for, and an optional human-verification record. They live in the front matter's `options` block: MyST passes that block to the PDF template, whose options must be flat, so the fields are named ai_level, verified_by and so on rather than nested. The PDF template draws them in a box at the top right of the first page and starts the title below it, so a long title cannot run into the box. The level is four segments in one neutral colour; verification is a label with a solid blue border once the current version is verified and a dashed grey one until then. buffer-stock is version 0.1 (draft). Its level, 3 (AI-drafted, human-directed), is a proposal for its authors to confirm; nobody has verified it yet. Its subtitle drops "version 0.1 (draft)", which the box now shows, and CHANGELOG.md records the version. CONTRIBUTING.md sets out the versioning rules, the release steps, the levels and what human verification means. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tools/build_pages.py renders every models/<model>/model-description.md into docs/models/<model>/index.html, with the PDF copied beside it. The page uses the site's header, footer and stylesheet, shows the same version box as the PDF, gives each section a link, and loads MathJax 3.2.2 for the equations, the renderer GitHub uses for the Markdown. All 81 equations in the buffer-stock description typeset without errors. The publishing workflow builds the pages before its checks, so they are not committed, and the link and anchor checks now cover pages in subdirectories; a link ending in / must reach an index.html. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every implementation now includes a metadata.yml with its authors, the model description version it follows and its AI disclosure, plus the verification fields once a person has verified it. Other fields stay optional. schemas/implementation-metadata.schema.json defines them, and tools/check_metadata.py, run by the publishing workflow, validates them and names any missing or invalid field. It also checks each description's version against its CHANGELOG.md and its status, and that the library table on the site shows the version, AI level and verification each implementation records. The library table's HARK slot now reads "HARK · v0.1" with the level's four segments, and the description link opens the new web page. HARK's metadata.yml proposes level 3 for its authors to confirm, and links to the buffer-stock/v0.1 tag, which is made when this merges. The HARK notebook now refreshes only the run's software and numerical settings in metadata.yml, keeping what people record there, and saves nothing when run from another directory. Re-executed from a fresh kernel with Python 3.12.7: outputs and results unchanged; 16 tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🔵 Needs a closer look
It spans CI, a new build/validation pipeline, LaTeX templating and a schema whose end-to-end rendering (MyST/LaTeX/MathJax) can't be fully verified here, and the PR itself states AI-level and verification values must be confirmed by humans before merge.
No open issues 🎉
What changed in this PR
This PR lands three planned features together (#12 web page per model description, #13 versioning, #14 AI disclosure/verification). It adds a lightweight Python build step (tools/build_pages.py) that renders each models/<model>/model-description.md into docs/models/<model>/index.html with MathJax, a metadata validator (tools/check_metadata.py) wired into the publish workflow, a JSON Schema for a now-required per-implementation metadata.yml, a PDF/web "version box" showing version, status, AI level and verification, and a root CONTRIBUTING.md documenting the rules.
Changes:
- New site tooling:
build_pages.py,check_metadata.py,model-page.html,requirements.txt; publish workflow builds pages and runs checks, extended to subdirectory link/anchor validation. - Versioning + AI disclosure surfaced in the PDF template, the generated web page, and the library table; flat option field names (
ai_level,ai_used_for,verified_*). - Docs, HARK notebook/metadata, README and model README updated so each implementation carries a validated
metadata.yml.
| File | Description |
|---|---|
| tools/build_pages.py | Renders model-description Markdown to HTML with the version box. |
| tools/check_metadata.py | Validates descriptions, metadata.yml and the library table. |
| tools/model-page.html | Page template; placeholders all mapped by build_pages. |
| tools/requirements.txt | Pins build/check dependencies. |
| templates/plain_latex_wide/template.tex,.yml | Adds PDF version box options/rendering. |
| schemas/implementation-metadata.schema.json | Defines required metadata fields and conditional rules. |
| .github/workflows/publish.yml | Adds build + metadata-check steps; extends ref/anchor checks to subdirs. |
| docs/site.css, docs/index.html | Styles/markup for AI-level and verification indicators and doc pages. |
| CONTRIBUTING.md, README.md, models/buffer-stock/* , projects/HARK/buffer-stock/* | Documents the scheme; HARK metadata/notebook updated; new CHANGELOG. |
| .gitignore | Ignores generated docs/models/. |
I did not find concrete defects to flag: placeholder/variable/package dependencies resolve, the checker regex matches the changelog, the HTML table parser balances correctly for the current slots, and the extended CI reference/anchor checks resolve the generated pages.
Review effort: Balanced
Solutions now live in solutions/<model>/<NNN>-<toolkit>-<method>/ instead of projects/<toolkit>/<model>/. A solution can come from a toolkit's project or from individuals, and one project can submit several, so the directory no longer stands for its owner. The number is the next free one among the model's solutions and makes every name unique; the rest is a label for people browsing, and metadata.yml is the record. The HARK solution moves to solutions/buffer-stock/001-hark-egm/ at the same depth, so its relative links still work. metadata.yml gains three required fields, toolkit, method and maintainers (the GitHub users who approve changes), and an optional project for a solution submitted on behalf of a toolkit's project. The HARK file's long description of its method becomes method_details, so that method can hold the short name. The schema is renamed solution-metadata.schema.json. The checker enforces the directory names and unique numbers, and checks that each slot in the library table is labelled with the toolkit, method, submitter (the project, or else the first author's surname) and version, as in "HARK · EGM · Econ-ARK · v0.1". The slots now share their row and wrap among themselves, so a longer label no longer pushes the description column onto its own line or off a phone screen. The README, the site and CONTRIBUTING.md now say that each solution is authored and maintained by its submitters, whether a toolkit's project or individual contributors, and that changes to it need its maintainers' approval. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The table's right-hand column linked "description v0.1 ⟨draft⟩" in small grey text, which did not say clearly where someone setting out to solve a model gets its description. Each model's name block now carries a blue "Model description · v0.1 draft" button to the description's page, with "Download PDF" beside it, or "Model description planned" for the four models without one yet. The column goes, and the header reads "Implementations". Without that column the rows no longer drop onto a second line. Slot labels stay on one line, the slots wrap within their own column, and once the table is too narrow for name and slots side by side the slots move under the name and line up with it. A container query decides that, since the table's width depends on the contents rail as well as the window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each model's slots now run down a column at the right, one per line, filled ones first and open ones below, rather than side by side. The boxes share the column's width, which has a minimum so the column lines up from row to row, and each row aligns to the top so the first slot sits beside the model's name. On a narrow table the column moves under the name, so the container query that realigned wrapped slots is no longer needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On their own the four segments after a slot's version did not say what they measure. Each slot now shows "AI" before them, in the segments' grey so it reads as their label rather than part of the slot's name. CSS adds it, so the slot markup and the metadata check are unchanged, and screen readers still hear the segments' "AI level 3 of 4". The description page and the PDF box already print "AI 3/4" beside theirs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Once a person has verified a solution, or a model description, against its current version, its slot or its description button in the library table carries a "✓ Verified" badge, in the element's own colours inverted. The badge is drawn from data-verified, so marking something verified on the site means setting that attribute and, for a slot, removing its "not yet verified" text for screen readers. The metadata check already compared a slot's data-verified with its metadata.yml. It now does the same for the description button against the front matter, and checks that a slot's screen-reader text matches its state. With the description and the HARK solution marked verified in a scratch copy, the check passes, and it fails when either the slot's text or the button's attribute is left behind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ription
The four filled segments read as progress, a battery or a rating, but
the level records how the work was produced, which has no better end.
It becomes a named category, and drafting with AI becomes one category
whether AI drafted some passages or most of them, leaving four:
0 No AI No AI was used in the text or code.
1 AI-edited People wrote every passage; AI suggested fixes.
2 AI-assisted AI drafted some or most of it; people edited it
throughout.
3 AI-generated AI drafted it; people edited it lightly.
Readers see the word, never the number. A slot in the library table
shows it in a neutral outlined chip. The version box on the PDF and on
the description's page adds a marker on a line from Human to AI at the
category's position, and a one-line summary. The schema now holds the
four words and summaries, and the page builder and the checker read
them from there; the PDF template repeats them. The checker also
requires the slot to show the right word.
The description and the HARK solution both proposed level 3 of the old
five, AI-drafted and human-directed, which is now 2, AI-assisted. The
PDF's title moves down a little more to clear the taller box, and the
PDF is still four pages.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This is awesome. I am going to merge this in . |
|
@akshayshanker you have write access now. I'll merge but if you verify the AI level settings are inline with what you did that would be great. |
Builds the three pieces planned to land together: a web page for each model description (#12), a version for each description that solutions cite (#13), and the AI-disclosure and human-verification record on descriptions and solutions (#14). It also reorganises submitted solutions by model, so that individuals as well as toolkit projects can submit, and one project can submit several.
Closes #12. Closes #13.
What this adds
tools/build_pages.pyrenders eachmodels/<model>/model-description.mdintodocs/models/<model>/index.html, with the PDF beside it, in the site's header, footer and styles. MathJax 3.2.2 renders the equations, the same renderer GitHub uses. The publishing workflow builds the pages, so they are not committed.options,models/buffer-stock/CHANGELOG.md, and the rules and release steps in a newCONTRIBUTING.md.ai_level0 to 3 and shown by name: No AI, AI-edited, AI-assisted (AI drafted some or most of it; people edited it throughout) and AI-generated.CONTRIBUTING.mddefines them, with the rules, theused_forlist and what "human verified" means. Slots show the word in a neutral chip; the version box adds a marker on a line from Human to AI and a one-line summary. Verification is a solid blue label once the current version is verified and a dashed grey one until then.solutions/<model>/<NNN>-<toolkit>-<method>/. The number is the next free one among the model's solutions and makes every name unique; the rest is a label for browsing, andmetadata.ymlis the record. The HARK solution moves fromprojects/HARK/buffer-stock/tosolutions/buffer-stock/001-hark-egm/, at the same depth, so its relative links still work.metadata.ymlschemas/solution-metadata.schema.jsondefines the required fields:toolkit,method,authors,maintainers(the GitHub users who approve changes),model_description_version,ai_level, andai_used_forwhen the level is above 0.projectis added for a solution submitted on behalf of a toolkit's project, and the verification fields once someone verifies.tools/check_metadata.pyruns in the publishing workflow. It validates everymetadata.yml, enforces the directory names and unique numbers, checks each description's version against its changelog and status, and checks that the library table has a slot for each solution, labelled and showing what its metadata records. The link and anchor checks now cover pages in subdirectories.CONTRIBUTING.mdnow say that each solution is authored and maintained by its submitters, whether a toolkit's project or individual contributors, and that changes to it need its maintainers' approval.metadata.yml, keeps what people record there, and saves nothing when run from another directory. Its long description of the method is nowmethod_details, somethodholds the short name.Departures from the issues
ai.level,verified.byand so on. MyST passes the description's values to the PDF template only as flat options (string, number, choice), so the fields areai_level,ai_used_for,verified_by,verified_dateandverified_version. Solutions use the same names, so the two still match.verifiedfield, a solution leaves the threeverified_fields out until someone verifies it, and the checker requires all three together. The page, the box and the slot then say "not yet verified".CODEOWNERSfile. GitHub ignores aCODEOWNERSentry for anyone without write access to the repository. @akshayshanker has read access, and most individual submitters will have none, so a generatedCODEOWNERSwould request no reviews.maintainersrecords who approves changes; enforcing that approval is left for a later check or a decision about access.Checks
tools/check_metadata.pyfails on each of 20 deliberate breakages. These include a category out of range, a slot showing the wrong category, a missingmethodormaintainers, an invalid GitHub username, an unnumbered directory, a reused number, a second solution without a slot, a slot whose label, level or verification disagrees withmetadata.yml, a new version without a changelog entry, and a 0.x version marked released.Before merge
ai_level: 2): the description lists drafting and editing, HARK adds code. These are self-reports for their authors, @akshayshanker and @mmcky, to confirm or correct.projectandmaintainers. It proposesproject: Econ-ARK, which labels its slot, andmaintainers: [akshayshanker].verified_fields and update the slot'sdata-verified; the check enforces both.After merge
buffer-stock/v0.1and publish a GitHub release withmodel-description.pdfattached. HARK'smodel_descriptionlink points at that tag.🤖 Generated with Claude Code