@@ -263,10 +263,11 @@ module and imports), not a lowercase rename.
263263
264264Generated workflows pin ` --autoform-ref ` or, by default, the HEAD commit of the
265265Autoform checkout running the command (or of the marketplace checkout an
266- installed plugin was copied from), when a safe remote has a cached tracking ref
267- containing it, tracked files are clean, and the templates match it; an explicit
268- ` --autoform-source ` gets no default ref. Without a ref the CI workflows are
269- omitted.
266+ installed plugin was copied from), when a safe remote (Autoform's canonical
267+ repository, then ` origin ` , then ` upstream ` , then a unique remaining one) has a
268+ cached tracking ref containing it, tracked files are clean, and the templates
269+ and any installed plugin copy match it; an explicit ` --autoform-source ` gets no
270+ default ref. Without a ref the CI workflows are omitted.
270271
271272### project
272273
@@ -286,13 +287,15 @@ manifest, blueprint, and site) in a private sibling directory and publishes it
286287atomically: the target must be absent, nothing is overwritten, and a failed or
287288concurrent creation leaves no partial target. A failure or interrupt after
288289staging can leave a hidden ` .autoform-new-* ` directory in the parent, which the
289- error mentions; inspect it before removing it. Its ` lakefile.toml ` sets
290- ` enableArtifactCache = true ` and ` restoreAllArtifacts = true ` , so checkouts on
291- the same toolchain share builds through Lake's artifact cache while each
292- module's ` .olean ` stays in ` .lake/build ` . Package names cannot shadow Mathlib
293- libraries such as ` Archive ` or ` Counterexamples ` . Workflows are pinned as
294- [ ` init ` ] ( #init ) pins them. Apart from local Git reads, the command runs no
295- subprocesses, Lake, Lean, or network operations. Its errors name a code:
290+ error mentions; inspect it before removing it. The published tree has modes
291+ 0755 for directories and executables and 0644 for other files, whatever the
292+ umask. Its ` lakefile.toml ` sets ` enableArtifactCache = true ` and
293+ ` restoreAllArtifacts = true ` , so checkouts on the same toolchain share builds
294+ through Lake's artifact cache while each module's ` .olean ` stays in
295+ ` .lake/build ` . Package names cannot shadow Mathlib libraries such as ` Archive `
296+ or ` Counterexamples ` . Workflows are pinned as [ ` init ` ] ( #init ) pins them. Apart
297+ from local Git reads, the command runs no subprocesses, Lake, Lean, or network
298+ operations. Its errors name a code:
296299
297300- ` project-parent-inaccessible ` or ` project-path-is-symlink ` : the parent and
298301 its ancestors must be readable real directories, not links; on macOS, use
@@ -419,7 +422,10 @@ in an implementation note, a page under `blueprint/sources/` or one a
419422component. Declarations citing a source only through their module docstring
420423share one warning, silenced by naming the module, or in full a citing
421424declaration; importing the module names it, importing only an umbrella module
422- above it does not. Reuse such a declaration and name it in the note of each
425+ above it does not. A module catalog, or a container whose scope is all proved,
426+ reaches nothing; a bare number cites nothing; and a last-component match counts
427+ any identifier, comments and strings included, so a generic one such as ` symm `
428+ can hide the warning. Reuse such a declaration and name it in the note of each
423429article using it; when it does not apply, name it on the source's page under
424430` blueprint/sources/ ` with why, which outlasts the notes.
425431
@@ -468,10 +474,11 @@ every catalog below it.
468474The contract is read as published Markdown and fails closed; ` coverage.py `
469475gives the edge cases:
470476
471- - A table in an HTML comment, a code block, or under a ` hidden ` attribute is not
472- the contract. A table that does not publish, such as one a paragraph runs
473- into, is rejected, and a published one the audit does not recognise, such as
474- one without outer pipes, is named.
477+ - A table in an HTML comment or a code block is not the contract, nor is a
478+ table, row, or cell under its own or an ancestor's ` hidden ` attribute; CSS,
479+ such as a class or ` display: none ` , hides nothing. A table that does not
480+ publish, such as one a paragraph runs into, is rejected, and a published one
481+ the audit does not recognise, such as one without outer pipes, is named.
475482- A comment or code block between rows is reported, with the rows stranded
476483 below it, rather than truncating the contract. A row holding an unclosed
477484 ` <style> ` , or evidence with a raw ` <table> ` , is refused.
@@ -525,12 +532,12 @@ whose definitions are the trusted base and are not expanded.
525532This is the one command that runs Lean: for each module that declares a
526533selected target it runs a probe with ` lake env lean ` against the built project,
527534so a packet reads as it does to a file importing that module, without the
528- declaration's local notation, ` open ` , or ` set_option ` . Lake must first confirm,
529- without rebuilding, that every probed module is fresh: a missing
530- ` lake-manifest.json ` , stale artifacts, or a source tree that changes during
531- extraction fails the command, and since the check rewrites Lake's ` .hash ` files,
532- ` .lake ` must be writable. The helper module ` autoform-skeleton-helper ` and its
533- ` AutoformSkeleton ` namespace are reserved; a module that takes one, on
535+ declaration's local notation, local instances, ` open ` , or ` set_option ` . Lake
536+ must first confirm, without rebuilding, that every probed module is fresh: a
537+ missing ` lake-manifest.json ` , stale artifacts, or a source tree that changes
538+ during extraction fails the command, and since the check rewrites Lake's ` .hash `
539+ files, ` .lake ` must be writable. The helper module ` autoform-skeleton-helper `
540+ and its ` AutoformSkeleton ` namespace are reserved; a module that takes one, on
534541` LEAN_PATH ` or not, breaks the probes that import it.
535542
536543A ` partial def ` in a trusted closure is refused, and so is a declaration with
@@ -580,19 +587,20 @@ its value), and the source of every project definition the statement rests on,
580587with comments and docstrings removed. Source that may hide a comment the probe
581588cannot find, such as a body using ` local notation ` , is withheld, as is an
582589equation-style statement that cannot be parsed outside its file; both are
583- marked ` -- source not shown ` , and the article stays resolved. Source text is
584- not notation-proof; only the kernel material is.
590+ marked ` -- source not shown ` , and the article stays resolved. A ` local ` token,
591+ or a token the file had in scope differently from the probe, can make the probe
592+ show code as a comment or a comment as code. Source text is not notation-proof;
593+ only the kernel material is.
585594
586- A ` ## Sources ` link to a non-Markdown file inside the blueprint with a
587- ` #L<start>-L<end> ` fragment, such as
595+ A local ` ## Sources ` link with a ` #L<start>-L<end> ` fragment, such as
588596` ../../../sources/lebl-ra/ch-real-nums.tex#L693-L714 ` , is a locator naming the
589- statement's source passage; the same link to a Markdown file is a note. A first
590- local locator that names no readable, regular, UTF-8 lines inside the
591- blueprint leaves its article's declarations unresolved. ` --passages DIR ` , which
592- requires ` --packets ` , writes each article's passage to its own managed
593- directory beside ` article.lean ` , the joint packet of the article's
594- declarations: a faithfulness judge gets the article packet and passage, an
595- auditor of one declaration only its packet.
597+ statement's source passage, unless it names an existing regular Markdown file
598+ in the blueprint, which is a note. A first local locator that names no
599+ readable, regular, UTF-8 lines inside the blueprint leaves its article's
600+ declarations unresolved. ` --passages DIR ` , which requires ` --packets ` , writes
601+ each article's passage to its own managed directory beside ` article.lean ` , the
602+ joint packet of the article's declarations: a faithfulness judge gets the
603+ article packet and passage, an auditor of one declaration only its packet.
596604
597605#### Skeleton hashes
598606
@@ -755,7 +763,8 @@ article recording `statement: retracted` is a revision: JSON `revision` is true,
755763and the text adds a ` revision: ` (list) or ` Revision: ` (context) line saying to
756764start from ` autoform work impact ` (see the [ revision
757765contract] ( reference/claims-and-revisions.md#revision-contract ) ). Both commands
758- are read-only.
766+ are read-only, and refuse an article whose bytes changed after the graph loaded;
767+ rerun once the project is idle.
759768
760769Under the open policy the text of ` work list ` starts with an `Open statements:
761770allowed` line and adds an ` assumes:` line under each item resting on open
@@ -778,9 +787,11 @@ assumes open statements. `--json` writes the `autoform-assumptions/v1` contract
778787CI audits the build against: every article whose ` lean: ` names a declaration,
779788with ` open ` , ` assumes ` , and ` allowed_open_declarations ` (the open declarations
780789its Lean may reach, plus its own when it is open). A ` mathlib: true ` article
781- (state ` mathlib ` ) and a module catalog are never open and are allowed nothing,
782- nor is any article under the strict policy; CI checks that every listed name
783- exists. It reads Markdown only and needs no Lean build.
790+ (state ` mathlib ` ) is never open and is allowed nothing, nor is any article under
791+ the strict policy. A module catalog is never open; under the open policy, one
792+ that is not proved keeps only the names no non-catalog article's ` lean: ` lists,
793+ and is left out when none remain. CI checks that every listed name exists. It
794+ reads Markdown only and needs no Lean build.
784795
785796#### work impact
786797
@@ -1022,9 +1033,12 @@ to the bundled viewer, and their schemas may change. Every generated site
10221033projection uses the same JSON-derived explorer. A formal statement links to the
10231034smallest scope holding it, as ` <scope>.html#node=<id> ` ; only a legacy
10241035` dependencies/full.html#node=<id> ` link redirects. A ` lean: ` declaration that
1025- resolves to a repository permalink gets a source link. The explorer shows a
1026- title as typed, and render percent-encodes each link it writes from file and
1027- folder names, so no name can make a ` javascript: ` URL.
1036+ resolves to a repository permalink gets a source link; a catalog's Lean row
1037+ shows its first eight names and counts the rest. The explorer shows a title as
1038+ typed, and render percent-encodes each link it writes from file and folder
1039+ names, such as the book's previous and next links, while a Markdown link it
1040+ moves keeps its decoded spelling and starts with ` ./ ` when its first segment
1041+ holds a colon, so no name can make a ` javascript: ` URL.
10281042
10291043Render writes no Mermaid graph of its own. Authored Mermaid remains supported in
10301044the vault and book, drawn in strict mode with plain-text labels and loaded only
0 commit comments