Skip to content

v2.0.0

Choose a tag to compare

@cyberash-dev cyberash-dev released this 05 Aug 19:40
· 2 commits to main since this release

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. A build or facts
    run below the declared floor is refused with exit 7 before anything is read
    beyond the configuration; a build that 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, spells npm i -g project-map-cli@latest in full, and names
    lowering the floor as the deliberate alternative.

Removed

  • The generation-metadata section. ## Generation metadata and the
    metadata section id are gone. A configuration naming metadata under
    sections, or passing it to --only, now exits 5. Drop the line.
  • The detection-coverage section. ## Detection coverage and the
    detection_coverage section id are gone the same way. The measures and the
    aggregated diagnostics stay in the facts artifact under coverage and
    diagnostics, which is where a program already read them; --strict against
    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> and Coverage: <n> files scanned (<m> excluded). are
    replaced by the constant Generated 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 Files column of the bounded
    contexts table and the Referenced 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, so Fields (8): reported nothing the page did not, and it
    moved on every field added or removed. project-map.json still 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
    own storage.last_n.
  • The Resolution column of both detection tables. ## HTTP endpoints
    heads Method, Route, Provenance, Contracts; ## External dependencies heads
    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 reads unknown(<reason>), and the reason names why.
    Every fact in the artifact still carries resolution.

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 --check compares 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.
  • init writes the section list without metadata. No default list
    ever named detection_coverage, so nothing else changes there.
  • analysis_unit_digest covers what the analysis unit declares. It folded
    a hash of the whole configuration document; it now covers the detect,
    openapi and analysis_unit sections alone, which is what the contract
    always said. Every value of it changes once, so build --check reports drift
    on facts.json until it is rebuilt and committed. No fact, diagnostic or
    coverage measure changes value. Editing a key only the document reads,
    entities.top_n or sections, no longer dirties the artifact.
  • init writes min_tool_version with 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 named yandex_pay_plus opened the
    document as yandex\_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.