Skip to content

Publish model description pages, with versions, AI disclosure and a solutions layout - #15

Merged
mmcky merged 9 commits into
mainfrom
model-pages-versions-disclosure
Oct 20, 2026
Merged

mmcky merged 9 commits into
mainfrom
model-pages-versions-disclosure

Conversation

@mmcky

@mmcky mmcky commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

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

Piece Where
Web page per model description tools/build_pages.py renders each models/<model>/model-description.md into docs/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.
Version box The PDF (top right of page 1) and the web page show the version, status, date, AI level and verification. The title now starts below the box, so a long title cannot run into it.
Versioning MAJOR.MINOR in the front matter's options, models/buffer-stock/CHANGELOG.md, and the rules and release steps in a new CONTRIBUTING.md.
AI disclosure and verification Four categories, recorded as ai_level 0 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.md defines them, with the rules, the used_for list 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 layout Solutions live in 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, and metadata.yml is the record. The HARK solution moves from projects/HARK/buffer-stock/ to solutions/buffer-stock/001-hark-egm/, at the same depth, so its relative links still work.
Required metadata.yml schemas/solution-metadata.schema.json defines the required fields: toolkit, method, authors, maintainers (the GitHub users who approve changes), model_description_version, ai_level, and ai_used_for when the level is above 0. project is added for a solution submitted on behalf of a toolkit's project, and the verification fields once someone verifies.
Checks tools/check_metadata.py runs in the publishing workflow. It validates every metadata.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.
Library table Each model's name now carries a blue "Model description · v0.1 draft" button to its page, with "Download PDF" beside it, or "Model description planned"; the right-hand description column goes. The HARK slot reads "HARK · EGM · Econ-ARK · v0.1" (toolkit, method, submitter, version) with the level's segments. Slots run down a column at the right, filled first and open below, and the column moves under the model's name when the table is narrow. Slots show the AI category's word in a neutral chip, and a verified solution's slot, or a verified description's button, carries a "✓ Verified" badge.
Authorship wording 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.
HARK notebook It refreshes only the run's software and numerical settings in metadata.yml, keeps what people record there, and saves nothing when run from another directory. Its long description of the method is now method_details, so method holds the short name.

Departures from the issues

  • Flat field names. Disclose AI assistance and record human verification #14 named the fields ai.level, verified.by and so on. MyST passes the description's values to the PDF template only as flat options (string, number, choice), so the fields are ai_level, ai_used_for, verified_by, verified_date and verified_version. Solutions use the same names, so the two still match.
  • Verification is three fields, added together. Instead of a required verified field, a solution leaves the three verified_ 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".
  • No CODEOWNERS file. GitHub ignores a CODEOWNERS entry for anyone without write access to the repository. @akshayshanker has read access, and most individual submitters will have none, so a generated CODEOWNERS would request no reviews. maintainers records who approves changes; enforcing that approval is left for a later check or a decision about access.
  • Disclose AI assistance and record human verification #14 stays open for its later step, the "Submit an implementation" issue form.

Checks

  • The workflow's steps, run locally, all pass: build the pages, check versions and disclosure, check local references, check anchors, check the contents rail.
  • tools/check_metadata.py fails on each of 20 deliberate breakages. These include a category out of range, a slot showing the wrong category, a missing method or maintainers, an invalid GitHub username, an unnumbered directory, a reused number, a second solution without a slot, a slot whose label, level or verification disagrees with metadata.yml, a new version without a changelog entry, and a 0.x version marked released.
  • All 81 equations typeset without errors in MathJax 3.2.2 and in headless Chrome. The page and the library table fit at 390px width.
  • The PDF rebuilds at 4 pages.
  • The HARK notebook re-runs from a fresh kernel (Python 3.12.7, HARK 0.17.1) with its outputs and results unchanged, and run from another directory it saves nothing. The 16 tests pass from the solution's directory and from the repository root.

Before merge

  • Confirm the AI categories. The buffer-stock description and the HARK solution both propose AI-assisted (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.
  • Confirm the HARK solution's project and maintainers. It proposes project: Econ-ARK, which labels its slot, and maintainers: [akshayshanker].
  • Verification. Neither is verified yet. Once someone has read either end to end, add the three verified_ fields and update the slot's data-verified; the check enforces both.

After merge

  • Tag the merge commit buffer-stock/v0.1 and publish a GitHub release with model-description.pdf attached. HARK's model_description link points at that tag.

🤖 Generated with Claude Code

mmcky and others added 3 commits October 20, 2026 15:39
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>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 04:40

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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>
@mmcky mmcky changed the title Publish model description pages, with versions and AI disclosure Publish model description pages, with versions, AI disclosure and a solutions layout Oct 20, 2026
mmcky and others added 5 commits October 20, 2026 16:22
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>
@akshayshanker

Copy link
Copy Markdown
Collaborator

This is awesome. I am going to merge this in .

@mmcky

mmcky commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

@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.

@mmcky
mmcky merged commit 5b44e98 into main Oct 20, 2026
2 checks passed
@mmcky
mmcky deleted the model-pages-versions-disclosure branch October 20, 2026 06:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Version each model description and let implementations cite the version they follow Publish each model description as a web page alongside its PDF

3 participants