99 Commits
Author SHA1 Message Date
Frank 59920f849d docs(agent): re-add the work-log rule, restricted to one file
Rule 1 lost its work-log sentence in the point-of-use rewrite. Restoring it plainly would
re-create the old failure, where one agent kept logs in fifty-odd files and none of them
was the place to look. So the restored rule names the file: a single page in the
knowledge base — omp-docs/log.md here, whichever change-log page a repo's index names
elsewhere — read before starting, written in the same commit as the change it describes,
under that page's own entry law. Explicitly banned: per-directory logs, per-project or
per-run logs, NOTES.md/PROGRESS.md/STATUS.md/worklog/, dated diaries. If a KB has no log
page, the fix is one at its root plus an index entry, never a log somewhere else.

The bundle's own log records the change and the two-log incident it came out of.
2026-10-20 21:49:16 -07:00
Frank 289f74062a docs(agent): a pull request is reported as its link plus its title, never a bare number
"#54" made Frank go hunting: numbers are per-repository across the forges this
fleet uses, and a number carries no hint of which work is being reported. Every
mention of a PR now pairs its web URL with its title — gitea.franksdank.cloud for
the Dankclaw Gitea, the equivalent for any other forge.

Refs the AGENTS.md convention that an open PR gets opened in Frank's browser: the
rule covers prose, where the browser tab does not help.
2026-10-20 21:22:35 -07:00
Frank d7bd05398d docs(agent): commit the point-of-use documentation doctrine that has been live for a day
The live deployment has been running this rewrite of rule 1 since 2026-10-19, but
the file was never committed: agent/APPEND_SYSTEM.md is prose tier, outside the
live-sync allowlist, so the heartbeat surfaces the dirt instead of committing it —
which is correct behaviour, and it left the fleet's system prompt with no history
and no way for another machine to pull it. Committed verbatim as it runs, no
editorial changes: the purpose test, the dead-weight-number law, and the
deletion-is-an-update clause.

A config that only exists on one disk is not a deployment; it is a pending loss.
2026-10-20 21:20:04 -07:00
Frank 7da5e9dfa8 Redact a live credential that escaped into tracked memory
The auto-learned memory tier for serverAppConfigs carried, in plaintext, the
Caddy basicauth bcrypt hash for dankuser, the password behind it, and the
Pi-hole internal password. The file is tracked, so all three are in git
history on every machine that has pulled this repo, and in every agent
context window that has read the bucket.

Operational knowledge preserved in full (which auth layer fails, how to
reset, that the CLI hash is what CivetWeb validates, hot-reload through the
file watcher); only the credential values removed.

Both credentials still need rotation: redaction does not un-leak history.
That is an operator action on Dankclaw, not something this commit can do.

