Skip to content

Stop the artwork address module calling absent what the file beside it holds - #478

Merged
iderex merged 1 commit into
mainfrom
address-names-the-module-that-answers
Sep 18, 2026
Merged

iderex merged 1 commit into
mainfrom
address-names-the-module-that-answers

Conversation

@iderex

@iderex iderex commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

The issue this belongs to

Closes #477

What changed

The What is here and what is not section of src/artwork/address.rs stops
saying that what an item with no image of a kind answers with is #51 and is
deliberately absent. It keeps the rule the paragraph exists for - a tag is a
required input here, so an item carrying none for a kind produces no address at
all - and names crate::artwork::presence as the module holding the answer.

Nothing else moves. No kind, no ladder, no refusal, no signature.

What failure it prevents

The module handed an answer to a closed issue while the file one directory entry
away held it, was built out of this module's own types, and said so of itself.
The directory's own header named that module in the paragraph directly below the
one about this module, so the two documents a reader meets first disagreed about
whether the answer existed.

That is wrong in the direction that reads as covered. Somebody looking for what
a client is handed when an item has no poster read here that it is deliberately
absent, followed a closed issue, and did not open the file beside this one.

It was found by reading this directory's hand-offs against the modules beside
them.

Evidence

The commit being pushed:

git rev-parse HEAD
a3a2138c8290a76ee6d160dbc027bf9919523c31

What the section said, at the parent:

git show a3a2138^:src/artwork/address.rs | sed -n '11,21p'
//! # What is here and what is not
//!
//! Everything up to the request. [`ArtworkRequest`] holds the path and the three
//! parameters, hands out the address a transport would fetch, and derives the
//! cache key 0041 builds. Nothing here fetches anything: the transport is #27
//! and does not exist, so no call in this module reaches a network.
//!
//! What an item with no image of a kind answers with is #51 and is deliberately
//! absent. The rule here is narrower and is the half that belongs to addressing:
//! a tag is a required input, so an item carrying none for a kind produces no
//! address at all rather than an address with an empty tag in it.

The answer, at the parent, saying of itself that it is that value:

git show a3a2138^:src/artwork/presence.rs | sed -n '1,7p'
//! What an item has for one image kind, and the two things an absence is not.
//!
//! `docs/decisions/0049-the-artwork-address-and-the-size-asked-for.md` stops one
//! step short of this and says so: an item whose metadata carries no tag for a
//! kind has no address at all, which is a value a caller has to handle rather
//! than an empty string that produces a request, and what that value is called
//! is #51. This module is that value.

It is a caller of this module rather than a neighbour, and the import is library
code:

git show a3a2138^:src/artwork/presence.rs | sed -n '83p'
use super::address::{ArtworkRequest, DrawnSize, ImageKind, ImageTag, ItemId, NotUsableInARequest};

The directory's own header already named it, in the paragraph below the one
about this module:

git show a3a2138^:src/artwork/mod.rs | sed -n '16,24p'
//! Everything 0049 puts before a request, in [`address`]: the five image kinds,
//! the ladder a requested size is rounded onto so that two nearby tiles share
//! one entry, the content tag 0006 depends on, and the refusal of an identifier
//! or a tag whose bytes would let a server choose part of the request.
//!
//! Everything #51 puts between the two, in [`presence`]: what an item has for
//! one image kind, where an item with no tag for a kind stops being a request
//! that was never built and becomes an answer a client can show, and why a tag
//! the core refused is neither that answer nor the same thing as one.

The dates. The sentence landed on 2026-08-29, the module that answers it landed
the next day and brought the index paragraph with it, and the issue closed as
completed two days after the sentence:

