Skip to content

redact() cannot reach notifications.ntfy.url by name — the key is the bare word 'url' and only nesting separates it; both pins name a closed issue #1630

Description

@VijitSingh97

redact() leaves notifications.ntfy.url — a capability URL — in a captured bundle's verbatim
config.json. The suite states the gap in two places and both point at a closed issue, so after
#1626 closes there is nothing open tracking it.

The gap

The ntfy topic in the URL path is the whole credential: anyone holding a captured bundle can publish
to, and subscribe to, the operator's notification channel.

config.reference.json:167    "notifications": {
config.reference.json:169      "ntfy": {
config.reference.json:170        "url": "",

The JSON key is the bare word url, and only its NESTING separates it from its siblings at
config.reference.json:56 and :67. redact()'s JSON rule is line-wise and cannot see nesting, so
there is no name it can key on that reaches this value and not the two public endpoints.

What is already settled, so nobody re-derives it

The tracking defect this issue exists to fix

tests/integration/selftest-redact.sh pins the gap at two sites — the MUST_SURVIVE/KNOWN_GAP
assertion and its it_warn — and both name #1587, which is CLOSED. lib.sh:37 also references it.
Pre-existing: 5 occurrences at base and 5 at head of #1627, so no recent change introduced it.

Next time these files are touched, the pins should name this issue. Not worth a commit of its own;
worth not losing.

What a fix would have to do

A name-keyed line-wise rule cannot express this. Any real fix changes the shape of the rule — parse
the JSON and redact by path, or redact by value shape for URLs carrying a path segment that is not a
known-public host. That is a redaction policy change, which is the same ruling #1623 deferred when it
declined to invert the .env rule to an allowlist. The two should be decided together, and neither
should be taken as a lane decision.

Until then the pin is the right holding pattern: it asserts the current behaviour, so it fails loudly
if someone closes the gap without updating it.

Provenance

Measured by the controller during the non-author passes on #1623 and #1627. Population of 129
independently re-derived from render_env's single heredoc. Full method is in the verdict comments on
those two PRs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions