Chemenu 2.1.0 - deterministischer Wissenskompiler
CI / verify (push) Failing after 32s
Release / release (push) Successful in 38s

Chemenu kompiliert Rohnotizen zu einem verlinkten, quellengebundenen Wiki:
raw/ -> types/ + tools/ -> kb/ -> reports/. Was mechanisch ist, macht
tools/wikitool; was Urteil braucht, macht ein Agent unter Contracts, deren
Grenzen in Code durchgesetzt sind statt im Prompt.

Dieser Commit ist der Startpunkt der oeffentlichen Historie. Die vorherige
Entwicklung fand in einer privaten Instanz statt und ist nicht Teil dieses
Repositorys; ihre Erzaehlung steht vollstaendig in CHANGES.md, das mit 44
Eintraegen von 0.1.0 bis 2.1.0 erhalten geblieben ist.

Der mitgelieferte Korpus ist ein Testbett und eine Demo: 170 Seiten ueber den
Stack selbst - Gates, Lint, Versionierung, Suche, das Wiki-Muster. Er
dokumentiert das Werkzeug mit den eigenen Mitteln des Werkzeugs.

Lizenz: AGPL-3.0 fuer den Stack (tools/, types/), CC-BY-4.0 fuer die Inhalte.
Die Grenze zwischen beiden ist der Dateiplan, den dist export berechnet -
siehe NOTICE.
This commit is contained in:
2026-09-01 16:24:34 +02:00
commit 18ae28f918
368 changed files with 50628 additions and 0 deletions
@@ -0,0 +1,190 @@
# Conversation Transcript - Issue Triage, Labels and TODO Retirement Session
> Source: Claude Code session (`claude-opus-5`), llm-wiki-test1 workspace
> Collected: 2026-08-31
> Participant: Torben
> Fidelity: **faithful summary transcript, not a verbatim log.** Reconstructed by the assistant
> at the end of the session. Torben's instructions are quoted verbatim where they are short;
> the assistant's reasoning is condensed. Command outputs and issue titles quoted below are real.
> No credentials appeared in the session.
> One of three transcripts cut from the same session; the other two cover the tooling fixes for
> issues #12/#13, and the harness's `auto` permission mode.
Covers the prioritisation of the whole open issue board, the observation that closed issue #11,
and the decision to retire `TODO.md` in favour of Gitea issues carrying `prio/` and `size/`
labels. Resulting commit: `9fa70f3` (stack `1.2.1`). Issues #11 closed, #14 and #15 opened.
---
## Turn 1 - `/stack-dev` "lies alle offenen issues aus dem repo ... grob priorisiert"
Eleven open issues, all authored by Torben, none labelled. The assistant read every issue body
through the Gitea MCP server rather than working from titles, then measured the corpus (255 kb
pages, 65 raw files, 47 test files, stack at `1.1.1`) so the ranking rested on facts rather than
impressions.
Ranking criterion chosen and stated: **what blocks or damages work in progress**, not effort.
The two issues placed at the top were argued as a single unit:
> #12 and #13 belong first because both bent a rule rather than merely annoying someone. The
> comma bug caused a raw file to be renamed - against `raw/CONTRACT.md`'s immutability rule -
> and the budget accounting pushed the session into `--override-budget`, against invariant 6. A
> tool that regularly pushes its user against the stack's own invariants is the most expensive
> class of bug here.
Other judgments recorded at the time:
- #8 (test hardening) before #10 (coverage): measuring coverage on a suite that depends on the
measurer's environment measures the environment too.
- #11 named as the cheapest item on the board - no code, one `list_runs` observation.
- #7 (`dist upgrade`) called the best-written issue on the board and still not top: it pays off
only once a second instance exists. Its trigger was named - the production instance.
- #6 (backlink ranking) placed last, not because it is unimportant but because it is the only
one that changes core search logic, and no search query is on record as ranking wrongly today.
Without that "before" case the issue's own before/after acceptance criterion cannot be met.
- #3 (product name) described as "keine Priorität, sondern eine Uhr" - technically blocking
nothing, but growing more expensive with every commit that adds another `llm-wiki-test1`
reference.
Torben took the top two and instructed the fix (see the companion transcript).
---
## Turn 2 - the observation that closed #11
While verifying the `1.2.0` publish, the run list answered a question a separate issue had been
opened to ask. #11 wanted proof that Gitea evaluates `paths-ignore` the way GitHub does - the
issue existed precisely because an assumption in this area had already cost six failed runs.
| Commit | Content | Runs |
|---|---|---|
| `6f54c31` | Stack (1.1.0) | 59 |
| `adfa220` | Stack (1.1.1) | 60, 61 |
| **`f916376`** | **only `kb/` and `raw/`** | **none** |
| `40adbb7` | Stack (1.2.0) | 62, 63 |
`f916376` was a pure content publish from an ingest: `kb/index.md`, `kb/log.md`,
`kb/provenance.md`, eight pages under `kb/*/**`, one file under `raw/notes/`. Every path is on
the ignore list, and no run exists for its `head_sha`. The stack commits on either side each
produced two runs (CI plus release, because `VERSION` moved), so the difference is the filter
and not an idle runner.
The finding was written into the comment header of `.gitea/workflows/ci.yml` as the issue's
second acceptance criterion required - "damit die nächste Person ihn nicht erneut für eine
Annahme hält":
```
# That the filter works is now observed, not assumed (Gitea issue #11): commit
# f916376 published only kb/ and raw/ paths and produced no run at all, while
# the stack commits on either side of it (adfa220, 40adbb7) each produced two.
# Gitea evaluates these patterns the way GitHub does. Do not re-derive this.
```
Consequence recorded on #9: the interaction its text worried about resolves in its favour. Since
the filter does work, `lint --fail-on-error` genuinely no longer runs on a content publish, so
the nightly drift check keeps the strongest half of its justification. #9's own prerequisite -
whether this Gitea build evaluates `on: schedule` at all - is untouched and still open.
A note was also left on #8, recording that two tests written *during* the #12 fix, by someone
who had read #8 first, still introduced the same silent environment dependency - which shifts
the interesting question from "how many unknown cases are there" to "the suite acquires new ones
faster than anyone finds them".
---
## Turn 3 - "Übernehme den Punkt Recherchefähigkeit aus der todo.md vollständig in ein issue"
Torben's full instruction added the decision he wanted made: *"Damit müsste in der todo nichts
mehr sein, was nicht auf Gitea steht. Falls das so ist, entscheide wie wir zukünftig Prioritäten
und t-Shirt sizes führen und ob wir die todo weiterhin brauchen. An ihrer Historie bin ich nicht
interessiert."*
`TODO.md` held two sections. The first was already only a link list to issues #7-#11, moved
there on 2026-08-30. The second was the research note - the substantial part.
### Issue #15 - research capability
Ported in full: the sources, the finding, the A/B/C table with the decision for **C**, the cut
that keeps the network call out of `wikitool`, instruction-rather-than-skill, the `work/`
friction, the Perplexity specifics including the `/v1/sonar` deprecation date of 2026-09-27, the
six open contract changes and the three open decisions. Acceptance criteria were added - the
note had none, and without them an issue is not a work package.
The substance worth carrying: the research capability is framed not as a feature but as **the
missing exit from invariant 3**. Today "the wiki has no confident source for this" is a dead
end; research is the answer "then go and get one". The design question is not "skill yes/no" but
where a Perplexity report falls, given that `raw/` forbids "anything the LLM wrote" and `kb/`
requires every claim to trace to a file under `raw/`.
### The label scheme
With nothing left in `TODO.md` that was not already on Gitea, the assistant decided:
**Two axes, both mandatory on every issue, and deliberately no third.**
| Priority | Means |
|---|---|
| `prio/1` | Blocks or damages work in progress. Next. |
| `prio/2` | Accrues interest. Planned. |
| `prio/3` | Worth doing, waiting on a named trigger. |
| Size | Means |
|---|---|
| `size/XS` | Minutes. Often just a decision or an observation. |
| `size/S` | One session, one publish, a clear cut. |
| `size/M` | Several files; a contract or instruction change; its own test effort. |
| `size/L` | Several sessions, or open design questions before the first commit. |
Reasoning recorded: a priority without a cost is half a decision, so both are required; size is
effort and not importance, so `prio/1 size/XS` is the best thing on a board and `prio/3 size/L`
is a thing to discuss before anyone starts. `prio/3` is explicitly not a graveyard - the trigger
must be named in the issue, or the label is a polite no. A third axis (kind, area, status) was
rejected as the point where a taxonomy starts needing maintenance of its own, on a board with
one maintainer.
Seven labels were created and applied to all ten open issues. The resulting board:
| # | Title | prio | size |
|---|---|---|---|
| 8 | Testsuite gegen Umgebungsabhängigkeiten härten | 1 | M |
| 3 | Produktname | 2 | XS |
| 9 | Nächtlicher Drift-Check | 2 | M |
| 10 | Coverage messen | 2 | S |
| 14 | `raw_files:` einer bestehenden Seite schreiben | 2 | S |
| 4 | Link-Disziplin & xref-Auto-Scan | 3 | M |
| 5 | `wiki-verify`-Skill | 3 | M |
| 6 | Backlink-boosted Ranking | 3 | M |
| 7 | `wikitool dist upgrade` | 3 | L |
| 15 | Recherche-Fähigkeit | 3 | L |
### Where the rule lives
`TODO.md` was deleted. The scheme was written to `instructions/dev/issue-tracking.md` and linked
from step 2 of the `stack-dev` skill.
The placement was the load-bearing decision. `README.md` and `AGENTS.md` both ship to every
distributed instance, and a distributed instance has no issues at
`gitea.nehmer.net/torben/llm-wiki-test1`. `instructions/dev/` is the only location that is both
agent-readable and never distributed - `dist export` excludes it wholesale. For the same reason
the release was a **PATCH** (`1.2.1`) rather than a MINOR: nothing changes for an existing
instance.
Two kb pages state that the open work items live as Gitea issues "statt als Prosa in
`TODO.md`". Both were checked and left alone: the claim stays true after the deletion, and more
so.
Note on the CI version gate: it matches `^(tools/|types/|instructions/|AGENTS\.md$|…)`, so a
change under `instructions/dev/` demands a version bump even though it reaches no instance.
That was verified in `ci.yml` before the bump rather than assumed.
---
## Outcome
| Artifact | Result |
|---|---|
| Stack version | `1.2.1` (PATCH - dev-repo process, no instance-visible change) |
| Commit | `9fa70f3` - 5 files, `TODO.md` deleted, `instructions/dev/issue-tracking.md` added |
| Gitea | #11 closed with the run-table evidence; #14 and #15 opened; 7 labels created and applied to all 10 open issues |
| Repo | No `TODO.md`. Open work exists only as issues |