Skip to content

Releases: lvcas-dotcom/pgfathom

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 00:07

Minor rather than patch: audit gained a class of finding it did not have, and
discovery raises and confirms relationships this tool used to drop. A release
that changes what comes back from a run should not arrive numbered as if
nothing had.

Added

  • pgfathom audit reports structural inefficiency, not just missing
    integrity: tables with no primary key, and hot columns with no index behind
    them. Where a table has no declared key, it probes candidate column sets
    against the data and reports one as promotable only when a full scan proves
    every row distinct and non-null — never on the strength of a name.

  • Lexical similarity raises candidates the shipped profile cannot reach.
    When no naming convention resolves a column, it is compared against table
    names by trigram similarity, the same coefficient pg_trgm uses. It recovers
    relationships like idkey_operador → operadorbasecalculo, where the name is
    reordered and abbreviated. The signal is deliberately weaker than a profile
    match, because lexical proximity carries no stated convention behind it.

    Measured against the public corpus, it is decisive exactly where nothing else
    reaches: on a Portuguese-named schema with every key removed, recovery goes
    from 1.8% to 16.6%. On GitLab, which writes _id and needs no help
    reading its own names, it adds half a point. It costs 5% more candidates on
    GitLab and 18% on Discourse — each one a validation query against your
    database, which is why the number is published here.

  • The detection section no longer prints a heading with nothing under it.
    A new dimension — the name a schema gives its primary keys — was added to the
    model and counted as evidence, but the terminal report did not know how to
    print it. A schema whose only detected convention was that one got a section
    announcing conventions and naming none.

Fixed

  • The most ordinary foreign keys in an English schema are no longer discarded
    unseen.
    A domain table — categories, statuses, types — carries a
    penalty so that dozens of uninteresting-but-real relationships do not bury the
    findings that justify the tool. That penalty was reaching the score threshold,
    which is a different thing entirely: category_id → categories scored 0.65,
    took the -0.30, landed at 0.35 under a threshold of 0.50, and was dropped
    before validation ever ran. The relationship the data would have confirmed at
    100% containment was never looked at, and the report named a count with no
    relation beside it.

    The penalty now ranks and never cuts on its own: the threshold sees the score
    without it, and the reported score still carries it, so the ordering it exists
    for is unchanged. Every other negative signal still cuts — an ambiguous target
    means the tool does not know which table is meant, which is exactly what a
    confidence threshold is for. A candidate already below the threshold on its
    other signals is still discarded, with its reason.

    It bit hardest where the table name is plural and the name match is therefore
    normalized rather than exact, which is every Rails and Django schema. Measured
    against a real server, an English schema goes from 4 confirmed to 5. The cost
    is one validation query per real domain key. The public corpus cannot measure
    this either way: it is DDL without a single row, so the penalty, which needs a
    row estimate, is never emitted there at all.

  • The benchmark report says which corpus schemas it could not measure. The
    manifest promises that an absent local dump is stated rather than omitted; the
    statement went to the test log, which the published document does not carry.
    Regenerating docs/benchmark/recall.md on a machine without the optional dump
    silently deleted that schema's section, and the result read as a complete
    corpus rather than a partly measured one.

  • The integration suite no longer fails on Windows. One assertion required
    every pipeline stage to report a strictly positive duration. Naming detection
    is in-memory work over a catalog already read — the published cost table
    prints it as 0s even on Linux — and Go's monotonic clock on Windows is
    coarser than that, so it measured exactly zero and the suite went red on a
    clean clone. Durations are now allowed to be zero and rejected only if
    negative; a stage that drops out is caught by the exhaustive stage list, which
    is what was actually guarding against it.

Changed

  • The lexical fallback no longer extracts a table's trigrams once per column in
    the database. On a 1,000-table schema the generation stage drops from 17.4s to
    2.5s and from 16 GB of allocation to 11 MB.

Documentation

  • The README said the binary carried four dependencies. It carries six direct
    ones and links twenty-five modules at 11 MB — the interactive setup guide
    arrived in between, and the sentence did not. The cost is now stated with the
    reason it was accepted, which is the argument the reader opening go.mod is
    actually looking for.
  • The README now says that the shipped profile default is pt-br, and what
    passing --profile en buys an English schema. Every run already printed the
    profile it used; nothing said which one you would get.
  • The status badge tracked a hand-written "pre-release" through three releases.
    It now reads the latest release from GitHub, so it cannot go stale again.
  • "Weak and rejected are reported too" was true of weak and half-true of
    rejected: discards are counted on every run, and named by --include-rejected.
    The sentence now says so.