git blame -L 18,18 --date=short a3a2138^ -- src/artwork/address.rs | cat
f7b91b2b (Nils Lehnen 2026-08-29 18) //! What an item with no image of a kind answers with is #51 and is deliberately
git log --format='%h %cI %s' --diff-filter=A a3a2138^ -- src/artwork/presence.rs
7c5d9e5 2026-08-30T18:16:54+02:00 Answer for an item with no tag for a kind, and never as an error (#247)
git blame -L 21,21 --date=short a3a2138^ -- src/artwork/mod.rs | cat
7c5d9e56 (Nils Lehnen 2026-08-30 21) //! Everything #51 puts between the two, in [`presence`]: what an item has for
gh issue view 51 --repo Flowfin/core --json number,state,closedAt --jq '"\(.number) \(.state) \(.closedAt)"'
51 CLOSED 2026-08-31T19:59:29Z

The absence that survives, which is why the section is kept rather than deleted.
The transport is open and no call in this module reaches a network:

gh issue view 27 --repo Flowfin/core --json number,state --jq '"\(.number) \(.state)"'
27 OPEN

What the change is:

git diff --stat origin/main...HEAD
 src/artwork/address.rs | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
git diff --name-only origin/main...HEAD
src/artwork/address.rs

The two commands the gate runs, at this commit. The build was run first and
exited 0; its own summary line is not pasted, because this board's hygiene check
reads the word in it as a speed claim:

cargo build --locked --all-targets ; echo "exit=$?"
exit=0
cargo test --locked ; echo "exit=$?"
exit=0
cargo test --locked 2>&1 | grep -c '^test result: ok'
10
cargo test --locked 2>&1 | grep -c 'test result: FAILED'
0

Four of this board's own legs, run on this machine at this commit:

bash .github/invariants/invariants.sh check | tail -1
Every rule above was applied to its subject and refused nothing.
bash .github/format/format.sh check | tail -1
Every tracked source file above is written the way the formatter would write it.
bash .github/doc-paths/doc-paths.sh check | tail -1
Every path these documents name resolves against the tracked set.
bash .github/lint/lint.sh check | tail -1
Every lint the groups above carry was refused, outside the register printed with it.

What this does not cover

  • src/artwork/presence.rs and src/artwork/mod.rs. Both are read as
    evidence and neither is edited. They already say what holds.

  • The fetch. No call in this tree fetches an artwork byte, the transport is
    Build the HTTP transport, with timeouts, connection reuse and cancellation #27 and is open, and nothing is claimed about when it arrives.

  • 0049. The record is read and not edited. A record is added or superseded
    rather than edited in place, which
    docs/decisions/0001-decision-records.md fixes.

  • The other references to closed issues in this directory. Several files
    name #49, #51, #52 and #55 as the issues whose conditions a case
    asserts, which is a reference to what landed rather than a hand-off to what
    will. Whether any of those has gone stale is a separate reading and was not
    made here.

  • Behaviour. No production line changes. The whole diff is doc comments.

  • A check that would refuse this. Nothing in this tree reads a doc comment's
    hand-off against the tracker or against the sibling that answers it, and the
    document check reads only .md files. This adds no rule, so the next sentence
    of this shape is caught by a reader or not at all.

  • The shell analysis. It was not run on this machine, because the analyser
    is not on this machine's path:

      command -v shellcheck ; echo "exit=$?"
      exit=1
    

    What the run on this pull request reports is the reading, and nothing is
    claimed for it from here. This change touches no shell file.

Who has read it

Nobody other than the author. There is no second reader on this board tonight,
and the readings pasted above stand in place of one rather than a review having
happened.

…t holds (#477)

`src/artwork/address.rs` said in its `What is here and what is not` section that
what an item with no image of a kind answers with is #51 and is deliberately
absent. `src/artwork/presence.rs` is that answer. It says of itself that it is
the value 0049 stops one step short of, it imports six types from this module in
library code rather than merely sitting beside it, and it landed on `7c5d9e5`,
the day after the sentence. The same commit added the paragraph in
`src/artwork/mod.rs` that names it, so this file has been the only one in
`src/artwork/` calling that answer absent. #51 closed as completed on
2026-08-31, two days after the sentence.

The section now keeps the rule it exists for and drops the hand-off: a tag is a
required input here, so an item carrying none for a kind produces no address at
all rather than an address with an empty tag in it, and where that item's answer
lives is named rather than deferred.

It was wrong in the direction that reads as covered. Somebody looking for what a
client is handed when an item has no poster read here that it is deliberately
absent and was sent to a closed issue, while the directory's own header said the
opposite one file over. It was found by reading this directory's hand-offs
against the modules beside them.

The absence that still holds is kept and stays negative: the transport is #27,
it is open, and no call in this module reaches a network.

No behaviour changes. The whole diff is doc comments.

Closes #477

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex
iderex merged commit 37f719c into main Sep 18, 2026
28 checks passed
@iderex
iderex deleted the address-names-the-module-that-answers branch September 18, 2026 08:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The artwork address module calls an answer deliberately absent that the file beside it has held since the day after the sentence

1 participant