Commit Graph
323 Commits
Author SHA1 Message Date
jason.woltje 38cfa72335 feat(row 333): count dropped proxy usage batches and show them in the Console (Vikunja #778)
The usage queue read drains the proxy. A batch that is then not written (the
client or the bus refuses its shape, an ambiguous key owner, a failed write) is
lost, and the Console showed proxy totals with no sign of it. The reader now
counts these per enabled business since the bus started, the proxy view returns
the count as droppedBatches, and the Console proxy section says so above 0.
A read that failed before the proxy answered or that it refused drained nothing
and is not counted. Telemetry only; no quota reads it. The log line stays
proxy-usage-read-failed.
2026-11-02 20:08:50 -06:00
jason.woltje 3dc824ea12 fix(row 333): a failed lineage lookup forgets orphan ids the document dropped (Vikunja #783)
observeOrphans kept the whole remembered set when the lookup failed, so a leaf
removed and added back during the failure logged no second orphan line. It now
keeps only the ids the refreshed document still holds and adds none. Quota
decisions are unchanged: a failed lookup still refuses.
2026-11-02 20:05:28 -06:00
jason.woltje 1ff45c4ad6 Merge row 333: proxy usage and human model-key quotas, R4 (Gitea #1831) 2026-11-02 19:40:46 -06:00
jason.woltje f65faf9df8 fix(row 333 R4): a moved key quota keeps its count; orphan set on every refresh (#1831)
Ruling 1: the bus runtime passes launchSettings a key lineage lookup read
from its own credential records (ids only). A new daily key quota takes the
earliest stored since among the old document's daily key quotas in its key's
lineage, and now only when there is none. A reset still sets now, a
caller-supplied since still refuses, and a quota removed and added back in a
later write is new. A failed or malformed lookup refuses proxy-key-refused; a
write that adds no new daily key quota never calls it.

Ruling 2: every limits refresh updates the remembered orphan set, an empty
set when no daily key quota is left, so a quota removed and added back logs
again. In memory only: a restart is a fresh observation.

Ruling 3: pollSettledAfterTick yields on the real setImmediate, captured at
load, inside its deadline.

Tests: p5-key-lineage (writer move counts 160, reset restarts, lookup
failure, orphan remove and re-add), p5-runtime (exhausted on A, moved to B
through the real runtime, refuses), p5-background (barrier with every timer
mocked), token-limit-settings (earliest, no match, re-add, caller since,
malformed answers, default refusal). READMEs: business, plugins, daily-quota,
cliproxy-queue.
2026-11-02 19:02:45 -06:00
jason.woltje 7e0d3c93f3 Fix project inspectGit race with git maintenance (Vikunja #780)
Fixture helpers that commit to a repository the product later inspects now pass
maintenance.auto=false and gc.auto=0, as the product's own git calls already do,
so a detached git maintenance run no longer writes pack temp files mid-walk.

inspectGit now refuses a git metadata entry that vanishes between readdir and
lstat (or between listing a directory and reading it) with project-repository,
'git metadata changed during inspection', instead of leaking a raw ENOENT.
It still refuses rather than skipping or retrying. A missing .git keeps its
existing error.

A deterministic test removes the named entry from inside a replaced readdirSync,
for both a file and a directory.
2026-11-02 17:55:40 -06:00
jason.woltje 3692fca522 fix(row333 R3): per-key quota follows the agent's key lineage across rotation and re-issue (#1831)
Ruling 1: model records keep a bounded previous list (64 ids, oldest dropped)
of ids that left by rotation, grace expiry or re-issue; a fire removes the
record. A tokens.keys leaf matches and counts every id in the lineage that
holds it. Lineage ids are unique host-wide. An orphaned leaf limits nothing,
logs one value-free line when it becomes orphaned, and the Console usage
view lists it.
Ruling 2: an agent with no model key under a key quota refuses
key-quota-no-model-key, passed through the broker, launcher and stop reason.
Ruling 3: covered by the lineage; no mayLaunch change.
Ruling 4: the usage module receives a frozen { readUsageQueue } only.
Ruling 5: every telemetry fixture wait races a 5 s real-timer deadline.
2026-11-02 17:54:07 -06:00
jason.woltje 259e59d401 docs(prd): propose disk governance in version 1.18 (#725) 2026-11-02 16:52:04 -06:00
jason.woltje c0c291cda2 merge: join row 333 P5 quotas onto landed row 332 (#1831)
Joins row 333 R2 head 0ef269da9 (base 09a847eda: R1 503b91e56, overlay
2627321f6, docs c012b2e0a and ddb3e961f, R2 fixtures 12eba4b59 and
0ef269da9) onto refactor with row 332 landed at 5df0e9d6f. Run with the
union attributes for BUILD-LOG.md and docs/SESSIONS.md. Two files
conflicted; no other path did.

packages/business/src/launch.mjs, import block: 332 changed the errors
import to `{ BusinessError, refuse }` for the proxy route refusals; 333
added `isDailyModelQuota` from plugins/src/model-quota.mjs for the daily
model leaves under limits.tokens.keys. Kept both: the model-quota import
and the `{ BusinessError, refuse }` import. The rest of launch.mjs merged
without conflict (332's checkModels route handling and checkAccount
credential "proxy"; 333's checkTokenLimits keys block).

packages/plugins/README.md, end of file: 332 appended "Per-session proxy
context (P3)" and 333 appended "Proxy usage telemetry (row333 / P5)" at
the same spot. Kept both sections, P3 first, one blank line between.

The resolved files match the earlier 332 R1 join resolution
(join-resolution.patch) line for line apart from hunk offsets.
2026-11-02 16:33:47 -06:00
jason.woltje cab3ef3e8f fix(library): row 267 R2 search hits carry their source universe (#1772)
(cherry picked from commit 3006729160)
2026-11-02 14:40:12 -06:00
jason.woltje 3b88ef399d morgana: row 267 (C2-15, #1772) build: excluded() reads both exclude forms, the validator checks exclude and pin against the hybrid's sources, R6 for excluded links, R8 pinned value changed, guard refuses an excluded cite beside a hybrid; tests in library, bus and business; survey.test.mjs:75 gains R8 0 (mos-1667); setup sheet section (sage-4389, sage-4407)
(cherry picked from commit 367fd0d240)
(cherry picked from commit 068e1e0f1c)
2026-11-02 14:40:12 -06:00
jason.woltje 2627321f64 fix(model-proxy): row 333 R1 repair overlay as reviewed (source-tests.patch a78bc385, #1831)
Commits the 18 product paths of the row 333 R1 repair exactly as the reviewed overlay. Packet hashes: source-tests.patch sha256 a78bc385801b64be270fb9d6e84672c443738a5fce8eb68f7d2a01359a57a770 (40623 bytes), INDEX.json sha256 3eb9b8d10445aa328be3b854385e4792dda2c5712b19d443d485d1b00a18d0f8, changed-source-tests.json sha256 42f770fc3e2384362efd1e416091355c064b6cca22dd40f3b5ef8f7b67e43a52. The committed bytes were checked by applying source-tests.patch to 503b91e56 in a scratch tree and comparing the 18 paths. The approvals are source only: R2 (APPROVE source-only, 2026-10-26 23:32:39Z) and Boyd's first review (APPROVE, source only, 2026-10-27T00:27:55Z), both on HEAD 503b91e56 plus this overlay. No test has run on these bytes yet.
2026-11-02 13:36:45 -06:00
jason.woltje 503b91e561 feat: add optional proxy usage and human model-key quotas (row333) 2026-10-26 17:55:26 -05:00
jason.woltje 362893d043 feat: integrate reviewed proxy page and managed model keys
Source-candidate: poe d9a564e6d20f5f0fd75ce45b12cbbf8bb4c9d568\nSource-candidate: magica38ba5762b06716db1dee00d0afec162656488f5c\nValidated321whole-file phase plus whole bus1349/model-proxy100/webui490; final gate tooling checks pending, not landed.
2026-10-26 12:04:21 -05:00
jason.woltje 6efc4a6921 fix: make timing regressions depend on explicit probe and child outcomes 2026-10-26 10:40:04 -05:00
jason.woltje c10f17cfeb Correct row 288 broker grant and bare mirror fixtures 2026-10-25 00:08:19 -05:00
jason.woltje 90a0d690da Untested: row 288 contract and import-list preflight (sage-4282) 2026-10-25 00:08:19 -05:00
jason.woltje 4176f3a506 Untested: add library write tools and served blob integration (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje 56e9844528 Untested: retain library notice after push when publication fails (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje bbc062ae86 Untested: use editor login and cover row 288 early review gaps (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje dc2a49a744 Untested: protect library publication state and add broker bare-repo coverage (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje c0bf87b789 Untested: row 288 library writes, notices, revert and human saves (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje 20996ecd66 row284: supporting lookup scope and served blob IDs (unrun) 2026-10-24 18:40:22 -05:00
jason.woltje 94cde633e2 WIP row329: preserve P1 draft before required base rebase (#1827) 2026-10-24 18:30:11 -05:00
jason.woltje 4577e46459 Untested: row 328 isolate revoked T9 sync from timer ticks 2026-10-24 14:19:53 -05:00
jason.woltje da55da6244 row224: fix new fixture setup and record old-test stop 2026-10-24 14:19:17 -05:00
jason.woltje 56cfaf468e row224: pace failed inline sync attempts (unrun) 2026-10-24 14:19:17 -05:00
jason.woltje a41cfd491e row224: draft broker library lookups and typed tools (unrun) 2026-10-24 14:19:17 -05:00
jason.woltje abc11152a0 Row 266: add Console room timeline and member completion 2026-10-24 12:11:42 -05:00
Steelbeak dc8f552819 Row 287: grant library collaborators with declared scopes 2026-10-24 10:55:31 -05:00
jason.woltje de17e8bc30 morgana: row 225 handoff to fethry (mos-1501), UNTESTED: renderReply, chat replies/cites/notice/Revert/status line, library status and revert routes, channel-proof re-pin of webui bus.mjs 2026-10-24 10:12:24 -05:00
jason.woltje 5d7801dc19 Row 286 r6: shorten two fixture values for secrets guard and record green reruns (sage-4112) 2026-10-24 09:20:22 -05:00
jason.woltje 5999872f5a Row 286 r5: rebase onto row285 and seed chief read-grant fixtures under sage-4100 2026-10-24 09:20:22 -05:00
jason.woltje 18eca02ae9 Row 286 r3: fix new credential fixtures and record green CLEAR gate with killed mutants 2026-10-24 09:20:22 -05:00
jason.woltje 105d26f1d9 Row 286 C2-03b: fold dewey-0869 and sage-2951 (marker-gated busy test, T9 scratch roles with a chief gitea credential, fired-chief path cited) 2026-10-24 09:20:21 -05:00
jason.woltje f3030813ed Row 286 C2-03b: fold dewey-0864 (T7/T9 through grants.revoke and instance.fire, race fetch takes the sync guard, two-chief code, id -u shim note) 2026-10-24 09:20:21 -05:00
jason.woltje 918bbddfb0 Row 286: library.status shows the credential (webby-0151 R3); fired chief revokes its row as row 281 does; unrun 2026-10-24 09:20:21 -05:00
jason.woltje 17d1123ea1 Row 286 C2-03b: library push, per-seat credentials, the chief's fetch credential, askpass fd check (#1791, sage-2922/2925/2928, dewey-0860); unrun 2026-10-24 09:20:21 -05:00
jason.woltje 1f3d0350f3 row 285: preserve credential bindings for approved creative changes and verify r4 (#1790, mos-1585, mos-1586) 2026-10-24 08:12:02 -05:00
jason.woltje edf06ca884 row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582) 2026-10-24 08:12:02 -05:00
jason.woltje 63f3a69313 row 285: library.write joins ACTIONS and ROUTED in the business vocabulary and the broker under PRD 1.16 REQ-WAIT-3 and REQ-LIB-6, with a hard-waits test; BUILD.md records the r2 rebase, range-diff and drift check (#1790, sage-3578) 2026-10-24 08:12:02 -05:00
jason.woltje 54bdac257e row 285: fixtures, example and README give the chief and creative instances their gitea reference (#1790, mos-1330)
Fixture data only, plus two named tests that a chief or creative instance
without credentials.gitea refuses at load. chief-of-staff.test :88 and :155
change expected values and wait on Mos's mos-1272 ruling. Nothing here has run.
2026-10-24 08:12:02 -05:00
jason.woltje 752cc87ac1 row 285: C2-08b, creative roles hold library.write and the gitea credential, the chief of staff a read-scoped gitea credential; #giteaRole refuses the chief (#1790, mos-1309 item 5, sage-2915, sage-2921)
The creative role files declare gitea with SEAT_SCOPES, the scopes the Gitea
grant mints. The chief declares read scopes only, so #giteaRole refuses it
with gitea-not-declared until row 287 mints its declared scopes.
library.write is not yet routed: it waits on PRD 1.16 (row #1796), and the
fixture change waits on Mos's mos-1272 rulings. Nothing here has run.
2026-10-24 08:12:02 -05:00
jason.woltje 29f7287942 row 217: correct new runtime fixture and record first-run evidence 2026-10-24 05:39:26 -05:00
jason.woltje 5481478786 row 217: availability refusal and landed supporting scope (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje c2eac13ea5 row 217: keep fixture status on its current served tip (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje dab9f6cd4d row 217: early-review coverage and availability RED cases (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje b3ca50c950 row 217: citation runner retry and acceptance draft (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje a1b72432cd launchpad: row 217 C2-06 work in progress, UNTESTED, handed to Beakley (mos-1500)
Guard, limits, M11 fence, broker guard/page store/check event, BusError
reason, runtime wiring and the CLI replies verb. No runner work, no tests,
nothing run. BUILD.md lists the rulings, the row 225 contract and what is left.
2026-10-24 05:39:16 -05:00
jason.woltje 200dd396c4 feat(bus): add human project rooms with addressed sends
(cherry picked from commit ef4c938532)
2026-10-23 23:57:31 -05:00
jason.woltje 535b05adbf row 298: Untested full gate; targeted 29 pass and ten mutants killed, address review (#1804) 2026-10-23 17:40:20 -05:00