Verifying what you downloaded

These artifacts are not signed. What exists is checksums.txt, published
alongside them: check your download against it before running it.

Recall measured against the public corpus is in docs/benchmark/recall.md,
including what each number measures and what it does not.

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 13 Aug 14:24
3c2b900

Fixed

  • --out no longer writes SQL silently. The manifest — what was written,
    where, and the reminder to read it before running it — appeared only when the
    output format was SQL. The ordinary run, a report on screen and --out for
    the files, left generated SQL on disk with no mention of it. It now appears in
    every format, and goes to stderr under --format json so the document on
    stdout stays parseable.
  • Counts of one read as English: "1 table and 1 declared key", not "1 tables and
    1 declared keys".

Changed

  • The composite pass of inference no longer derives the same target's name forms
    once per table in the database, or allocates a map for every pair of tables.
    On a 5,000-table schema it is 35% faster and allocates 62% less.
  • The example in the README is now a real run against a demo schema published in
    docs/DEMO.md, which reproduces it exactly. It used to be a mockup of output
    the tool does not produce.
  • The README says plainly which measurements are the published ones. It carried a
    promise to remeasure the early figures "before any of it is published as a
    release number" — composite support has shipped and release numbers have been
    published since, from the public corpus, which is what that sentence was
    waiting for.

Verifying what you downloaded

These artifacts are not signed. What exists is checksums.txt, published
alongside them: check your download against it before running it.

Recall measured against the public corpus is in docs/benchmark/recall.md,
including what each number measures and what it does not.

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 12 Aug 19:39
f587521

Changelog

  • e530e27 Merge pull request #19 from lvcas-dotcom/feat/duas-regimes-de-medicao
  • d82652f Merge pull request #20 from lvcas-dotcom/feat/pacotes-linux
  • a3e185f Merge pull request #21 from lvcas-dotcom/feat/progresso-ao-vivo
  • ebe5d64 Merge pull request #23 from lvcas-dotcom/feat/guia-de-primeira-execucao
  • 6d93e4e Merge pull request #24 from lvcas-dotcom/feat/identidade-visual
  • f587521 Merge pull request #25 from lvcas-dotcom/chore/arquiva-identidade-visual
  • ace9a9d feat: .deb e .rpm no release, com autocompletar de shell
  • 9cfca81 feat: a CLI ganha a identidade visual do projeto
  • 2bcc6bf feat: duas regimes de medição, e o número que faltava ao projeto
  • 9e85712 feat: pgfathom setup, o guia da primeira execução
  • d36dc4e feat: progresso ao vivo, sem dependência nova
  • c95fc90 fix: a lista cabe no terminal, e o enter escolhe o que está sob o cursor

Verificação

Os artefatos não são assinados. O que existe é checksums.txt, publicado
junto: confira o binário baixado contra ele antes de executar.

Recall medido no corpus público em docs/benchmark/recall.md, com o que
cada número mede e o que ele não mede.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 14:39
382e12d

Changelog

  • 382e12d Merge pull request #18 from lvcas-dotcom/fix/versao-vem-do-ref
  • e11a774 fix: a versão do release vem do ref, não de git describe

Verificação

Os artefatos não são assinados. O que existe é checksums.txt, publicado
junto: confira o binário baixado contra ele antes de executar.

Recall medido no corpus público em docs/benchmark/recall.md, com o que
cada número mede e o que ele não mede.

v0.1.0-rc.2

v0.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 14:11
53fed90

Changelog

  • fb4ddbd Merge pull request #15 from lvcas-dotcom/fix/pendencias-pre-fase-8
  • 68116b5 Merge pull request #16 from lvcas-dotcom/fix/pendencias-pre-fase-8
  • 53fed90 Merge pull request #17 from lvcas-dotcom/fix/imagem-multiplataforma
  • 1d73a84 fix: Dockerfile copia do subdiretório de plataforma, e passa a ter verificação

Verificação

Os artefatos não são assinados. O que existe é checksums.txt, publicado
junto: confira o binário baixado contra ele antes de executar.

Recall medido no corpus público em docs/benchmark/recall.md, com o que
cada número mede e o que ele não mede.