v2.0.0
The document shrinks to what a rebuild does not change. Every field removed
below moved without any extracted fact moving, which made PROJECT_MAP.md
conflict on merge for reasons no reader cared about.
Surfaces: project-map/cli 2.0.0 · project-map/map-document 3.0.0 ·
project-map/detection-facts 2.0.0 · project-map/package 1.0.0.
Added
min_tool_version, a version floor with a ratchet. Abuildorfacts
run below the declared floor is refused with exit 7 before anything is read
beyond the configuration; abuildthat finishes at exit 0 raises the line to
its own<major>.<minor>.0, replacing the bytes of that value alone.
Adding the key to a repository is what stops installs that never receive this
release: the schema has rejected unknown top-level keys since v0.1.0, so every
published version refuses a configuration carrying it. See the README for the
deliberate costs.
The refusal names the remedy, not only the mismatch: it states that the tool
has to be updated, spellsnpm i -g project-map-cli@latestin full, and names
lowering the floor as the deliberate alternative.
Removed
- The generation-metadata section.
## Generation metadataand the
metadatasection id are gone. A configuration namingmetadataunder
sections, or passing it to--only, now exits 5. Drop the line. - The detection-coverage section.
## Detection coverageand the
detection_coveragesection id are gone the same way. The measures and the
aggregated diagnostics stay in the facts artifact undercoverageand
diagnostics, which is where a program already read them;--strictagainst
the unclassified baseline remains the way to fail a build on a new
unclassified site. - The generated header.
Generated by project-map v<version> on <timestamp> from revision <sha>andCoverage: <n> files scanned (<m> excluded).are
replaced by the constantGenerated by project-map. Do not edit by hand. - Line numbers in anchors. An entity, enum, table or worker names the file
that declares it, without:<line>. - Counts a collection is ranked on. The
Filescolumn of the bounded
contexts table and theReferenced from N module(s)bullet of an entity are
gone; the row order still reports the same magnitude. - The field count on the
Fields:label. The bullets under it are the
same list in full, soFields (8):reported nothing the page did not, and it
moved on every field added or removed.project-map.jsonstill carries the
array. - The count on the migrations heading.
### Migrations (last 5)becomes
### Recent migrations. That the list is a tail is information the rows do
not carry, so the heading keeps saying it; the number is the row count, which
the table already gives, and it moved whenever a repository crossed below its
ownstorage.last_n. - The
Resolutioncolumn of both detection tables.## HTTP endpoints
heads Method, Route, Provenance, Contracts;## External dependenciesheads
Owner, Method, Route, Destination. In the document the column restated the
cells beside it — a row the analyzer did not prove is the row whose method,
route or destination readsunknown(<reason>), and the reason names why.
Every fact in the artifact still carriesresolution.
Everything removed stays where a program reads it: project-map.json
(output.json) carries metadata, source.line, fileCount and
referencedFrom unchanged, and the facts artifact carries coverage,
diagnostics and resolution.
Changed
build --checkcompares byte for byte. With no non-reproducible field
left in the document, nothing is normalized away first. A document differing
only in whitespace is now out of date.- An extractor failure renders under
## Extraction errors, one bullet per
failure, immediately after the lead paragraph. The heading is not a section
id: no configuration turns it off, and it is absent when nothing failed. initwrites the section list withoutmetadata. No default list
ever nameddetection_coverage, so nothing else changes there.analysis_unit_digestcovers what the analysis unit declares. It folded
a hash of the whole configuration document; it now covers thedetect,
openapiandanalysis_unitsections alone, which is what the contract
always said. Every value of it changes once, sobuild --checkreports drift
onfacts.jsonuntil it is rebuilt and committed. No fact, diagnostic or
coverage measure changes value. Editing a key only the document reads,
entities.top_norsections, no longer dirties the artifact.initwritesmin_tool_versionwith the comment explaining it.- A value read out of the source renders as inline code everywhere.
Previously only the two detection sections did, and every other position
went through prose escaping: a project namedyandex_pay_plusopened the
document asyandex\_pay\_plus, and the same happened to a bounded-context
path, a table, a model, a revision, a migration summary and a worker topic.
The H1 is now# Project Map: `<name>`. A consumer matching
^# Project Map:still matches; one that unescaped\_stops needing to.
Migration
Drop - metadata and - detection_coverage from sections in
.project-map.yaml, then rebuild and commit PROJECT_MAP.md. A consumer that
parsed the tool version, the timestamp, <file>:<line>, a field count or a
resolution out of the markdown reads them from project-map.json and
<output.facts> instead, and one that matched a name against its escaped
spelling matches the declared spelling now.