JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 1616,
"has_wiki": false,
"homepage": null,
"languages": {
"JavaScript": 16414,
"TypeScript": 1106563
},
"pushed_at": "2026-07-20T20:43:48Z",
"created_at": "2026-07-14T19:47:05Z",
"owner_type": "Organization",
"updated_at": "2026-07-20T20:43:52Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://noriq.dev/",
"name": "Noriq.dev",
"type": "Organization",
"login": "noriq-dev",
"company": null,
"location": "United States of America",
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/305059202?v=4",
"created_at": "2026-07-14T19:46:34Z",
"is_verified": null,
"public_repos": 3,
"account_age_days": 12
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2026-07-20T20:43:46Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2026-07-20T20:11:01Z"
},
{
"tag": "v0.13.0",
"kind": "minor",
"published_at": "2026-07-20T19:41:43Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2026-07-20T15:23:09Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2026-07-20T01:35:46Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2026-07-18T22:18:53Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2026-07-18T20:08:43Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2026-07-17T20:36:20Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2026-07-17T07:50:17Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2026-07-17T06:48:00Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2026-07-17T03:34:00Z"
},
{
"tag": "v0.5.3",
"kind": "patch",
"published_at": "2026-07-17T02:11:27Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2026-07-17T01:26:52Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2026-07-17T00:41:53Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-07-17T00:02:43Z"
},
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2026-07-16T22:38:38Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2026-07-16T21:19:01Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-07-16T19:58:09Z"
}
],
"recent_commits": [
{
"oid": "6a9d9ada6fd2846aefc5cb5d1dfe42e0ed8e2adb",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.13.2",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T20:43:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a8cdbad1e54c4a4e2b08d1b2b280fb3bba6aab29",
"body": "…5 wire shape\n\nTwo problems with RUN-125, found in live integration testing (v0.13.1 + planar main):\n1. It sent registration `repos[].workflows: {name,base}[]`, but planar's RunnerRepo.workflows\n is z.array(z.string()) — RegisterRunnerBody.safeParse rejects objects, 400-ing the WHOLE\n registrati\n[…]\n to planar — now byte-identical, RUN-122\nport loop closed. PLANAR-PORT.md updated to the reconciled state. Full check green (790).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-126): workflow posture is daemon-authoritative; revert RUN-12…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T20:43:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "357ccdc467c490bb9f58edbaccfc2a66890c9ec8",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.13.1",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T20:11:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b9948f9c2125189038bd5111acaaa9b5538dabeb",
"body": "…nd, not just its name\n\nA custom workflow's permission POSTURE comes from its `base` kind — the supervisor enforces\npermissions off `run.kind`, and `run.workflow` overrides only the prompt. Registration used to\nadvertise `repos[].workflows: string[]` (names only), so the dashboard couldn't derive th\n[…]\nasserts\nthe name+base shape. PLANAR-PORT.md updated: planar `RunnerRepo.workflows` must carry `base` too.\n\nFull check green (789).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-125): registration advertises each custom workflow's base ki…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T20:07:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c1036fe3770de15fd9d940454581c95384954d8a",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.13.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T19:41:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e2ca82dc040df3c5e7cf5c74f302c2daccdf3701",
"body": "…recation window\n\nPhase 5 — cutover prep. No functional runner change; the runner half of the plan is\ncomplete and fully back-compatible.\n\n- RUN-122: PLANAR-PORT.md enumerates the exact vendored→planar shared deltas\n (coordinate + workflow fields, registration agents[]/repos[].workflows) plus the\n \n[…]\ngent-coordinate.test pins the legacy⟷coordinate\n equivalence; PLANAR-PORT.md records the removal target.\n\nFull check green (788).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(RUN-122/123/124): contract port manifest, invariant updates, dep…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T19:36:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "32b5716b26fbaaa22fb0ef1acbd69e05acda37b6",
"body": "…riants of a kind\n\nPhase 4. A repo can declare [workflow.<name>] blocks: a named variant of a built-in\nkind that inherits its floor-safe posture and swaps in its own prompt.\n\n- RUN-119: shared WorkflowDef {base, prompt} + ProjectManifest.workflows; resolveWorkflow\n resolves a built-in kind id or a \n[…]\nanifest.workflows / Run.workflow authored in the VENDORED\ncopy with PENDING-PLANAR-PORT markers (RUN-122). Full check green (784).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-119/120/121): configurable workflows — repos define named va…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T19:32:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "651c35103fa7a097bfcc95c26c4df9913f8269fa",
"body": "…tch becomes a descriptor\n\nPhase 3, behavior-preserving. The run \"kind\" stops being a switch scattered through\nthe supervisor and becomes a Workflow descriptor the supervisor reads.\n\n- RUN-116: src/workflow.ts — Workflow {promptShape, worktreeWritable, produces,\n verifyActor, usesPlanBase} + BUILTI\n[…]\nwrite = true. \"Verify\n executes but never edits\" is now code, not an honor system. THREAT-MODEL updated.\n\nFull check green (777).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-116/117/118): workflows as data — the scope/build/verify swi…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T19:21:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0c51fccf437f78e74f0f0a2facae8d98f4197677",
"body": "…ffort triple\n\nPhase 2. One dotted coordinate — `claude.opus-4_8.high` — is the canonical agent\nselector; the legacy triple is kept, derived, for one deprecation window.\n\n- RUN-112: src/agent-coordinate.ts — parse/format/merge over `<tool>.<model>.<effort>`,\n with `.`↔`_` model escaping, partials, \n[…]\nhem into planar and\nfiles the dispatch/dashboard companions. vendor:shared must NOT run before that port.\n\nFull check green (768).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-112/113/114/115): agent coordinates replace the tool/model/e…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T19:12:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cff0da66cf69548a7843945516b850d0b799ae6d",
"body": "… descriptor, vendor-name purge\n\nPhase 1 of the driver-seam generalization. Makes AgentDriver the clean, self-describing\nboundary the coordinate + workflow work builds on.\n\n- RUN-109: env sanitization becomes a SUPERVISOR guarantee. `DriverStartOptions.env` carries\n the stripped child env, computed\n[…]\n/steering/budget); a guard test proves lock enforcement keys off the capability,\n not the driver's name.\n\nFull check green (742).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-109/110/111): harden the driver seam — env hoist, capability…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T18:48:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "43b604a95b077f2e0de130f9e5b77aa08348814f",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.12.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T15:23:09Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "19790f2c67673970bb96b262b5f38b88e94ab9a3",
"body": "`noriq-runner <TAB>` now completes commands, per-command flags, and enum\nflag values. A hidden `completion <bash|zsh>` prints a sourceable script that\ndelegates back to a hidden `__complete` command, so the candidate list lives\nin TS next to parseArgs and never drifts from a hand-maintained copy.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-108): shell tab-completion for the CLI (bash + zsh)",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T15:00:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "dac768aebe5b4f82911bdd09f577bc4b10c65f9e",
"body": null,
"is_bot": false,
"headline": "v0.11.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:35:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b07fb6c821141e5f562e0adda0edc8275f459bed",
"body": "Phase 6 (final) of runner-enforced file locking.\n\nRUN-106: lock holds/denials/gates surface in the run view via the RUN-74\ntranscript pipeline (no wire change) — a reactive deny, a hard-floor\ngate, and a predictive refuse each emit a 🔒 milestone naming the paths\nand holders, so a human watching sees\n[…]\nan, and the pass criteria. The\nlive run is a manual step (credentials + server + spend), like\nDOGFOOD.md.\n\nFull suite green (725).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-106/107): lock telemetry in the run view + dogfood runbook",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:33:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e85a655e3344578d9a58ad3ac6261f7680eb2038",
"body": "…erge\n\nPhase 5 of runner-enforced file locking. Largely delivered by the\narchitecture of Phases 2-4 and made explicit here:\n\n- Cross-worktree coordination is inherent: locks live server-side (the\n Noriq view), so two runs on one repo — each in its own worktree — see\n each other's holds. The hard f\n[…]\nlocked, cross-target stays git-merge's job. Tests pin the land→release\nordering and cross-worktree gating; full suite green (724).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-105): worktree/branch lock coordination — hold through the m…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:30:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2cd7ed96651c60697bba79ab2464935af3f73820",
"body": "Phase 4 of runner-enforced file locking.\n\nRUN-103 (predictive): with a DECLARED scope, the daemon takes its locks\nas the run's holder right after minting the run agent — before the agent\nstarts — and REFUSES a dispatch whose scope clashes (dispose the lease,\nfail with the conflict), rather than raci\n[…]\nich settles their tasks, which releases their locks\nserver-side; TTL is the final backstop.\n\n19 new tests; full suite green (722).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-103/104): dispatch-time predictive locking + terminal release",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:27:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2bc92cfb4f4c05daef2e12fb49a180c438631176",
"body": "Phase 3 of runner-enforced file locking.\n\nRUN-101 (reactive per-edit hook): src/lock-hooks.ts ports the PLNR\nhook's path extraction and adds a driver-agnostic LockEnforcer. The\nClaude driver wires it as in-process PreToolUse (deny an edit to a\npeer-held path) + Stop (release) hooks via the SDK's hoo\n[…]\nlive-backend native locks apply\nper-edit too. Scope branch = the landing target (RUN-97 §5). 35 new\ntests; full suite green (715).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-101/102): guaranteed lock enforcement in spawned agents",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:20:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa11705d56c8cef6d7781c90c14e76ead7676d86",
"body": "Phase 2 of runner-enforced file locking. Adds lock/unlock/queryLocks to\nthe VcsBackend seam (optional — a backend with no lock layer omits them,\ncallers treat absence as 'no enforcement here', like checkClaimable).\n\n- LockClient (src/lock-client.ts): MCP-over-HTTP for the four Noriq lock\n tools, au\n[…]\nds.\n\nBranch scope = the run's landing target, not its throwaway worktree\nbranch (RUN-97 §5). 26 new tests; full suite green (694).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-98/99/100): file-lock capability on the VcsBackend seam",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-20T01:03:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a59e1b50d76304be4d2d4e9eb0356f3363eb6f5e",
"body": null,
"is_bot": false,
"headline": "v0.10.1",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-18T22:18:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "298a2e24ecd7dee37f6321426393963e26d4a7bc",
"body": "…ibution moves to the body\n\n'noriq run <id>: <label>' made every agent commit read identically in\none-line history — the id nobody scans pushed the task key/title\neverybody scans off the right edge. Subject is now the label (task key\n+ title, brief, 'landing fix', …); 'noriq run <id>' rides the body\n[…]\nMessage) for all three checkpoint sites. Perforce\nchangelist descriptions keep their exact 'noriq run <id>' marker — the\nreap parses that shape.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(RUN-96): checkpoint commits lead with WHAT changed; runner attr…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-18T22:17:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "078c331c94be0799cf2b33a835dd3916a5b1faf8",
"body": "…ormalized spelling\n\ngit porcelain prints forward slashes where the daemon builds platform\nones, so worktreeRegistered's verbatim compare read a registered\nworktree as absent on Windows and the adopt path ran 'worktree add'\ninto its own checkout — every Windows continue failed, and windows CI\nwith it (red since v0.9.0). comparableWorktreePath unifies slashes,\nrealpaths the 8.3/long split where the path exists, and case-folds on\nwin32.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-95): Windows continue-run adopt — compare worktree paths by n…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-18T20:08:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3a2c3eb7bd333fface0e83d4ae3f8a59fc32ba2b",
"body": null,
"is_bot": false,
"headline": "v0.10.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-18T19:44:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c17a755b86929ef79f9ec2a04ea0b98cdda6840",
"body": "… becomes a committed knob\n\nRUN-29's fail→fix→re-verify loop was bounded by a hardcoded K=2; a repo\ncould neither widen it (long-tail suites) nor narrow it to a pure gate.\nSame shape as [verify.agent].maxRounds: int 0–5, default 2 (unchanged\nbehavior), 0 = verdict only, no hand-back. Applies whereve\n[…]\ncks the real bound. noriq init asks for it alongside\nshell/timeout; shared schema vendored from planar branch\nnoriq/verify-max-rounds (783f835).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-94): [verify] maxRounds — the deterministic floor's fix loop…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-18T19:07:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "49500e76719d7a8d5902cf5aa44217931bbc8924",
"body": null,
"is_bot": false,
"headline": "v0.9.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T20:36:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb4d9449e1e987ef3f049a47fa1f689bbd4fe053",
"body": "…e adopts the run's work\n\nRUN-91 made a continue reuse the kept worktree, but only for git\n(worktree.ts adopts an existing run-branch). On the server-backed\nbackends a re-dispatch of the same run id would fail — and Montana's\nPrototype dogfooding runs on Diversion. The uniform contract is now\n\"lease\n[…]\ne Perforce path warrants a live-p4d confirmation before\nheavy reliance; the primitives are the measured ones, the ordering is new.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-93): continue on server-backed VCS — Diversion/Perforce leas…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T20:25:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9a429f577b3231ef3a3549d818bd283ecf9e77e",
"body": "…ion ledger\n\nFollow-up to RUN-91. RUN-91 adopts the kept worktree, but the runner's\nper-run state is in-memory and gone once a run terminates, so a\ncontinuation lost two continuities:\n\n- SPEND: a fresh RunTally reported only this sitting's tokens/usd, and\n recordRunTelemetry (COALESCE takes the fra\n[…]\nund 1, the persist-on-fail / clear-on-pass lifecycle, and the\nstore's on-disk round-trip + corrupt-file degrade. Full check green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-92): continuation continuity — re-seed spend + the adjudicat…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T20:17:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ffa07b449978c5d1e9433b1fb7c474facc0d5627",
"body": "…budget.maxRounds\n\nThe runner half of \"continue a failed run\" (server + UI is PLNR-180). A\ngate-failed build is kept, not disposed, so its branch and worktree\nsurvive on disk; the server re-dispatches the SAME run id with\nbudget.maxRounds set, and — per the contract — \"resume\" is inferred by\nthe dae\n[…]\n,\nbut a fixed finding refutes against the kept tree), and continue on the\nserver-backed VCS backends (adoption is git-only today).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-91): continue a failed run — adopt the kept worktree, spend …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T18:54:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9d7db9b30f0ae85231831dd54eeed64f1fdb17ef",
"body": "The vendored contract had drifted since planar's RUN-59 server work:\n`RunModelMix`/`RunModelUsage` were name-swapped (runner had Usage=value,\nMix=map; planar has Mix=value, Usage=map), and planar had since added\nUNATTRIBUTED_MODEL_ID, the '(un)attributed' bucket doc, the 'failed'\ntask status, a `mod\n[…]\nly writes the mix via telemetry, so its test literal is null.\n\nTest budget literals carry maxRounds; full check green (655 tests).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(RUN-87): refresh vendored @noriq-dev/shared from planar main",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T18:41:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8ac0e506e9d44f03254c1b77874ac850352e0cb0",
"body": "The RUN-66 run failed after both fix rounds over eight findings that\nwere all one invariant (\"Enter-through is a no-op\") leaking through\neight unlike mechanisms. The builder patched sites one at a time; the\nreviewer enumerated the family faster than the round budget could close\nit — structural non-c\n[…]\nmechanisms + one named broken\npromise) so it stays a disciplined finding, not a \"feels systemic\"\nescape hatch. Prompt tests green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-90): reviewer names the invariant-class, not N instances",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T16:13:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "40e8adbaa6fef2998981e43594772a16d0843e07",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.8.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T08:34:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2cc6a10ca597bb6891ec4e7467af4c3165b03a89",
"body": "…class costs one number\n\nBoth RUN-66 and RUN-88 died in the TERMINAL review — the one with no fix\nbudget behind it — on findings raised there for the first time, both\n[medium], neither ever fixable or contestable by the builder.\n\nThe revert test. RUN-76 already said pre-existing code is \"not this\nau\n[…]\nrchitectural pivot in two\nrounds. It should now fail in round 1 with the cause named rather than\nburn three rounds discovering it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-89): the reviewer's scope test is mechanical, and a finding …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T08:34:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "992035367bd3b19a248a6b1a81cb20feeae6f64c",
"body": "The runner landed RUN-65 (\"Advanced permissions: curate the build\nallowlist and network — never the floor\") on the plan branch, plus its\nreviewer fix round. It adds a [permissions] advanced section, the\n`defaultBranch` identity section, and 30 tests.\n\nConflicts were both additive (ManifestChoices fi\n[…]\nator is asked about a stream. Pinned by assertions in\nthe Perforce flow test.\n\n625 → 655 tests (RUN-65's 30), npm run check green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Merge RUN-65 (advanced permissions) from the curated-marker plan branch",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T07:59:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "48e96aa0de082282a294b5d556f683c56a841734",
"body": null,
"is_bot": false,
"headline": "v0.7.1",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T07:50:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48cdec5228feac1de660549e3d451e76897daf51",
"body": "…t, not \"not reported\"\n\nRunTally made a run's model mix all-or-nothing (RUN-59): one spending\nsession with no per-model attribution dropped the WHOLE mix. With\n[verify.agent] tool = codex, every build spawns a codex reviewer, and\ncodex reports tokens with no per-model split and no cost — so a Claude\n[…]\nv/shared (drivers/types.ts) and pinned by a test until the\nvendored slice is refreshed (RUN-87); the dashboard render is PLNR-179.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-86): fold un-attributable spend into an (unattributed) bucke…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T07:47:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d27c4158bd9621440e6666c0f0e7a145d23cce81",
"body": "…tion\n\nThe guided marker detected a Diversion workspace but still asked to land\nthe \"rebased\" result, to resolve \"rebase\" conflicts, to \"push\" to a\n\"remote\", warned about `git log origin/main..main`, and closed with\n`git add && git commit` — none of which fit a backend with no rebase,\nwhose publish \n[…]\nway. Git renders byte-for-byte as before — it is the\ndetection fallback.\n\nDaemon-side MR flow is still git+gh — tracked as RUN-85.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-84): init-project speaks the detected VCS, not git-by-assump…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T07:24:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1a499d605b354c801e60548ae05fc480912f3d04",
"body": null,
"is_bot": false,
"headline": "noriq run run_mroll8m25i054d5l5w70: reviewer fix round 1",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T07:21:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb2b095518f7391b59c9a6a2e2d8779b45cf6efd",
"body": "…te the build allowlist and network — never the floor",
"is_bot": false,
"headline": "noriq run run_mroll8m25i054d5l5w70: RUN-65 Advanced permissions: cura…",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T07:15:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a69d6bf18ea57b15c39fb8fe2cf0d1d001b85573",
"body": "Merges the curated-init-project plan (RUN-56 rework, RUN-62/63/64 --advanced\noptions + per-kind [defaults], RUN-59 model-usage telemetry) with the reviewer-\ngate + daemon work landed since 0.6.0 (RUN-78 workspace-boundary rule, RUN-79\nadjudication ledger, RUN-81 phase-gate backstop, RUN-82 plan-branch fork base,\nRUN-83 task-lifecycle owned by the run).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.7.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T06:48:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a0089cf3c5a341209e3bb214fbd6ad6da606eb22",
"body": "# Conflicts:\n#\tsrc/supervisor.ts",
"is_bot": false,
"headline": "Merge branch 'noriq/plan-the-curated-marker-init-project--3l5257'",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T06:42:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17c460349b3999fc1b2a4a232b36d065633ca075",
"body": "A build agent called release_task(review) when it finished, BEFORE the daemon's\nverify/reviewer gate ran. A gate FAILURE then left the task stranded in `review`,\nindistinguishable from work genuinely awaiting a human. The task's lifecycle\nbelongs to the run's terminal outcome, not the agent.\n\nDroppe\n[…]\nInert on its own — the server counterpart (transitionRun authoritative + a new\n`failed` task status) lands alongside in planar. 566 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-83): build agent no longer moves its anchor task — the run does",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T06:13:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9066c742fad4882137863dbdd42b4720ecb7b4c7",
"body": "A runner agent hit this on RUN-64: its worktree forked from HEAD (main) while the\ntasks it built on (RUN-62/63) had landed only on the plan branch, so it could not\nsee the work it depended on and had to mirror the plan branch's files by hand. The\nreview diff then double-counted the predecessors and \n[…]\nre you land), but such runs' review/verify diffs become \"vs the integration\nbranch\" rather than \"vs main\".\n\n566 tests green (+6); bundle builds.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-82): fork a plan run's worktree from the [land] branch, not main",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T06:00:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7a11618d61f5cede5536b60252af38184da40a24",
"body": "…ble task\n\nRUN-59 (phase 1 of a plan) passed the verifier into REVIEW — not done/approved —\nso phase 2 should have stayed locked. The runner spawned an agent on a phase-2\ntask and continued. The primary cause is server-side (removing plan-task\ndependency edges left claim_task to enforce phase order,\n[…]\ns to report the gate the running agent's own claim would skip.\n\n560 tests green (5 supervisor gate cases + 4 client probe cases); bundle builds.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-81): daemon phase-gate backstop — don't spawn on a non-claima…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T05:14:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e4f5a7effb76d7703872f65947f5965373ad4c88",
"body": "… `[land]` envelope, one typed answer at a time",
"is_bot": false,
"headline": "noriq run run_mrofmeas5x305d1s483q: RUN-64 Advanced landing: walk the…",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:46:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f24eaf5a2466344979073f2d5f9a3b0db99b06d9",
"body": null,
"is_bot": false,
"headline": "noriq run run_mrof7aay3v3q0d4a2g5m: reviewer fix round 1",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:25:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "633a31078cff07c9f9a41f22c0dd73a438e075de",
"body": "…hell pin, timeout, reviewer effort & rounds",
"is_bot": false,
"headline": "noriq run run_mrof7aay3v3q0d4a2g5m: RUN-63 Advanced verify options: s…",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:25:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c7ba619e6688088379c202ccd1b481b9cabe665",
"body": "… the fork, plus per-kind `[defaults]` model & effort",
"is_bot": false,
"headline": "noriq run run_mrof7a1y0i4y2m3l024z: RUN-62 `init-project --advanced`:…",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:22:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df3388807b6b00769433597386cb1e5976b99ab6",
"body": "…op clumping\n\nRUN-77 made intra-turn text byte-faithful (verified live: the vendored CLI\ndelivers text_delta with newlines intact). The remaining clump was BETWEEN\nturns: distinct assistant responses separated by tool calls carry no newline\n— the model never emits one — so raw concatenation reads\n\"…\n[…]\ny byte-exact —\nthe break is inserted at the source of truth for boundaries and rendered by\nthe dashboard's breaks-aware markdown as a paragraph.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-80): paragraph break between assistant turns — transcripts st…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:20:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "df27320c6cbc34d0d72d3734a3296ecbe3e66c7a",
"body": null,
"is_bot": false,
"headline": "noriq run run_mrodyo5g0b4x515k1z17: reviewer fix round 1",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6bcef62a1c6cc8f71ba599f41cd413925c84ae2",
"body": "…models it ACTUALLY used, not just which one was asked for",
"is_bot": false,
"headline": "noriq run run_mrodyo5g0b4x515k1z17: RUN-59 A run should report which …",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99326878260b036bbeae39463e0927e0438415d4",
"body": "Reviewer gate hardening: workspace-boundary rule (RUN-78) — cross-repo/service\nrequirements are follow-up, not findings; and the cross-round adjudication ledger\n(RUN-79) — prior findings + the builder's pointer-based rebuttal ride to each fresh\nreviewer, so a settled finding is verified, not relitigated.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.6.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a8e643f756022e9cbdd9855dad3dde4926bcf0d9",
"body": "… being relitigated\n\nEvery reviewer round is a fresh, stateless session by design (RUN-61) — but total\namnesia also erased what was already ADJUDICATED, so runs re-raised findings the\nbuilder had already answered with evidence (RUN-56 twice, RUN-59's cross-repo P1\nafter two rebuttals). The builder i\n[…]\nof scope: no third-party adjudicator, no FAIL-vote de-duplication,\nmaxRounds untouched — all tracked for after this + RUN-78 measure in dogfood.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-79): cross-round adjudication ledger — settled findings stop…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "08114413258d7948b45093c7b4c4d8a7ce15abda",
"body": "…not findings\n\nRUN-76 scoped the gate to the diff, but when the intent itself names deliverables\nthat live outside this tree, the prompt gave no rule and fresh reviewers split on\nit. RUN-59 dogfood: rounds 1/3 FAILed a run over a D1 migration + dashboard UI the\nrunner repo can never carry (it is sta\n[…]\nes elsewhere.\n\nRationale on the call sites; tests assert the boundary language and its\nparticipation carve-out in both prompts. 526 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-78): reviewer/verify gate — cross-workspace requirements are …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "46d9fabf401ac1817d19b2126e93a123291b8fef",
"body": "RUN-77 (56b9bd3 / 2640225) landed new test lines over the 110-col limit; both\nits CI runs failed the biome format gate and were pushed to main anyway, so\nmain has been red since. Pure line-wrapping — no tokens or assertions change.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: biome-format RUN-77's test additions (main was red)",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0fe977b398311650d6242fc1bac292c62a39517f",
"body": "Codex was already correct — its only text source is the raw\nagentMessageDelta stream, with no assembled-message path to drop newlines\n(unlike claude before this task). Add a parity test that concatenates\ndeltas split mid-word and at newline boundaries and asserts the model's\nbytes survive exactly, so a future refactor can't regress it silently.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(RUN-77): pin codex transcript byte-faithfulness (newlines intact)",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fc23bafdc533bc7849400080f59db5daaf553c73",
"body": "…'s newlines\n\nThe claude driver built transcript text from each assembled `assistant`\nmessage via extractText, which joins content blocks with '' and drops the\nnewlines the model put between them. Invisible in one-line prose, but it\ncollapsed a whole bulleted review into a single paragraph on the da\n[…]\named, so a transport without\npartial messages (and the existing tests) behave unchanged. thinking_delta\nis filtered out — it is not agent prose.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-77): stream raw text deltas so the transcript keeps the model…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:10:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "985c2fed5442a8bce7378e456955d0cc4b69faa4",
"body": "…op clumping\n\nRUN-77 made intra-turn text byte-faithful (verified live: the vendored CLI\ndelivers text_delta with newlines intact). The remaining clump was BETWEEN\nturns: distinct assistant responses separated by tool calls carry no newline\n— the model never emits one — so raw concatenation reads\n\"…\n[…]\ny byte-exact —\nthe break is inserted at the source of truth for boundaries and rendered by\nthe dashboard's breaks-aware markdown as a paragraph.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-80): paragraph break between assistant turns — transcripts st…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T04:01:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e4ccf9fc700e1d72e74610973417883b244dffd",
"body": "Reviewer gate hardening: workspace-boundary rule (RUN-78) — cross-repo/service\nrequirements are follow-up, not findings; and the cross-round adjudication ledger\n(RUN-79) — prior findings + the builder's pointer-based rebuttal ride to each fresh\nreviewer, so a settled finding is verified, not relitigated.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.6.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T03:34:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1d2d60c3c7d8c1a09e90487351e4100a9bcddb24",
"body": "… being relitigated\n\nEvery reviewer round is a fresh, stateless session by design (RUN-61) — but total\namnesia also erased what was already ADJUDICATED, so runs re-raised findings the\nbuilder had already answered with evidence (RUN-56 twice, RUN-59's cross-repo P1\nafter two rebuttals). The builder i\n[…]\nof scope: no third-party adjudicator, no FAIL-vote de-duplication,\nmaxRounds untouched — all tracked for after this + RUN-78 measure in dogfood.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-79): cross-round adjudication ledger — settled findings stop…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T03:33:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4f79f35bde687db23905baf713e0daa066ae1d7a",
"body": "…not findings\n\nRUN-76 scoped the gate to the diff, but when the intent itself names deliverables\nthat live outside this tree, the prompt gave no rule and fresh reviewers split on\nit. RUN-59 dogfood: rounds 1/3 FAILed a run over a D1 migration + dashboard UI the\nrunner repo can never carry (it is sta\n[…]\nes elsewhere.\n\nRationale on the call sites; tests assert the boundary language and its\nparticipation carve-out in both prompts. 526 tests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-78): reviewer/verify gate — cross-workspace requirements are …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T03:17:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "48906e169308f67d965215615668e4b130b14d06",
"body": "RUN-77 (56b9bd3 / 2640225) landed new test lines over the 110-col limit; both\nits CI runs failed the biome format gate and were pushed to main anyway, so\nmain has been red since. Pure line-wrapping — no tokens or assertions change.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: biome-format RUN-77's test additions (main was red)",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T03:17:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2640225981c826f4d06a42372aab85c4168627db",
"body": "Codex was already correct — its only text source is the raw\nagentMessageDelta stream, with no assembled-message path to drop newlines\n(unlike claude before this task). Add a parity test that concatenates\ndeltas split mid-word and at newline boundaries and asserts the model's\nbytes survive exactly, so a future refactor can't regress it silently.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(RUN-77): pin codex transcript byte-faithfulness (newlines intact)",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T02:31:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "56b9bd305dce74809722b64b5d45965fe4d5c7a3",
"body": "…'s newlines\n\nThe claude driver built transcript text from each assembled `assistant`\nmessage via extractText, which joins content blocks with '' and drops the\nnewlines the model put between them. Invisible in one-line prose, but it\ncollapsed a whole bulleted review into a single paragraph on the da\n[…]\named, so a transport without\npartial messages (and the existing tests) behave unchanged. thinking_delta\nis filtered out — it is not agent prose.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-77): stream raw text deltas so the transcript keeps the model…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T02:28:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "abfc44a85a0734b34a949e31acbd2d2b78d581ae",
"body": null,
"is_bot": false,
"headline": "noriq run run_mroazpfk3d704r0i4e6j: reviewer fix round 1",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T02:26:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "261e0f279af73d9e28c50ef83446d2bb90aa137f",
"body": "…` — guided .noriq/project.toml, the last hand-written TOML",
"is_bot": false,
"headline": "noriq run run_mroazpfk3d704r0i4e6j: RUN-56 `noriq-runner init-project…",
"author_name": "Noriq Runner",
"author_login": null,
"committed_at": "2026-07-17T02:24:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66caab422866384f9ed215fadbbd731dd405e4d6",
"body": "Reviewer/verify gate scoped to the diff, intent treated as a floor not a\nceiling (RUN-76) — stops the fresh reviewer flagging pre-existing code and\nextra behavior, restoring a reachable PASS.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.5.3",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T02:11:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fe9e7126935ba05158273582cc7b77d2691d14b5",
"body": "…floor\n\nThe inline reviewer (RUN-61) and the dispatched verify agent (RUN-20) were\ndriving good runs to a terminal FAIL. Each round spawns a fresh, stateless\nreviewer that read whole changed files and flagged PRE-EXISTING committed code\nas if this run wrote it, measured against a literal brief a lat\n[…]\nd end-to-end; 524 tests green.\n\nMove 2 (cross-round adjudication ledger) and the maxRounds budget are tracked\nfollow-ups, deliberately not here.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-76): scope the reviewer/verify gate to the diff, intent as a …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T02:10:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7da0ad41102b51700e45e511d192f10bb808c873",
"body": "The conflict prompt spoke git: \"being rebased onto X\", \"git rebase\n--continue\", \"worktree\". But agent conflict-resolution runs on any backend\nwhose conflicts are editable files — the vcs/ seam is built on the integration\nOUTCOME, not git verbs (a server-side-conflict backend sets resolveUrl and\nneve\n[…]\ntrality + parseResolution) and a non-git assertion for the\nverify prompt; documented the agnosticism rule in prompts/README.md. 521 tests\ngreen.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(prompts): make agent prompts VCS/driver-agnostic",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T01:40:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "86967f24119ad367fc9bd67f60aeb68900c8abc9",
"body": "`npm version` rewrites package.json in npm's canonical style (arrays expanded\none item per line), which fails `biome check` — the publish gate died on the\nformatter for v0.5.1 and v0.5.2 before ever reaching npm. Re-cut of v0.5.2\nrides this commit.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: biome-format package.json after the npm version rewrite",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T01:26:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ab2c2a4d0f2701508453d9d6eb054d278cce0113",
"body": null,
"is_bot": false,
"headline": "cut v0.5.2",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T01:22:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd8925d3749965b2cc10500239b4efdb8def85ab",
"body": null,
"is_bot": false,
"headline": "Prompt improvements",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T01:22:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a437ef45aa9ffe88bbd0d714b0e10767fbab02d",
"body": null,
"is_bot": false,
"headline": "v0.5.1",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T00:41:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "455903110f41902a1c5509171c3bb6d6ce1f449e",
"body": "…blish\n\nA builder's fix turn writes to the working tree, but two downstream gates read\nCOMMITTED state — the inline reviewer via `git diff base...HEAD`, and landing via\npublish's fast-forward. So a fix was invisible to the fresh reviewer (which re-read\nthe same commit and re-reported the same findin\n[…]\nion the rebase gate had just rejected). Fold the worktree into the\nbranch before each handoff; a clean tree is a no-op checkpoint.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: commit working-tree fixes before re-review and before landing pu…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T00:41:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "14e9a80401a507080989c64874d72317d4088402",
"body": "The words an agent is handed were scattered across six template literals in five\nfiles; tuning a sentence meant finding it in code. Now prompts/ holds one markdown\nfile per voice (identity/scope/build, verify-agent, reviewer, the two feedback\nturns, conflict, resume) and src/prompts.ts renders them \n[…]\nk, so editing a template\nneeds no build step. Rendered output is byte-identical — the existing prompt\nassertions across the suite are the proof.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: consolidate every static prompt into prompts/*.md templates",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T00:30:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2151f549a54e1bccb3f8f251e494ba888d8cc9cc",
"body": "The run transcript (RUN-74): the daemon streams every voice in a run — builder turns,\neach inline-reviewer round, the verify command's outcome, daemon milestones — as an\nappend-only role-labeled run.log stream, so a refusal is readable from the dashboard.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.5.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-17T00:02:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f5415f95609b96d5c29b7c0120ed79bb32edacda",
"body": "…hboard, in order\n\nDogfood pain: both builds were refused by the inline reviewer and the dashboard could not\nsay why — only the core agent's rolling logTail ever left this daemon; the reviewer's\nreport, the verify command's output, and the fix rounds were invisible.\n\nRunTranscript (src/transcript.ts\n[…]\nished' close. New run.log frame via ws-client; logTail unchanged as the live\npreview. Old server drops the unknown frame — compatible both ways.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-74): stream the run TRANSCRIPT — every voice reaches the das…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T23:54:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e7357c12b9274b8d1b7f661de0a39ec313f41e04",
"body": "Codex works again on current CLIs: app-server protocol drift (≥0.144) + silently\ndropped JSON-RPC error responses (RUN-72), a killed/verdict-less reviewer is\nno-judgment rather than a refusal, and the daemon speaks MCP with a real session —\nrestoring anchor-task prompts and the gate comments (RUN-73).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.4.1",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T22:38:38Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e1a380e18c0ba361f1ef8b8232f895d1a0aff3a3",
"body": "…calls are now refused\n\nThe server started requiring initialize-first (sessionless calls are not attributable),\nand the daemon's mcpCall was a bare tools/call: get_task 400'd, so anchor prompts\ndegraded to bare ids — and add_comment rode the same path, so every gate comment\n(verify failure, reviewer\n[…]\n drops the session and retries ONCE after a\nfresh handshake. Worker isolates recycle sessions at will, so the retry is load-bearing,\nnot polish.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-73): the daemon speaks MCP with a real session — sessionless …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T22:36:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5012b519c354d4b007b9730aff5aee73876a8020",
"body": "…led-reviewer-reads-as-refusal\n\nFound live: the inline reviewer sat 15 minutes at zero CPU while its run hung in\n'verifying'. Two layers, confirmed by driving a real app-server by hand (0.144.5):\n\nThe transport dropped JSON-RPC error RESPONSES — {id, error} has neither 'result' nor\n'method', so a re\n[…]\nk. The adversarial default holds — the run still cannot pass unjudged.\n\nNot the model name: gpt-5.6-sol is valid and answered a live probe turn.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-72): codex ≥0.144 protocol drift, dropped RPC errors, and kil…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T22:36:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "365130f473ea51acfc5e35366a6ab6db177771bf",
"body": "The board lock: .noriq/project.toml gains optional `board` (RUN-71) — lock a repo's\nwork to one board within its project, the way `key` locks it to the project.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.4.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T21:19:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f771aa102577e23e0b80741bf79de2d7da7f0b5b",
"body": "… one board\n\n`key` pins a repo to a project; `board` is the same idea one level down. The marker\ncarries a committed board NAME (ids are server-local; this file travels), discovery passes\nit through verbatim, and registration advertises it per repo — the server resolves it and\nlands the repo's agent\n[…]\nrdId). Old server + new runner: the unknown field is stripped;\nnew server + old runner: defaults null. No behavior change until both sides ship.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-71): project.toml optional `board` — lock the repo's work to…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T21:12:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a747c99ac9b38686c85a6d8e062adaf20f23d176",
"body": "…indows\n\ndetectVcs probes path.join(root, '.git'); the fakes compared against\n'/root/.git' literally, so on windows-latest the probe (backslashes) never\nmatched, every root fell through to the dv registry, and the two precedence\ntests failed — RUN-42's exact lesson, re-learned inside a test fixture. The\nproduct code was correct; the fakes now compare against the OS's own join.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: vcs-detect test fakes match what path.join actually produces on W…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T20:05:17Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "564de17a5819c54cf1d051d9c4122ee8c8d72024",
"body": "…sted publishing\n\nTwo things the v0.3.0 cut surfaced:\n\n1. CI has been red since the init-project tests landed, and only on GitHub:\n runInitProject called detectTools() directly, so on a box with no\n claude/codex on PATH the \"Agent driver\" question silently disappears and\n every positional cann\n[…]\nage.json version, full check, and the packed-binary smoke asserting on\n output (the 0.2.0 lesson) — all before publish. Provenance rides free.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: fix the wizard suite on runners without CLIs; publish via npm tru…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T20:02:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc33a52d8d3be660bf9434ac46dfcf66a5488127",
"body": "The VCS-split release, plus the verify stage growing up:\n- Pluggable source control (RUN-49/50/54/55/51/60/52): nine-outcome VcsBackend,\n git + Diversion + Perforce (live-accepted), per-repo detection and routing.\n- The verify stage is a choice (RUN-61): cmd floor, inline reviewer agent with\n its \n[…]\no the driver's auto mode (RUN-68).\n- noriq-runner init-project (RUN-56); npm-bin entry-guard fix + packed-tarball\n CI smoke (the 0.2.0 lesson).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: v0.3.0",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T19:58:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ce27d359fef1b81f0e66632985c00a3090812a6e",
"body": "…different driver\n\nThe strongest form of the reviewer's independence: not just a fresh session, a\ndifferent VENDOR's model judging the work — codex reviewing claude's diff, or\nthe reverse. Null = the run's own driver, unchanged.\n\nTwo sharp edges, both deliberate:\n- A configured tool with no driver o\n[…]\niq/run-70 (aeb029d, off the freshly-merged main —\nrun-47/61/68 all landed upstream while this was in flight); re-vendored.\n490 tests / 36 files.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-70): [verify.agent].tool — the inline reviewer may run on a …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T19:54:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eb7d898e63002929710f7812eb4228eb78b45d9b",
"body": "…an + the dependency pair\n\nA live scope run promised in its plan body to cut the five artifact RUN-59\nedges its enforced phase ordering minted, then found its floor denies\nremove_dependency — and update_plan too, so it could not even amend the\npromise. It raise_alerted (correctly) and the cost lande\n[…]\nrun had\nto work it out and could only apologize — and tells the agent to record any\nunavailable cleanup in the plan body rather than promise it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-69): scope's floor lets it TEND the plan it mints — update_pl…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T18:39:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ae875c018115dae19c19a0e56831d83c03e04984",
"body": "…ver's auto mode\n\n\"Bare Bash and danger-full-access are never granted\" becomes \"never granted\nUNINVITED\": a repo's committed manifest may now opt a kind into the driver's\nown auto mode — Claude bypass-permissions; codex danger-full-access — instead\nof the curated allowlist. Default false, and the de\n[…]\nmd, and CLAUDE.md's invariant list.\n\nSchema on planar branch noriq/run-68 (1f52132, stacked on noriq/run-61);\nre-vendored. 486 tests / 36 files.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-68): [permissions.<kind>].auto — committed opt-in to the dri…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T18:32:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ca55b0d87215b3fd006120969a6246755a509452",
"body": "…d for now\n\nThe repo carries its own .noriq/project.toml (key RUN, npm run check floor +\nthe RUN-61 inline reviewer) so the runner can supervise work on itself. A\nmarker is normally COMMITTED — ignored here deliberately while the loop gets\nshaken out; drop the ignore line to share it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: ignore .noriq/ — the runner dogfoods itself, marker uncommitte…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T18:12:26Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9546ab97d0b20ca68b10866e5ba2ff9da5d26fb0",
"body": "…eviewer agent, both, or none\n\nA static command was the only inline gate, and for complex projects \"the tests\npass\" is a much weaker claim than \"this diff satisfies the intent\". [verify] now\nexpresses a per-repo choice by what it contains: omit it = no verify stage (the\nhuman is the gate); cmd = the\n[…]\nmodel.ts picks up\nPLNR-126's dueAt drift). init-project asks the choice; every .cmd call site\nnarrows through cmdVerify(). 483 tests / 36 files.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-61): the verify stage becomes a choice — cmd floor, inline r…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T18:08:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cef3e311b94c453a0c23356a94a676e14e9b3a4b",
"body": "… verify get_briefing join it\n\nThe daemon now sends noriqToolNamesFor(kind) with createRunAgent, and the server\nadvertises (and registers) exactly that list for the run agent's credential — the\ncatalogue the model sees and the allowlist the drivers enforce become two views of\none policy, ending adve\n[…]\nwedTools, buildMcpServer floor filter). Older servers ignore the\nfield; older daemons omit it and their agents see the full catalogue as before.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-47): declare the Noriq tool floor to the server; heartbeat +…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T17:30:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eba928615f0ab048cafa7f137c9ec5bab6cd1ddf",
"body": "…ude-only\n\nnoriqToolsFor lived in drivers/claude.ts and nothing else read it, so the\nper-kind Noriq floor — scope proposes but cannot claim; build claims but\ncannot mint plans; verify reads and comments but never mutates — was quietly\na property of ONE DRIVER. The same verify run on codex had every \n[…]\n and the tests pin the exact -c argument per kind,\nmirroring the claude floor tool-for-tool from the single policy.\n\n454/35 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(RUN-46): the per-kind Noriq tool floor reaches codex — it was Cla…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T16:47:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1b45af7f34026ca8b107260df8a5fe96ddefdd4c",
"body": "… live p4d\n\nBuilt on RUN-55's measurements and then PROVEN live: the real backend drove\na real p4d through the full cycle — lease → agent write → checkpoint(shelve)\n→ integrate → publish(submit), landed; then the race (the server's own\nout-of-date refusal → {race}); then a real conflict: paths repor\n[…]\nouted per repo like Diversion, one instance per repo or the lease\ndies. THREAT-MODEL.md carries the Perforce table.\n\n451/35 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-52): PerforceBackend — the third backend, accepted against a…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T16:38:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11f19c8ffc4810139f5bae5ee7720f8202d8e372",
"body": "DiversionBackend was a proven passenger with no vehicle — the daemon\nhardcoded GitBackend for every repo. Now each discovered repo is detected\nand routed, and DETECTION is the mechanism, never a manifest field: a\ncommitted `vcs = \"git\"` in the wrong checkout is a lie the daemon would\ntrust, and the \n[…]\n workspaces → diversion with correct repo\nids through the /home symlink, unknown roots → git fallback with a reason.\n431/34 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-60): the daemon routes each repo to its VcsBackend by detection",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T16:14:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0c6161cc4804114f862b62b77e9b111b045b2520",
"body": "…backend\n\nThe second VcsBackend, and the seam-finder the plan wanted: no rebase, no\nfast-forward, no honest server-side CAS, conflicts that are not files — and\nthe nine outcomes hold anyway. Grounded end to end: RUN-54 measured the\nserver's behaviour (VCS-SPIKE.md §9), the API mapping was read from\n\n[…]\n NOT yet wired into the daemon — backend selection per repo\nis filed separately; GitBackend remains the only routed backend today.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-51): DiversionBackend — the interface survives a live-model …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T16:03:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "474c981a083b61e7aa968393468899c00ff13df3",
"body": "…location\n\nThe trap, demonstrated by real server data during RUN-55: one Perforce -Mj\nresolve object carries clientFile (a filesystem path) and //depot/shared.txt\nside by side — and a depot path satisfies BOTH startsWith('/') (RUN-42's bug)\nand path.isAbsolute() (RUN-42's fix) while being no path at\n[…]\nmpt still assembles\n`git diff` text — prompt assembly becomes backend-aware when a second backend\nexists to need it. 402/32 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(RUN-50): Workspace splits the local path from the backend's …",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T15:17:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3d326f04c1f6b46a69326fe01e52fdcc7f635f3a",
"body": "Stood up a real p4d (2024.2, license-free at this scale) in a scratch dir:\ntwo curls and one command. The plan's \"long pole\" was a fear, not a fact.\nVCS-SPIKE.md §10 is the addendum.\n\nThe headline: Diversion and Perforce swap places. Everything the paper spike\nfeared about Perforce is native and scr\n[…]\ncorded: keep RUN-52 after RUN-51, drop the mechanical half\nof the \"or never\" hedge — what remains of it is demand, not difficulty.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(RUN-55): Perforce hands-on — the difficulty ordering inverts",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T14:58:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "12ead4ead293aa4a9c61270d2acfd4529ca82f33",
"body": "…t a real server\n\nThe dv CLI was already on this box (v1.0.624, authenticated), so RUN-54's\ninfrastructure cost was zero and the discovery ran today, in a throwaway repo\ndeleted afterwards. VCS-SPIKE.md §9 is the addendum; §4 and §8 now point at it\nwhere it corrects them.\n\nThe headline: there is no \n[…]\nmand, no forge credential\n- everything is authored as the account — no per-invocation identity, no\n second credential to withhold\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(RUN-54): Diversion hands-on — the paper spike's §4 tested agains…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T14:50:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a7dfc4c5784210ce09ab9dfa7b1cc24238ff27ff",
"body": "…'s DI seam\n\nThe seam already existed — RunSupervisor's Pick<WorktreeManager> declared\nexactly what it needs from source control — so this renames it rather than\ndesigns it: src/vcs/types.ts names the nine outcomes (VcsBackend), and\nsrc/vcs/git.ts is git's implementation, a thin delegation over Work\n[…]\nsertion changed. Workspace stays an alias of WorktreeInfo: RUN-50 owns\nthe localPath/location split and nothing here pre-empts it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(RUN-49): extract the nine VCS outcomes behind the supervisor…",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-16T14:39:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a672b25e28744381145dfdaae6e294a438f155b8",
"body": "RUN-40 removed the hand-written-TOML cliff for runner.toml and left the other\nhalf standing: `init` set up the machine, then told you to copy 130 lines of\nproject.toml.example and edit it by hand. Same cliff, one step later.\n\nFollows RUN-40's three rules, which earned their place — validate before\nw\n[…]\nn).\n\nAlso fixes two more stale \"the daemon never pushes\" claims in\nproject.toml.example, and documents init-project in the README.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(RUN-56): `noriq-runner init-project` — the last hand-written TOML",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-15T18:57:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "10aeb9dff0ade9e62dce9de3ed2512910e3b7d63",
"body": "`npm version patch` rewrites package.json with its own formatter, which expands\nthe keywords/files arrays and disagrees with biome. Separated from the fix so\nthe fix commit stays about the fix.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "style: reformat package.json after the version bump",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-15T18:35:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2615711682febc751145292cce01caac41ac8cda",
"body": "v0.2.0 is unusable. `npm i -g @noriq-dev/runner && noriq-runner version`\nprints nothing and exits 0 — for every command, on every platform.\n\nThe entry guard compared `import.meta.url` to a raw `process.argv[1]`. Node\nresolves symlinks when it resolves a module, so import.meta.url is the real\npath; a\n[…]\nasserting on OUTPUT rather than exit code: the\nbug was exit 0.\n\nBumped to 0.2.1 — 0.2.0 cannot be fixed in place and does nothing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: the published binary never ran — entry guard vs npm's bin symlink",
"author_name": "Montana Tuska",
"author_login": null,
"committed_at": "2026-07-15T18:35:06Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 18,
"commits_last_year": 128,
"latest_release_at": "2026-07-20T20:43:46Z",
"latest_release_tag": "v0.13.2",
"releases_from_tags": true,
"days_since_last_push": 6,
"active_weeks_last_year": 2,
"days_since_latest_release": 6,
"mean_days_between_releases": 0.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"has_contributing": false,
"health_percentage": 25,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@noriq-dev/runner",
"exists": true,
"license": "MIT",
"keywords": [
"noriq",
"agents",
"claude",
"codex",
"coding-agent",
"daemon",
"cli"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@noriq-dev/runner",
"is_deprecated": false,
"latest_version": "0.13.2",
"repository_url": "https://github.com/noriq-dev/runner",
"versions_count": 20,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 3136,
"first_published_at": "2026-07-15T14:44:19.071000Z",
"latest_published_at": "2026-07-20T20:44:32.746000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 142651,
"source_files_sampled": 102,
"oversized_source_files": 2,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 9890
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 12,
"malicious_count": 0,
"assessed_package": "npm:@noriq-dev/runner@0.13.2",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@anthropic-ai/claude-agent-sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.3.0"
},
{
"name": "smol-toml",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.3.1"
},
{
"name": "ws",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.21.1"
},
{
"name": "zod",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "mtuska",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1342434?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish.yml"
],
"has_docs_dir": false,
"linter_configs": [
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 2,
"reason": "dependency not pinned by hash detected -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "6a9d9ada6fd2846aefc5cb5d1dfe42e0ed8e2adb",
"ran_at": "2026-07-27T13:10:33Z",
"aggregate_score": 3.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T20:44:36Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/noriq-dev/runner",
"host": "github.com",
"name": "runner",
"owner": "noriq-dev"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"security": 47,
"vitality": 68,
"community": 32,
"governance": 32,
"engineering": 60
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 68,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"commits_last_year": 128,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 2
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "2/52 weeks with commits",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 2
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "128 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 128
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"releases_count": 18,
"latest_release_tag": "v0.13.2",
"releases_from_tags": true,
"days_since_latest_release": 6,
"mean_days_between_releases": 0.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "18 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 18
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0.4 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 32,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 58,
"inputs": {
"packages": [
"@noriq-dev/runner"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 3136
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "3,136 downloads/month across npm",
"points": 46.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 3136,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 32,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"followers": 0,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "noriq-dev",
"public_repos": 3,
"account_age_days": 12
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "0 followers of noriq-dev",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "noriq-dev"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "3 public repos, account ~0 yr old",
"points": 4.4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 3
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@noriq-dev/runner"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "20 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 20
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 60,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 80,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "at_risk",
"name": "Documentation",
"note": null,
"notes": [],
"value": 30,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 47,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 34,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 3.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 2",
"points": 1,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@noriq-dev/runner@0.13.2 runtime dependency closure — what installing the published package pulls in — 12 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:@noriq-dev/runner@0.13.2",
"assessed": 12
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 12,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 12,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 79,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.76,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 9890
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "76 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 76,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0.81,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "81 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 81,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 2",
"points": 2,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 142651,
"source_files_sampled": 102,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/102 source files over 60KB",
"points": 53.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 102,
"oversized": 2
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-27T13:10:39.536239Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/noriq-dev/runner.svg",
"full_name": "noriq-dev/runner",
"license_state": "standard",
"license_spdx": "MIT"
}