Virtual CSSERG Version 1.0
Does the virtual lab work as documented?
1 Evidence, decisions, and the remaining gate
Executive Summary · Short two-column report · Report versions · public repository
1.1 Executive finding
Virtual CSSERG now has a working static publication layer, complete public indexes for Published Projects and rostered Scholars, current project-memory files, a guarded deployment component, and an automated Scholar runner whose documented wiring passes inspection. A standard-library verifier tests those promises without reading deployment credentials, contacting production, committing, or deploying.
All seven automated promise groups pass on October 20, 2026. The validated scholars.json record governs identity data, while canonical files under scholars/ preserve PI-authored biographies. Scholar–Project pairing lasts for one invocation rather than becoming durable roster state. Every static and generated footer now separates About links from Open work links. The September 15 normal workflow reached completion only after its guarded deployment and authenticated inventory check returned successfully; a September 16 public probe then found all 110 expected files byte-identical. This closes the deployment gate for that release and observes the successful workflow path. The coordinated dialog canary has also migrated every Project and _template to immutable iteration records with verified legacy hashes. Controlled tests now witness fail-closed Scholar and validation errors. Static checks also require a first-anchor bypass link and an explicit alt decision for every native image. They also require an author-supplied accessible name for every exposed composite figure with role="img". Generated Quarto pages now place that bypass link first in the public HTML through a tested post-render step rather than runtime JavaScript. That step also names repeated navigation landmarks and adds explicit column scope to generated table headers. The verifier requires every repeated navigation name supplied by aria-labelledby to resolve to nonempty text, rather than accepting ID existence alone, and rejects the same source-derived name on navigation regions containing different link sets. It permits the documented exception for identical link sets. Every public data table now has a concise source-owned caption, and the whole-site parser rejects an unnamed table. It also requires accessible names and valid ARIA targets and expanded states on exposed interactive and keyboard-focusable elements. Every page now also must expose exactly one leading modern HTML doctype, one html element with lang="en", one nonempty title, one banner, one main region, and one content-information landmark. Each start tag must use each attribute name only once under an ASCII case-insensitive comparison, so duplicate id, alt, ARIA, or metadata declarations cannot be collapsed before their values reach downstream checks. No page may declare a base element that changes its document URL or default navigation target, preserving the reference model used by local-path, fragment, and bypass checks. Each page must serialize one explicit head before one explicit body, keep its title, encoding declaration, and viewport metadata in that head, and place every other source element and non-whitespace text inside one of those containers. Each file must also decode as UTF-8 and carry exactly one short-form UTF-8 character encoding declaration completed within its first 1024 bytes; the context-aware parser does not misclassify headers or footers nested in a main, article, aside, navigation, or section region. Positive tabindex values are now rejected so source order is not overridden by an author-set tab priority. The parser also rejects autofocus so page load cannot request focus away from the document entry and first-link bypass path. Every page must also declare one width=device-width viewport without disabling scaling or setting a nonnegative maximum scale below 2. The same parser now rejects every automatic page reload or redirect declared through meta http-equiv="refresh"; none occurs in the public tree. It also rejects autoplay on audio and video elements so media starts only after an intentional user action. Every iframe must now also have a nonempty name from aria-labelledby, aria-label, or title; the current public tree contains no iframes. Every document ID must be nonempty, free of ASCII whitespace, and unique within its page. Every WAI-ARIA ID-reference attribute must also be nonempty and resolve every token within its page, including relationships on generic regions outside the element-specific name checks. The source contracts also cover resources loaded through CSS url(): each nonempty local dependency must resolve from its stylesheet, remain inside the public tree, and name an existing file. They now pass across 39 HTML pages, 39 leading modern doctypes, 39 early UTF-8 declarations, 39 explicit head/body pairs with head-owned document metadata, 6,518 attributes across 6,569 start tags without duplicate names, no document base elements, 328 conforming document IDs, 19 ARIA ID-reference attributes with 19 resolved tokens, 160 named navigation landmarks, 97 native images, 4 exposed ARIA images, 38 named data tables, 204 exposed headings, and 858 interactive or keyboard-focusable elements: all four exposed ARIA images and all 832 exposed interactive elements are named, while 26 Quarto source-line anchors are safely hidden. Ten custom scroll regions use tabindex="0"; no public element uses a positive value or declares autofocus or media autoplay. All four local CSS dependencies resolve across all 23 public stylesheets. The manual review sample expanded automatically from 11 pages and 44 results to 13 pages and 52 results. A claim-to-evidence review found the infrastructure report substantively adequate for its stated purpose; rendered keyboard, reflow, and assistive-technology review remains the sole open manual gate.
This is an audit of documented infrastructure and public artifacts, not a claim that automation can certify research truth. Passing structural checks cannot establish whether a substantive inference is sound or whether a page is usable by every reader.
1.2 Project question and method
The charter defines Version 1.0 as the point at which everything promised in the repository documentation works as documented. The audit therefore treats the documentation as a set of falsifiable promises and asks what observable evidence supports each one.
The method has three layers:
- Translate statements in
AGENTS.md,RESEARCHER-ORIENTATION.md, the Project charter, and current PI guidance into concrete evidence expectations. - Test the safe, deterministic subset with
verify_v1.py. - Keep claims requiring a browser, credentials, human judgment, or a complete external workflow outside automated results; evaluate them separately and preserve every remaining limitation.
The verifier uses Python’s standard library. It parses public HTML, resolves HTML resources and fragments plus local CSS url() dependencies, inspects project memory and report artifacts, checks runner syntax and required commands, and exercises the deploy function with mocked process calls and non-secret placeholder configuration.
1.3 Public system
The public site is a static tree under website/. Its homepage presents recent research, while stable Projects and Scholars directories provide complete catalogs. Primary headers link only inside Virtual CSSERG. Every footer links Dr. Jason Jeffrey Jones, CSSERG, the public repository, and the CC BY 4.0 International license.
The Projects page contains one entry per Published Project and orders them by the newest substantive Scholar iteration or PI intervention. Active Projects may remain Unpublished while research begins. Version 1 replaces hand-kept dates as the implicit source of truth with title, status, publication, and updated metadata at the top of each STATE.md. The verifier now derives the expected ordering from those records and requires the public data-updated values to match.
The Scholar directory now uses the PI-selected portrait-roster pattern: equal cards, honest monograms, short introductions, and direct links to authoritative profiles. Each profile reproduces its canonical PI-authored biography under scholars/<slug>/BIOGRAPHY.md. The roster contains durable identity only; a runner invocation pairs any Scholar with one Active Project for one iteration. The directory is designed to scan quickly rather than duplicate full biographies.
The Project Executive Summary now uses the PI-selected evidence-brief pattern. It asks the Project question, reports status without presenting it as a completion percentage, shows exactly one dense promise map, and then gives five linked findings. The unselected alternatives remain labeled review artifacts.
1.4 Verification evidence
| Promise group | Current result | What the automated check establishes |
|---|---|---|
| Repository guidance | Pass | Required guidance, growth and report-archive procedures, and tested Project/Scholar creation commands exist. |
| Project memory | Pass | Every Project and _template has bounded dialog navigation, immutable iteration/year indexes, verified legacy hashes where applicable, and valid state metadata. |
| Static HTML/CSS | Pass | Public pages have exactly one leading modern doctype, no duplicate attribute names, one ordered explicit head/body pair with title, encoding, and viewport metadata in head, an English root declaration, nonempty title, banner, main, content-information landmark, and responsive zoom-permitting viewport; nonempty, whitespace-free, page-unique document IDs; nonempty, resolved ARIA ID-reference attributes; no automatic focus, media playback, meta refresh, or redirect; first-anchor bypass links; nonempty headings without forward rank skips; repeated navigation with nonempty direct or referenced names and distinct names for different link sets; named iframes, data tables, exposed ARIA images, and interactive elements; scoped table headers; explicit native-image alternatives; valid ARIA relationships; no positive tabindex overrides; branding; complete footer links; Bootstrap; resolvable HTML resources/fragments; and existing in-tree local CSS url() dependencies. |
| Public catalogs | Pass | Every Published Project and rostered Scholar is linked; biographies and metadata-derived update order agree with their sources. |
| Three report forms | Pass | Every Published Project has a linked one-figure Executive Summary, Quarto Full Report, and short PDF. |
| Scholar runner | Pass | Clean-tree, identity, Active-Project, runner-integrity, independent-validation, failure, commit, push, logging, and deployment gates pass. |
| Deployment | Pass | Mocked rsync is shell-free, guarded, failure-propagating, and followed by checksum/inventory verification. |
The verifier became stricter where earlier checks could pass incomplete work: it now covers the three report forms, exact Executive Summary figure count, cross-links, Quarto book configuration, full charter biographies, and the Projects directory. The September 17 check added negative fixtures for absent or late bypass links and missing image alt attributes. On September 19, a text-browser review exposed that the then-current four Quarto report pages relied on runtime JavaScript to move their source-controlled links before repeated navigation. Their builds now run a tested, preflight-first normalizer that makes the link the first anchor in generated HTML and targets the report’s main content; the verifier no longer accepts runtime relocation as a substitute. On September 22 the same source audit exposed 14 unnamed Quarto navigation landmarks, and on September 23 it exposed 60 generated table headers without explicit scope. The normalizer now names the known navigation regions, assigns column scope inside table heads, and refuses unknown or invalid markup before it writes. The whole-site verifier enforces both contracts. On September 24, an audit found all 501 assistive-technology-exposed links and buttons named, all 26 hidden source-line anchors removed from the tab order, and no invalid aria-labelledby, aria-controls, or aria-expanded value. Two negative fixtures now guard those conditions, including the distinction between a deliberately hidden, non-tabbable source-code anchor and a focusable control hidden from assistive technology. A September 25 coverage audit then found two native disclosure summaries and six custom focusable scroll regions outside that link/button-only implementation; all eight were already named. The parser then checked 542 elements—516 exposed and named plus the 26 hidden anchors—and a focused fixture covers native form and disclosure controls, interactive ARIA roles, and custom keyboard-focus targets. On September 26, the same audit found 24 of 26 data tables lacked a table-level accessible name even though every header was scoped. Their sources now provide concise captions, and a focused fixture rejects absent, broken, or empty table names. On September 29, the restored Ipseity Daily Pulse publication brought the current totals to 29 named tables and 800 interactive or keyboard-focusable elements, with all 774 exposed elements named. Later Predict the Self work increased those totals. On September 30, a whole-site audit found 196 exposed headings, all nonempty and free of forward rank skips, alongside 31 named tables and 809 interactive or keyboard-focusable elements; all 783 exposed interactive elements are named. A focused fixture rejects an empty heading and a jump such as h2 to h4. The rule permits multiple h1 elements and movement back to a higher rank in the Quarto book structure. On October 1, the parser also found exactly one top-level banner, main region, and content-information landmark on each of the 39 pages. A focused fixture rejects missing or duplicate page landmarks while confirming that nested section and article headers and footers are not page landmarks. This implements the native HTML landmark context documented by the W3C ARIA Authoring Practices Guide (World Wide Web Consortium Web Accessibility Initiative, n.d.-c), without claiming to observe a browser accessibility tree. On October 2, the audit closed a different source-coverage gap: its explicit-alternative rule inspected native img elements but not composite figures exposed with role="img", including the Executive Summary’s dense promise map. All four current ARIA images already have author-supplied names. The parser now requires every exposed non-native ARIA image to have a nonempty aria-label or a resolvable, nonempty aria-labelledby reference, and a focused fixture rejects missing, broken, and empty names. WAI-ARIA 1.2 requires an author-supplied label for the img role (World Wide Web Consortium, 2023). This source rule does not establish the rendered announcement, which remains in the screen-reader protocol. On October 3, a focus-order coverage audit found that the parser recorded custom keyboard targets but did not reject positive tabindex values, which would move controls ahead of the normal DOM sequence. The current public tree uses ten tabindex="0" scroll regions and 26 tabindex="-1" source anchors, with no positive value. A focused fixture now rejects positive values while accepting the current zero and negative patterns. W3C’s keyboard-interface guidance strongly advises against positive values because they impose value-based tab priority ahead of controls in the default sequence (World Wide Web Consortium Web Accessibility Initiative, n.d.-a). This is a source-order safeguard, not an observation of rendered focus order. On October 4, the next coverage audit found exactly one width=device-width declaration on all 39 public pages, with none disabling user scaling or setting a nonnegative maximum scale below 2. A focused fixture rejects a missing or duplicate declaration, a fixed layout width, user-scalable=no, a sub-200% ceiling, and an ambiguous maximum-scale value. W3C’s ACT rule maps the zoom restrictions to Resize Text and says a pass still needs further testing (World Wide Web Consortium Web Accessibility Initiative, 2022). The contract is therefore a source prerequisite, not evidence of rendered 320-pixel reflow or 200% text resizing. On October 6, a timing audit found no meta http-equiv="refresh" declarations on any public page. A focused fixture now rejects both a delayed reload and a zero-delay redirect. W3C identifies timed meta redirects and page reloads as failures of Timing Adjustable; the Project applies a stricter no-meta-refresh rule because its static pages need no automatic context change (World Wide Web Consortium Web Accessibility Initiative, 2026c). This source contract does not inspect script- or server-driven updates or establish the absence of rendered interruptions. The verifier also became narrower where old rules created false failures: first-party design requirements no longer apply to vendored Quarto CSS, and a Quarto book may validly contain more than one first-level heading.
On October 7, the audit found another narrow false pass in the September 22 navigation-name rule. A repeated navigation landmark with aria-labelledby="empty" passed when the target ID existed but contained no text. The parser now computes the referenced text, rejects both missing and empty targets, and reports the affected landmark as unnamed. A focused fixture preserves that boundary, while all 160 navigation landmarks in the current 39-page tree pass. W3C recommends labels that distinguish repeated landmarks; the source result still does not establish the names exposed or announced by a browser and screen reader (World Wide Web Consortium Web Accessibility Initiative, n.d.-c).
On October 8, a follow-up audit found that the corrected navigation-name rule still accepted the same source-derived name on regions containing different links. The parser now retains each region’s link targets and rejects a repeated name when those link sets differ. It permits W3C’s documented exception for identical link sets. One focused fixture covers both the failure and exception; all 160 current navigation landmarks pass. This exact source comparison does not establish that labels are meaningful or correctly announced (World Wide Web Consortium Web Accessibility Initiative, n.d.-c).
On October 9, a focus-entry audit found no autofocus attribute on any of the 39 public pages, but the whole-site verifier did not preserve that condition. The HTML Standard defines the attribute as a request to focus an element when the page loads and runs the focusing steps for an eligible candidate. The parser now rejects every occurrence, and a focused fixture also rejects the misleading boolean form autofocus="false". This strict static-site rule protects the source-owned document-entry and bypass path without establishing where a browser actually places initial focus (WHATWG, 2026).
On October 10, an automatic-media audit found no autoplay attribute on any audio or video element in the 39 public pages. The parser now rejects every occurrence, including autoplay="false" and muted video. A focused fixture accepts controlled user-started media and rejects both automatic examples. The HTML Standard encourages explicit user-started playback, and W3C discourages automatic audio because it can interfere with screen-reader output. This strict project rule does not detect script-triggered playback, animation, media duration, or actual browser behavior (WHATWG, 2026; World Wide Web Consortium Web Accessibility Initiative, n.d.-d).
On October 11, a document-identity audit found one html element with lang="en" and one nonempty, unique title on every public page, but the parser could let a later root overwrite the first language or merge multiple titles into a false pass. It now retains every occurrence and rejects a missing or duplicate root or title, a missing or non-English root language, and a whitespace-only title. One focused fixture covers those failures and confirms that an SVG title does not substitute for the HTML document title. W3C explains that programmatic language supports correct presentation and pronunciation and that descriptive titles support identification and orientation. Requiring exactly one of each is a stricter project-level source rule; it does not judge title meaning or establish browser and screen-reader announcement (World Wide Web Consortium Web Accessibility Initiative, 2026a, 2026b).
On October 12, an embedded-context audit found no iframe on any of the 39 public pages, but the verifier did not preserve that safe state for later growth. It now requires each iframe to receive a nonempty accessible name from a resolvable and nonempty aria-labelledby reference, aria-label, or title. A focused fixture accepts all three naming paths and rejects an absent name, the legacy name attribute, and missing or empty referenced labels. W3C’s proposed ACT rule maps this source condition to Name, Role, Value while noting that a pass still needs further testing. This Project applies the contract to every iframe without claiming observed announcement, focus behavior, or access to embedded content (World Wide Web Consortium, n.d.).
On October 13, a document-identifier audit found 328 id attributes across the 39 public pages. Every value was nonempty, contained no ASCII whitespace, and was unique within its document. The verifier already rejected duplicates, but its parser discarded empty IDs and did not reject whitespace. Identifier validation is now one page-level function, and a focused fixture covers all three constraints. The HTML Standard requires those properties because IDs are document identifiers used by fragments, scripting, and styling. This source rule also protects fragment and ARIA-reference resolution from invalid or ambiguous targets, but it does not establish rendered behavior or WCAG conformance (WHATWG, 2026).
On October 14, a character-encoding audit found that all 39 public HTML files decode as UTF-8 and contain exactly one <meta charset="utf-8"> declaration completed within the first 1024 bytes. The verifier previously decoded source as UTF-8 but would terminate on invalid bytes and did not preserve declaration count, value, syntax, or position as reported failures. One focused fixture now rejects undecodable bytes plus missing, non-UTF-8, duplicate, legacy http-equiv, and late declarations. The HTML Standard requires UTF-8 and an encoding declaration serialized completely within the first 1024 bytes. This source contract does not inspect a production HTTP Content-Type header or establish how a browser decodes a response (WHATWG, 2026).
On October 15, a document-preamble audit found that every public page contains one leading modern <!doctype html> declaration. The verifier previously did not preserve doctype count, form, or position. A focused fixture now accepts the case-insensitive short form after only an optional byte-order mark, comments, and ASCII whitespace while rejecting missing, legacy, wrong, duplicate, and late declarations. The HTML Standard calls the doctype a required preamble and explains that omission tends to select a rendering mode incompatible with current specifications. This stricter Project contract uses the short form because all current generators can emit it; source inspection does not observe the browser’s actual document mode (WHATWG, 2026).
On October 16, a start-tag audit found 6,263 attributes across 6,474 start tags in the 39 public pages, with no repeated attribute name on any one tag. The parser previously converted each raw attribute list directly to a dictionary, so a later duplicate could overwrite the value inspected by the verifier. It now records duplicate names first and compares them case-insensitively. One focused fixture rejects mixed-case duplicate id, alt, and aria-label attributes. The HTML Standard prohibits ASCII-case-insensitive duplicate names on one start tag. This narrow source rule protects downstream checks from ambiguous input; it is not a general conformance check and does not establish the DOM produced by a browser (WHATWG, 2026).
On October 17, a document-base audit found no base element in the 39 public pages, but the verifier did not preserve that absence. Its filesystem resolver could report local paths, fragments, and the first-anchor bypass target as valid even though base href changes the document base URL used by browsers and base target changes the default navigable for hyperlinks and forms. The parser now rejects every base element, and one focused fixture covers both override forms. This strict static-site rule keeps browser navigation inputs aligned with the verifier’s reference model; it does not observe actual navigation or focus (WHATWG, 2026).
On October 18, an ARIA-relationship coverage audit found that the verifier resolved aria-labelledby and aria-controls only for selected element categories. A generic labeled region could therefore reference a missing ID without failing. The parser now inventories aria-activedescendant, aria-controls, aria-describedby, aria-details, aria-errormessage, aria-flowto, aria-labelledby, and aria-owns across every element. It rejects an empty attribute or any token without a matching in-document ID. All 19 current attributes resolve their 19 tokens, and one focused fixture covers all eight attribute names plus empty and missing failures. WAI-ARIA 1.2 defines these values as same-document ID references or lists and specifies that user agents ignore unmatched references. This stricter source rule prevents silent relationship loss; it does not establish semantic appropriateness or observed accessibility-tree exposure (World Wide Web Consortium, 2023).
On October 19, a document-container audit found one explicit head followed by one explicit body in all 39 public pages, with the title, character encoding declaration, and viewport metadata in the head and no source element or non-whitespace text outside those containers. The earlier atomic checks could each pass a declaration serialized in the wrong container because they validated occurrence and value independently of placement. One focused fixture now accepts the current skeleton and rejects misplaced metadata, duplicate containers, reversed or nested containers, and content outside both. The HTML Standard describes the head as document metadata, the body as document contents, and the conforming document order as head followed by body. This Project deliberately requires explicit start tags even where HTML permits omission; the source contract does not establish the browser-produced DOM (WHATWG, 2026).
On October 20, a local-resource audit found that the verifier followed HTML href and src values without inspecting resources loaded through CSS url(). A standard-library scanner now ignores comments and string literals, parses quoted and unquoted functions and CSS escapes, and requires each nonempty local dependency to resolve from its stylesheet to an existing file inside the public tree. All four current dependencies across 23 stylesheets pass. One temporary-tree fixture rejects empty, escaping, and missing values while accepting existing, external, embedded, and fragment-only references. CSS resolves relative resource URLs against the stylesheet itself and defines empty URLs as invalid resources; the new check does not claim complete CSS conformance, external availability, document-fragment semantics, or observed browser loading (World Wide Web Consortium, 2024).
The result should be read as a regression report. Treating seven passing groups as proof that Version 1 is complete, or as a measure of research quality, would go far beyond the evidence.
1.5 Growth workflow
Version 1 adopts six lifecycle states: Proposed, Active, Blocked, Paused, Completed, and Archived. publication independently records Unpublished or Published, so authorized research can begin before public reports exist. State changes must record the actor, time, and reason; completion requires both automated evidence and named manual gates.
The new command
python3 python/create_project.py <project-slug> "Project title"validates a permanent lowercase hyphenated slug, refuses overwrite, stages a complete copy of _template, personalizes its title and state, and renames it atomically into projects/. It does not publish an empty Project or replace PI authorship of PROJECT.md. Unit tests cover successful personalization, required files, unsafe slugs and titles, no-overwrite behavior, and a fresh immutable-dialog tree that does not inherit the template’s migration archive.
Scholar identity remains deliberately PI-authored while creation is automated. The guarded python/create_scholar.py command accepts the permanent slug, display name, unique monogram, and a biography file; it refuses overwrite and installs the canonical biography, schema-versioned roster entry, profile, homepage link, and directory card as a guarded, rollback-on-error transaction. It never schedules work. The versioned scholars.json contains only durable identity, while canonical biographies live under scholars/ and are checked against public profiles.
Any rostered Scholar can work on any Active Project. Passing two stable slugs to run-scholar.sh creates the pairing for that iteration, which the immutable Project record then preserves. No reassignment transaction is required.
Pausing a Project now also has an explicit procedure. A PI instruction changes the state to Paused and advances its substantive-update time; reports remain unless the PI separately retracts them; public labels disclose the pause; and the runner refuses a Paused Project. NFL Team Fandom Identities now follows that procedure, and the PI confirms no schedules are enabled.
Generated Scholar representations are permitted only as clearly illustrative, provenance-recorded assets selected by the PI. Monograms remain canonical by default. The complete procedure is in CREATING-PROJECTS-AND-SCHOLARS.md.
Material report revisions now preserve their outgoing release by full Git commit key in a Project ledger. Canonical URLs continue to present current evidence, while the exact commit retains all three prior forms, dependencies, sources, and contemporaneous Project memory. The policy distinguishes material supersession from cosmetic maintenance and specifies correction and retraction notices. The ledger preserves the September 15 release and each later material outgoing report set through October 7; see the archive policy and version ledger.
Dialog now uses one immutable file per Scholar iteration. The bounded DIALOG.md page links at most 20 recent records plus active guidance and open questions; yearly indexes remain complete. Every pre-migration DIALOG.md is preserved byte-for-byte under dialog/legacy/ with its SHA-256 digest in the landing page. The standard-library migration command dry-runs by default, refuses overwrite, preflights all Projects, and has fixture coverage for the whole-set failure boundary. Dr. Jones appends feedback to the record he is answering; Scholars preserve prior records and summarize operative guidance in STATE.md.
1.6 Publication system
Quarto HTML books remain the default Full Report format. Quarto describes an HTML book as a specialized website with navigation, search, cross-references, and chapter structure (Quarto, n.d.-a). Those characteristics fit executable analysis and reports that can grow while remaining static. Direct HTML is a documented runtime contingency, not a coequal long-term format.
This report happens to be a one-chapter Quarto book. The Executive Summary derives its narrow findings from this account, and the short report currently fits the same evidence into a four-page two-column PDF. Neither is an exact-count requirement: books may use as many chapters as their content needs, and short reports may use up to ten pages. The three forms link to one another.
Quarto can add automated accessibility checks to rendered HTML, but its own documentation cautions that conformance tooling cannot detect every issue and still requires manual inspection (Quarto, n.d.-b). Version 1 now rejects missing or late bypass links and image alt attributes across all public HTML. It also rejects missing or duplicate page-level banner, main, and content-information landmarks, empty headings and forward rank skips, unnamed repeated navigation, unnamed data tables, and missing or invalid table-header scope. It now rejects unnamed exposed interactive and keyboard-focusable elements, broken label/control references, invalid expanded states, and focusable controls hidden from assistive technology. The build-time normalizer removes a runtime dependency from the five current Quarto pages and applies explicit scope="col" relationships inside their table heads, following W3C technique H63’s test procedure (World Wide Web Consortium, 2026b). Source-owned captions follow W3C technique H39’s table-identifier pattern (World Wide Web Consortium, 2026a). Those deterministic checks narrow the gap; rendered focus behavior, keyboard order, table navigation, and assistive-technology output remain a manual gate under the documented ACCESSIBILITY-REVIEW.md protocol. That protocol now contains a structured environment record and four result cells for each sampled page. The verifier derives the sample from the current Published Project summaries and Full Report pages, catches omitted or duplicate rows and unknown result words, and refuses a Closed record until all fields are complete and every cell passes. Those checks protect the evidence boundary; they do not conduct the human review.
1.7 Substantive report review
A September 18 internal review traced the charter requirements and each family of material report claims to current code, checks, artifacts, or timestamped historical evidence. It found no unsupported material claim and closes the substantive report gate for this infrastructure Project. The complete matrix is recorded in SUBSTANTIVE-REVIEW.md.
The review also found that the outgoing STATE.md timestamp preceded its substantive iteration’s recorded finish by 2 minutes 46 seconds. The public catalog correctly mirrored that state, but the state did not satisfy the documented end-time definition. This release corrects the record. The verifier can enforce state-to-catalog agreement; it cannot infer whether a human should classify an iteration as substantive.
This was an author review, not independent peer review, and its scope is the v1 report’s infrastructure claims. It does not newly validate empirical findings from other Projects or establish rendered usability.
1.8 Remaining manual gate and limitations
Controlled integration tests now execute the real runner with harmless fake commands and witness a dirty-start refusal, inability to inspect repository status, a prohibited runner edit, Scholar failure, and validation failure without commit, push, or deployment. This integration suite runs explicitly rather than recursively inside a live runner, which already holds the repository-wide iteration lock. The September 15 and migration-canary runs provide successful live counterparts. One manual gate remains:
- Rendered usability. Inspect representative pages at desktop and phone widths with keyboard navigation and assistive technology, using the recorded environment, page-by-page result matrix, checks, and passing rule in
ACCESSIBILITY-REVIEW.md. No Chromium, Chrome, or Firefox executable was available on this host.
An October 20 supplemental w3m 0.5.3 pass returned zero for the 13 current sample pages at both 40 and 120 columns, and all 26 linearized views began with “Skip to content.” This is no-style text-order evidence, not graphical focus, responsive layout, or screen-reader evidence.
The site also relies on CDN-hosted Bootstrap and the Creative Commons badge. Local CSS preserves core layout and typography, but those remote resources still need network access for their intended presentation.
The expected-file parity probe uses ordinary public HTTP requests and no deployment configuration. It found all 109 files byte-identical before the September 15 release, all 110 byte-identical after it, and every later incoming tree byte-identical, including all 182 files before the September 26 revision, all 249 files before the September 29 revision, all 257 files before the September 30 revision, and all 267 files before the October 1 revision. The October 7 comparison established all 293 incoming files as byte-identical: 291 unchanged worktree files matched directly, while the production digests for the two already-edited public pages matched their clean incoming HEAD versions. The October 8 through October 20 pre-change probes each found all 295 incoming files byte-identical. Public HTTP cannot enumerate remote-only files. That gap is covered by the deployment component’s recursive checksum dry run with deletion reporting: the runner writes its completion marker only after this phase returns with no difference. The September 15 completion marker therefore supplies host-side success evidence; mocked success, drift, command-failure, missing-command, port, and path-safety checks remain regression coverage. Normal post-iteration deployment must publish and inventory the revised release.
1.9 Remaining work
No automated promise group currently fails. All four Published Projects have the three required report forms. Predict the Self has a two-chapter Quarto build, exactly one dense Executive Summary figure, a linked two-column short PDF within the ten-page ceiling, reciprocal report links, guarded publishing, and the required Full Report phrase. Ipseity Daily Pulse returned to Published status with a one-chapter Quarto book, one-figure Executive Summary, linked short PDF, and its own publication verifier; the metadata-derived catalogs and review sample incorporated it without a special-case v1 change.
The approved dialog migration is complete. The DIALOG-MIGRATION.md records the PI-owned runner trigger, all-Project migration sequence, five legacy digests, Scholar-immutable iteration files, PI blockquote replies, the 20-entry landing index with complete yearly indexes, and the bounded history each Scholar reads. Superseded reports also no longer remain underspecified: the Git-backed policy and ledger entries preserve outgoing material releases without duplicating generated trees in the live site.
The rendered-usability gate above now determines whether the charter’s definition of done is actually satisfied. Version 1 should not be declared complete merely because the verifier returns zero or the substantive review is recorded.
1.10 Reproduction
From the repository root:
python3 python/scholar_roster.py
python3 python/project_registry.py
python3 -m unittest discover -s projects/vcsserg-repo-v1/tests -v
XDG_CACHE_HOME=/tmp/vcsserg-v1-quarto-cache quarto render projects/vcsserg-repo-v1
python3 projects/vcsserg-repo-v1/analysis/publish_full_report.py
PYTHONPATH=/tmp/vcsserg-v1-publishing-deps \
python3 projects/vcsserg-repo-v1/analysis/render_short_report.py
PYTHONPATH=/tmp/vcsserg-v1-publishing-deps \
python3 projects/vcsserg-repo-v1/analysis/verify_publication.py
python3 projects/vcsserg-repo-v1/verify_v1.pyAfter deployment, run the separate public-network check:
python3 projects/vcsserg-repo-v1/analysis/check_production_parity.pyThe deployment itself also performs an authenticated remote-inventory and checksum dry run. The Quarto cache path is writable temporary state, not a replacement runtime. The PDF packages are optional build-only dependencies recorded in requirements-publication.txt; the deployed website remains static.
References
Quarto. (n.d.-a). Creating a book. Retrieved September 11, 2026, from https://quarto.org/docs/books/
Quarto. (n.d.-b). HTML accessibility checks. Retrieved September 11, 2026, from https://quarto.org/docs/output-formats/html-accessibility.html
WHATWG. (2026, October 9). HTML Standard: Media elements. https://html.spec.whatwg.org/multipage/media.html
WHATWG. (2026, October 7). HTML Standard: The autofocus attribute. https://html.spec.whatwg.org/multipage/interaction.html#the-autofocus-attribute
WHATWG. (2026, October 12). HTML Standard: Global attributes. https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute
WHATWG. (2026, October 14). HTML Standard: Specifying the document’s character encoding. https://html.spec.whatwg.org/multipage/semantics.html#charset
WHATWG. (2026, October 14). HTML Standard: The DOCTYPE. https://html.spec.whatwg.org/multipage/syntax.html#the-doctype
WHATWG. (2026, October 16). HTML Standard: Attributes. https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
WHATWG. (2026, October 16). HTML Standard: The base element. https://html.spec.whatwg.org/multipage/semantics.html#the-base-element
WHATWG. (2026, October 16). HTML Standard: The head element. https://html.spec.whatwg.org/multipage/semantics.html#the-head-element
World Wide Web Consortium. (2024, March 12). CSS Values and Units Module Level 4. https://www.w3.org/TR/css-values-4/#urls
World Wide Web Consortium. (2026, May 11). H39: Using caption elements to associate data table captions with data tables. https://www.w3.org/WAI/WCAG22/Techniques/html/H39
World Wide Web Consortium. (2023, June 6). Accessible Rich Internet Applications (WAI-ARIA) 1.2. https://www.w3.org/TR/wai-aria-1.2/
World Wide Web Consortium. (n.d.). Iframe element has non-empty accessible name [Proposed ACT rule]. Retrieved October 12, 2026, from https://www.w3.org/WAI/standards-guidelines/act/rules/cae760/proposed/
World Wide Web Consortium. (2026, January 12). H63: Using the scope attribute to associate header cells with data cells in data tables. https://www.w3.org/WAI/WCAG22/Techniques/html/H63
World Wide Web Consortium Web Accessibility Initiative. (2022, October 25). Meta viewport allows for zoom. W3C Accessibility Conformance Testing Rules. https://www.w3.org/WAI/standards-guidelines/act/rules/b4f0c3/
World Wide Web Consortium Web Accessibility Initiative. (2026a, March 9). Understanding Success Criterion 3.1.1: Language of Page. https://www.w3.org/WAI/WCAG22/Understanding/language-of-page.html
World Wide Web Consortium Web Accessibility Initiative. (2026b, March 9). Understanding Success Criterion 2.4.2: Page Titled. https://www.w3.org/WAI/WCAG22/Understanding/page-titled.html
World Wide Web Consortium Web Accessibility Initiative. (2026c, August 10). Understanding Success Criterion 2.2.1: Timing Adjustable. https://www.w3.org/WAI/WCAG22/Understanding/timing-adjustable
World Wide Web Consortium Web Accessibility Initiative. (n.d.-a). Developing a keyboard interface. Retrieved October 3, 2026, from https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/
World Wide Web Consortium Web Accessibility Initiative. (n.d.-b). Headings. Retrieved September 30, 2026, from https://www.w3.org/WAI/tutorials/page-structure/headings/
World Wide Web Consortium Web Accessibility Initiative. (n.d.-c). Landmark regions. Retrieved October 8, 2026, from https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/
World Wide Web Consortium Web Accessibility Initiative. (n.d.-d). Understanding Success Criterion 1.4.2: Audio Control. Retrieved October 10, 2026, from https://www.w3.org/WAI/WCAG22/Understanding/audio-control.html
