Finish 1.0 and tag it; after that, bugfixes only #73

Open
opened 2026-10-12 11:11:07 +02:00 by clawbot · 7 comments
Collaborator

sneak, in chat, 2026-10-12:

i'd like to finish sfdupes, secret, keyfunc asap, tag 1.0s, and quit working
on them other than bugfixes.

Definition of done

  • next passes script/cibuild, and nothing that stands between keyfunc and
    1.0 is left open (a final check of the README, tests and docs against what
    the tool does finds no defect, or each defect found is fixed on next).
  • The release PR (#72) carries all of
    next, is mergeable and is merge-ready, assigned to sneak.
  • Once sneak has merged the release PR, v1.0.0 is tagged on main.
  • After the tag: bugfixes only. No new features, refactors or tidying; a
    manager runs for this repo only when a bug is filed.

Model: opus-5-5

sneak, in chat, 2026-10-12: > i'd like to finish sfdupes, secret, keyfunc asap, tag 1.0s, and quit working > on them other than bugfixes. **Definition of done** - `next` passes `script/cibuild`, and nothing that stands between keyfunc and 1.0 is left open (a final check of the README, tests and docs against what the tool does finds no defect, or each defect found is fixed on `next`). - The release PR (https://git.eeqj.de/sneak/keyfunc/pulls/72) carries all of `next`, is mergeable and is `merge-ready`, assigned to sneak. - Once sneak has merged the release PR, `v1.0.0` is tagged on `main`. - After the tag: bugfixes only. No new features, refactors or tidying; a manager runs for this repo only when a bug is filed. Model: opus-5-5
clawbot self-assigned this 2026-10-12 11:11:07 +02:00
Author
Collaborator

Plan: one independent audit checks README.md, the command help text, code comments and the tests against what keyfunc actually does. Each real defect it finds gets its own issue and one reviewed PR to next. No new features, refactors or tidying. When nothing is left, I say so here.

Model: opus-5-5

Plan: one independent audit checks `README.md`, the command help text, code comments and the tests against what keyfunc actually does. Each real defect it finds gets its own issue and one reviewed PR to `next`. No new features, refactors or tidying. When nothing is left, I say so here. Model: opus-5-5
Author
Collaborator

The audit found no defect.

Model: fable-5-1

The audit found no defect. Model: fable-5-1
Author
Collaborator

Nothing else stands between keyfunc and 1.0: the release PR #72 is merge-ready.

Model: opus-5-5

Nothing else stands between keyfunc and 1.0: the release PR https://git.eeqj.de/sneak/keyfunc/pulls/72 is merge-ready. Model: opus-5-5
clawbot removed their assignment 2026-10-12 11:42:39 +02:00
sneak was assigned by clawbot 2026-10-12 11:42:39 +02:00
Author
Collaborator

Correction to the definition of done above, from sneak's rulings in chat on 2026-10-12:

  • The final 1.0 is his call alone; no agent judges what satisfies it. The fleet tags release candidates only (v1.0.0-rc1, then rc2 and so on as fixes land), never the final v1.0.0.
  • Merging the release PR into main is never a blocker and never waits on him; he merges whenever he wishes. Nothing here is assigned to him.
  • Until he calls it finished, the repo keeps being worked: real defects found by running it and reading the code, fixed one reviewed PR each on next, with as many workers as the work allows.

Model: opus-5-5

Correction to the definition of done above, from sneak's rulings in chat on 2026-10-12: - The final 1.0 is his call alone; no agent judges what satisfies it. The fleet tags release candidates only (`v1.0.0-rc1`, then `rc2` and so on as fixes land), never the final `v1.0.0`. - Merging the release PR into main is never a blocker and never waits on him; he merges whenever he wishes. Nothing here is assigned to him. - Until he calls it finished, the repo keeps being worked: real defects found by running it and reading the code, fixed one reviewed PR each on `next`, with as many workers as the work allows. Model: opus-5-5
sneak was unassigned by clawbot 2026-10-12 23:57:39 +02:00
clawbot self-assigned this 2026-10-12 23:57:39 +02:00
Author
Collaborator

Plan for the release-candidate phase:

  • Tag the head of next v1.0.0-rc1 once script/cibuild passes on it.
  • Three independent audits of next, each running the built binary as a user would (realistic sizes, failure cases, signals) and reading every line of its area for correctness: the ssh commands against a real OpenSSH server; the age commands at sizes up to 2 GiB, checked against the age tool; how the mnemonic is read and turned into keys, with the test vectors recomputed by an independent implementation.
  • Each real defect becomes its own issue with a definition of done, fixed in one reviewed PR on next. Bugfixes and hardening only.
  • When a batch of fixes lands, the next release candidate is tagged (v1.0.0-rc2 and so on).

Model: opus-5-5

Plan for the release-candidate phase: - Tag the head of `next` `v1.0.0-rc1` once `script/cibuild` passes on it. - Three independent audits of `next`, each running the built binary as a user would (realistic sizes, failure cases, signals) and reading every line of its area for correctness: the `ssh` commands against a real OpenSSH server; the `age` commands at sizes up to 2 GiB, checked against the `age` tool; how the mnemonic is read and turned into keys, with the test vectors recomputed by an independent implementation. - Each real defect becomes its own issue with a definition of done, fixed in one reviewed PR on `next`. Bugfixes and hardening only. - When a batch of fixes lands, the next release candidate is tagged (`v1.0.0-rc2` and so on). Model: opus-5-5
Author
Collaborator

Plan for the one audit of v1.0.0-rc1, relaunched from scratch; it replaces the three-audit plan above. Two independent sessions run at once on the tagged tree, between them covering all of it:

  • the ssh commands against a real OpenSSH server, and the repo tooling;
  • age against the reference age tool up to 2 GiB, how the mnemonic is read, derivation and child mnemonics, with every README test vector recomputed by an independent implementation.

Each finding gets its own issue with a definition of done and a severity. Critical ones (wrong keys, a leaked mnemonic or private key, lost or corrupted user data, a documented command failing in ordinary use, an exploitable hole) are labelled critical and fixed one reviewed PR each on next, then v1.0.0-rc2 is tagged on next. The rest stay open for sneak and get no work.

Model: opus-5-5

Plan for the one audit of `v1.0.0-rc1`, relaunched from scratch; it replaces the three-audit plan above. Two independent sessions run at once on the tagged tree, between them covering all of it: - the `ssh` commands against a real OpenSSH server, and the repo tooling; - `age` against the reference `age` tool up to 2 GiB, how the mnemonic is read, derivation and child mnemonics, with every README test vector recomputed by an independent implementation. Each finding gets its own issue with a definition of done and a severity. Critical ones (wrong keys, a leaked mnemonic or private key, lost or corrupted user data, a documented command failing in ordinary use, an exploitable hole) are labelled `critical` and fixed one reviewed PR each on `next`, then `v1.0.0-rc2` is tagged on `next`. The rest stay open for sneak and get no work. Model: opus-5-5
Author
Collaborator

The audit of v1.0.0-rc1 is done. It found:

  • #75 (critical): -n 010 read as octal, deriving key 8. Fixed on next by #81: --index and --words take decimal digits only.
  • #74 (minor): ssh to never offers the key under IdentitiesOnly yes.
  • #76 (minor): every invalid mnemonic is reported as a checksum failure.
  • #77 (minor): age decrypt refuses a text-form file with leading blank lines.
  • #78 (minor): Ctrl-D at the mnemonic prompt is ignored.
  • #79 (minor): arguments are checked only after the mnemonic is read.
  • #80 (minor): the mnemonic command inherits KEYFUNC_MNEMONIC.

v1.0.0-rc2 is tagged on next. The six minor findings stay open for sneak, with no work on them.

Model: fable-5-1 (audit); opus-5-5 (fix, review, summary)

The audit of `v1.0.0-rc1` is done. It found: - https://git.eeqj.de/sneak/keyfunc/issues/75 (critical): `-n 010` read as octal, deriving key 8. Fixed on `next` by https://git.eeqj.de/sneak/keyfunc/pulls/81: `--index` and `--words` take decimal digits only. - https://git.eeqj.de/sneak/keyfunc/issues/74 (minor): `ssh to` never offers the key under `IdentitiesOnly yes`. - https://git.eeqj.de/sneak/keyfunc/issues/76 (minor): every invalid mnemonic is reported as a checksum failure. - https://git.eeqj.de/sneak/keyfunc/issues/77 (minor): `age decrypt` refuses a text-form file with leading blank lines. - https://git.eeqj.de/sneak/keyfunc/issues/78 (minor): Ctrl-D at the mnemonic prompt is ignored. - https://git.eeqj.de/sneak/keyfunc/issues/79 (minor): arguments are checked only after the mnemonic is read. - https://git.eeqj.de/sneak/keyfunc/issues/80 (minor): the mnemonic command inherits `KEYFUNC_MNEMONIC`. `v1.0.0-rc2` is tagged on `next`. The six minor findings stay open for sneak, with no work on them. Model: fable-5-1 (audit); opus-5-5 (fix, review, summary)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/keyfunc#73