Skip to content

v2.5.1

Choose a tag to compare

@github-actions github-actions released this 21 Aug 16:35
· 8 commits to main since this release

The disclosure screen's category words have changed, and the old ones are
refused.
If any .fettler.json or .fettler.local.json on your machine
names phi, pii or sci in a screen, it will stop working when you
install this release. Two of the three new words are a straight rename; one
of them splits in two.

Was Write instead
pii identifiers
sci scientific
phi identifiers for the labelled patterns, clinical for model screening of clinical text — it was doing duty for both

The old words are refused rather than translated, when the configuration
is read, with a message naming the replacement:

'phi' is no longer a screening category; the labelled identifier patterns are
'identifiers', and clinical-model screening is 'clinical'

Translating them silently would have kept them alive in configurations
indefinitely, still promising what they always over-promised — which is the
whole reason for the change.

Why the words changed

phi and pii claimed more than the screen delivers. A category called
phi reads as "protected health information is covered here". What its
pattern tier actually found was a record number under an MRN: label and a
date under a DOB: label. Patient names, addresses, conditions and the
clinical prose around them were never matched by anything unless you had
installed a model — and nothing said so.

The honest sentence, which the documentation now leads with: out of the
box the screen catches structured identifiers — a social security number,
a Luhn-valid card, a formatted phone number, an email address, a labelled
record number and a labelled date of birth. Names, addresses, conditions and
free text are caught only by a model you install, and the manifest plus
roots name exactly which model that is.

The new words say which is which. identifiers is the pattern tier and
takes no model, ever. clinical, legal and scientific are model tiers
and screen nothing at all until you install one.

Added

  • fettle roots names the model doing the judging, and never hides it.
    Where a grant screens a model-backed category, roots now reports that
    category on its own line: the checkpoint and revision read from the
    model's manifest.json, or no model installed - reads here will refuse
    where the directory holds none.

    records       /work/records
                  can: list read
                  screen: identifiers clinical
                    clinical: obi/deid_roberta_i2b2 @ a1b2c3d
    

    With no "models" directory declared at all, one line says so rather than
    letting the category words imply a protection that is not running:

    no "models" directory is declared, so clinical, legal, scientific screen
    nothing here - only the identifier patterns run
    

    The JSON answer carries the same facts under screening, because the MCP
    front end never sees the text one — and that is the front end where a
    model is the thing reading the answer. Manifest reading is read-only and
    tolerant: an unreadable or incomplete manifest reports as no model rather
    than taking the whole answer away, since roots is very often the call
    somebody makes because something is already wrong.

  • scripts/shoddy-branch.* replaces scripts/shoddy-feature.*, and adds
    a bug verb.
    bug NAMENN cuts bug/<origin-feature>NN off an
    up-to-date main, so a fix carries the name of the feature it belongs to
    and its number: bug/pudsey01 is the first fix to work that shipped from
    feature/pudsey. The two digits are not optional — bug/pudsey refuses.
    ship runs from feature/* and bug/* alike and merges each the same
    way. The script was renamed because feature was never the only thing it
    cut.

Changed

  • A pattern-only screen never starts the sidecar. A scope screening
    identifiers and nothing else has no question to put to a model, so
    burler is not consulted, not started, and its absence is not a refusal.
    Previously the category words made this hard to reason about; now it
    follows from them. A tree screening only identifiers never needs a
    models directory at all.

  • Every pattern finding reports as identifiers. A refusal that used to
    read 2 in phi now reads 2 in identifiers. The count and the category
    are still all it says — never the text it found.

  • The documentation says what the screen catches, rather than implying
    more.
    Screening
    gains a column naming the model family behind each category and stating
    that the manifest and roots name the exact checkpoint; the
    four-categories tables, the worked roots output, the refusal examples
    and every configuration snippet carry the new words. The claim that the
    first tier "already carries most of" the personal-identifier category is
    gone — it was the clearest form of the over-promise.

  • The workstation diagram draws all eleven denied built-ins. Monitor,
    BashOutput and TaskOutput were added to the deny list in v2.5.0 and
    never drawn. Monitor is a shell — it runs what it is handed in the same
    environment Bash does — and the two output readers start nothing and
    write nothing but hand back the output of work already done, bytes that
    reached the model without passing the tree boundary, the secret scan or
    the disclosure screen. The figure's aria-label names them too.

Fixed

  • A worked example on the screening page tripped the screen it
    documents.
    The page carried a literal labelled date of birth as sample
    text, so the date-of-birth detector matched it and any screened tool
    reading the page was refused — the documentation for the feature was
    unreadable to anything the feature was switched on for. The example now
    describes the shape instead of spelling it.