Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

I2847 — every file the site generator reads by a literal path is one of its declared inputs

scripts/generate-site-data declares among its inputs every file it reads by a literal \"$ROOT/...\" path: the programs it sources or runs (lib/*.sh, lib/*.awk, scripts/lib/*.jq, scripts/lib/*.awk, scripts/pages, itself), the hand-written pages under site/content-src, the workflow skeletons it counts, the Pages model, distribution.json and AGENTS.md. docs/generated/artifacts.json is read too but is not an input: derive's stage C rewrites it after this script runs, so hashing it would move the fingerprint on every derive (the order itself is I2864). Case 3246 refuses a literal read that the list does not cover.

PŘIPRAVENO vlna 0 · p1 · profil implementation · běží samostatně

Part of a-derive-does-only-the-work-its-inputs-changed — A derive does only the work its inputs changed, and can say why.

Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2847 bude přijato.

Cíl

scripts/generate-site-data declares among its inputs every file it reads by a literal \"$ROOT/...\" path: the programs it sources or runs (lib/*.sh, lib/*.awk, scripts/lib/*.jq, scripts/lib/*.awk, scripts/pages, itself), the hand-written pages under site/content-src, the workflow skeletons it counts, the Pages model, distribution.json and AGENTS.md. docs/generated/artifacts.json is read too but is not an input: derive's stage C rewrites it after this script runs, so hashing it would move the fingerprint on every derive (the order itself is I2864). Case 3246 refuses a literal read that the list does not cover.

Proč

Found on 2026-10-21 while measuring the derive for I2521. The input fingerprint that `scripts/pages current` compares was computed from a list that missed all of the files named above. Editing a hand-written page, a .jq projection or the Pages model left site/data/generated reading as current while it was stale. Only a full derive-check would catch it, and I2880 (skip stage B when the fingerprint matches) would have published the stale data. Agreed with a3, d3 (I0832) and 9c (I2880): 3e owns the INPUTS block, and I2880 waits for this.

Aktuální stav

The INPUTS list held 2093 entries and omitted the generator's own programs and several files it reads by literal path. Nothing checked the list against what the script reads.

Cílový stav

The INPUTS list covers every literal \"$ROOT/...\" read of the script. Case 3246 reads the script and refuses any such read, of a file or of every tracked file under a directory, that the list does not cover, unless it is an output the script writes or docs/generated/artifacts.json, which a later stage writes (I2864). Dropping a covered glob from the list is refused with the file named.

Rozsah

  • scripts/generate-site-data
  • test/cases/3246_every_file_the_site_generator_reads_is_an_input.sh
  • .ai/repo/project/issues/I2847.yaml

Mimo rozsah

  • Paths the script builds from a variable (\"$ROOT/$path\", \"$ROOT/docs/$p\") and what the tool reads when the script calls it. Judging those needs a file-access trace, which is I2521's observed-reads measurement.
  • Any other change to scripts/generate-site-data: d3's I0832 owns its repeated work and I2880 its skip; neither touches INPUTS.

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • Every literal \"$ROOT/...\" file read of scripts/generate-site-data is in its --inputs, or is one of its outputs
  • Every tracked file under a directory the script names by a literal path is in --inputs, unless the directory is an output
  • Removing scripts/lib/*.jq from the list makes case 3246 fail and name scripts/lib/cli-site.jq

Validace

  • bin/majordomus plan validate
  • bash test/run.sh 3246_every_file_the_site_generator_reads_is_an_input 10_site_data 56_derived_current_gate

Požadované důkazy

  • every_literal_read_is_an_input_case

Důkazy

Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.

Časová osa

zahájeno
—
ověřeno
—
dokončeno
—

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Canonical record: .ai/repo/project/issues/I2847.yaml. Read it back with majordomus plan show I2847.

Prohledává názvy a popisy všech stránek, které tento web publikuje.