Refs #40
2026-10-20 16:47:17 -07:00
Frank 0d43eb0948 live: heartbeat sync 2026-10-20T16:17:41-07:00 (Refs #11) 2026-10-20 16:17:41 -07:00
Frank 6af3714bd0 live: heartbeat sync 2026-10-20T15:15:41-07:00 (Refs #11) 2026-10-20 15:15:41 -07:00
Frank 495e2229f5 live: heartbeat sync 2026-10-20T14:12:41-07:00 (Refs #11) 2026-10-20 14:12:41 -07:00
Frank 37ef4897ae live: heartbeat sync 2026-10-20T13:10:41-07:00 (Refs #11) 2026-10-20 13:10:41 -07:00
Frank 06e549cb27 live: heartbeat sync 2026-10-20T12:07:41-07:00 (Refs #11) 2026-10-20 12:07:41 -07:00
Frank c96741794a live: heartbeat sync 2026-10-20T11:04:41-07:00 (Refs #11) 2026-10-20 11:04:41 -07:00
Frank e14d0906ea live: heartbeat sync 2026-10-20T10:02:41-07:00 (Refs #11) 2026-10-20 10:02:41 -07:00
Frank d5be16127b live: heartbeat sync 2026-10-20T08:59:41-07:00 (Refs #11) 2026-10-20 08:59:41 -07:00
Frank b7aef40266 live: heartbeat sync 2026-10-20T07:57:45-07:00 (Refs #11) 2026-10-20 07:57:45 -07:00
Frank fafdaa2617 live: heartbeat sync 2026-10-20T06:56:41-07:00 (Refs #11) 2026-10-20 06:56:41 -07:00
Frank 7213068d91 live: heartbeat sync 2026-10-20T05:55:41-07:00 (Refs #11) 2026-10-20 05:55:41 -07:00
Frank 05dbe8c5c1 live: heartbeat sync 2026-10-20T04:54:41-07:00 (Refs #11) 2026-10-20 04:54:41 -07:00
Frank 806352f8f6 live: heartbeat sync 2026-10-20T03:51:41-07:00 (Refs #11) 2026-10-20 03:51:41 -07:00
Frank 34a7af2847 live: heartbeat sync 2026-10-20T02:50:41-07:00 (Refs #11) 2026-10-20 02:50:41 -07:00
Frank 635c64d773 live: heartbeat sync 2026-10-20T01:48:41-07:00 (Refs #11) 2026-10-20 01:48:41 -07:00
Frank 64d9c54657 live: heartbeat sync 2026-10-20T00:45:41-07:00 (Refs #11) 2026-10-20 00:45:41 -07:00
Frank aec7f0f068 live: heartbeat sync 2026-10-19T23:44:41-07:00 (Refs #11) 2026-10-19 23:44:41 -07:00
Frank 4023b21365 live: heartbeat sync 2026-10-19T22:41:41-07:00 (Refs #11) 2026-10-19 22:41:41 -07:00
Frank e14fc884a3 live: heartbeat sync 2026-10-19T21:40:41-07:00 (Refs #11) 2026-10-19 21:40:41 -07:00
Frank b3a84c5bb8 live: heartbeat sync 2026-10-19T20:37:41-07:00 (Refs #11) 2026-10-19 20:37:41 -07:00
Frank 9e6254108a live: heartbeat sync 2026-10-19T19:34:41-07:00 (Refs #11) 2026-10-19 19:34:41 -07:00
Frank ce87958b77 live: heartbeat sync 2026-10-19T18:31:41-07:00 (Refs #11) 2026-10-19 18:31:41 -07:00
Frank 802014fea9 live: heartbeat sync 2026-10-19T17:29:41-07:00 (Refs #11) 2026-10-19 17:29:41 -07:00
Frank e22acf4913 live: heartbeat sync 2026-10-19T16:27:41-07:00 (Refs #11) 2026-10-19 16:27:41 -07:00
Frank c14c64d6c0 live: heartbeat sync 2026-10-19T15:24:41-07:00 (Refs #11) 2026-10-19 15:24:41 -07:00
Frank 6e3e5594eb live: heartbeat sync 2026-10-19T14:21:41-07:00 (Refs #11) 2026-10-19 14:21:41 -07:00
Frank ee292ffd10 live: heartbeat sync 2026-10-19T13:20:41-07:00 (Refs #11) 2026-10-19 13:20:41 -07:00
Frank a8727ddf0b chore: retire dankvoice drop-in for the dank/dankvoice package
The extension's full behaviour now lives in dank/dankvoice (41/41
black-box suite against the built artifact; this branch's 26 drop-in
tests are a strict subset, names ported 1:1). Delete the drop-in and
its bats suite; repoint omp-docs/core/dankvoice.md at the package,
keeping only fleet wiring (frank-tts + @tiny resolution, the
enable_thinking hybrid law, voice/roster contract) and the cutover
procedure. kb-lint 0 violations; bats tests/ 45/45.

Refs #34
2026-10-19 12:38:28 -07:00
Frank 2faeab665a live: heartbeat sync 2026-10-19T12:19:36-07:00 (Refs #11) 2026-10-19 12:19:36 -07:00
Frank 62b3b92e69 live: heartbeat sync 2026-10-19T11:18:41-07:00 (Refs #11) 2026-10-19 11:18:41 -07:00
dank ec6a707fe4 Merge pull request 'fix(dankvoice): pin thinking off in rewrite, fix silent and timeout modes' (#33) from fix/32-dankvoice-latency into main 2026-10-19 11:12:50 -07:00
Frank 96553979fb fix(dankvoice): pin thinking off in rewrite, fix silent and timeout modes
Refs #32

The humanizer's raw fetch to frank-zealot omitted
chat_template_kwargs.enable_thinking: false, so the Qwen35 hybrid thought
instead of answering (6.9 s reasoning_content, empty content - timing out
the 6 s abort; or answering "" and muting the unit). Pin the kwarg, treat
empty-content-with-reasoning as failure over silence, and stop the menu's
test phrase from blocking its handler. Three red-captured regressions;
26/26 green, verified red against HEAD.
2026-10-19 10:46:06 -07:00
Frank ac5b377750 live: heartbeat sync 2026-10-19T10:17:52-07:00 (Refs #11) 2026-10-19 10:17:52 -07:00
Frank e4ecc93f29 live: heartbeat sync 2026-10-19T09:17:41-07:00 (Refs #11) 2026-10-19 09:17:41 -07:00
Frank d055eb1e7f live: heartbeat sync 2026-10-19T08:15:41-07:00 (Refs #11) 2026-10-19 08:15:41 -07:00
Frank 70346f3d57 live: heartbeat sync 2026-10-19T07:12:41-07:00 (Refs #11) 2026-10-19 07:12:41 -07:00
Frank 1251cfbd40 live: heartbeat sync 2026-10-19T06:09:41-07:00 (Refs #11) 2026-10-19 06:09:41 -07:00
Frank e67bbd0de0 live: heartbeat sync 2026-10-19T05:07:41-07:00 (Refs #11) 2026-10-19 05:07:41 -07:00
Frank cd20d6ddfd live: heartbeat sync 2026-10-19T04:06:41-07:00 (Refs #11) 2026-10-19 04:06:41 -07:00
Frank d99c1c3c4f live: heartbeat sync 2026-10-19T03:04:41-07:00 (Refs #11) 2026-10-19 03:04:41 -07:00
Frank 01d9d3fbd5 live: heartbeat sync 2026-10-19T02:02:41-07:00 (Refs #11) 2026-10-19 02:02:41 -07:00
Frank 3579c7ebc5 dankvoice: humanize answers via the @tiny role and narrate thinking
Answers spoken with /say were verbatim markdown-cleaned text while the
built-in vocalizer speaks prose rewritten by a small model. Port that
enhancer (bundle Qyr/T6o: same prompt, 1536 tokens, 6 s, 4000-char
window, null-fallback/empty-skip contract) and resolve its model from
modelRoles.tiny exactly as the harness does, so auto-speak sounds like
the enhanced TUI voice instead of a pager. agent_end now also speaks the
last assistant message's thinking blocks as their own unit before the
answer; narration-flagged thinking counts as answer text. Both knobs are
menu-toggleable, persisted, and env-overridable; the fixture gains a
chat route (echo/prose) and seven scenarios cover the round-trip, the
404 fallback, ordering, the kill switches and role resolution (22 green,
58 suite-wide; live smoke through real frank-zealot + frank-tts).

Refs #27
2026-10-19 01:55:57 -07:00
Frank bcd52bb0f4 dankvoice: speak long answers as sequential sentence-sized requests
agent_end awaited one whole-answer synthesis; long answers hit the
harness 30s extension-handler timeout (handler timed out after 30000ms)
and the single frank-tts request was the stall. Port the built-in
speak-aloud vocalizer's utterance segmenter (fHe in dist/cli.js) so
segmentation matches the known-working stock path: [.!?…]-run
boundaries, abbreviation/decimal/inline-code guards, fenced code and
tables swallowed, markup cleaned. Play segment N to player exit before
synthesizing N+1 (audio never stacks); fire-and-forget the chain so
utterances outlive the handler timeout; a run token retires superseded
chains. DANKVOICE_MAX becomes a per-answer budget of whole segments;
stripForSpeech is gone. Refs #23 follow-up.
2026-10-19 01:21:34 -07:00
Frank edd7e0cf68 live: heartbeat sync 2026-10-19T01:00:41-07:00 (Refs #11) 2026-10-19 01:00:41 -07:00
Frank f033639b54 chore(agent): disable built-in speak-aloud — dankvoice cloned voices are the TUI voice (Refs #23) 2026-10-19 00:49:14 -07:00
Frank dd8f3974c1 feat(dankvoice): /say options menu with output-device routing (Refs #23)
Bare /say and /say menu open a ctx.ui.select settings surface: auto-speak
toggle, voice from the frank-tts roster, PipeWire output device
(pw-play --target / paplay --device=), player binary, spoken cap, and a
test phrase. Choices persist to ~/.omp/cache/dankvoice.json (env wins
over file); detectPlayer becomes availablePlayers + playerFor. Fixes
the silent-route failure mode where synthesized audio played into an
offline Bluetooth sink. 15/15 dankvoice bats, 51/51 suite, live pty
TUI smoke armed the footer and wrote the settings file.
2026-10-19 00:31:40 -07:00