-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbacklog.json
More file actions
1028 lines (1028 loc) · 50 KB
/
Copy pathbacklog.json
File metadata and controls
1028 lines (1028 loc) · 50 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"schema_version": 1,
"field_semantics": {
"status": "initial_historical_planning_snapshot",
"agent": "initial_historical_planning_snapshot",
"live_dispatch_authority": "GitHub Project #2 and current issue bodies",
"do_not_redispatch_from_snapshot": true
},
"issues": [
{
"key": "G01",
"title": "Prove Scale Set delivery, acquisition and drain contracts",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [],
"goal": "Select and pin a supported Scale Set integration path with demonstrated recovery at message acknowledgement, acquisition and JIT boundaries.",
"scope": "Isolated protocol spike and ADR; compare release v0.4.0 with audited commit cb0405b2d874500e75ae34eff8d582ab75956b45. Do not implement production providers or copy the demo shutdown policy.",
"tdd": [
"Red: fake session server reproduces ACK-before-callback crash and missing lifecycle callback.",
"Cover pre/post ACK, acquisition, >50 events, repeated/stale statistics, 202, 401/403/429, callback failure and session replacement with deterministic barriers.",
"Test idle-assignment races while drain withdraws capacity; mocks alone cannot prove server deregistration/acquisition behavior. Run an explicitly authorized disposable private live canary before closing the gate."
],
"acceptance": [
"Record exact module/runner versions and supported JIT bootstrap transports, including any secret exposure.",
"Choose high-level listener plus independent reconciliation OR a lower-level supported message loop; do not simply reverse ordering without evidence.",
"Document recoverable state versus quarantine for lost callback/request IDs; no exactly-once claim.",
"Publish sanitized live contract evidence or keep the gate unresolved; obtain independent Luna max protocol review."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Ready",
"test_profile": [
"offline",
"trusted-live-github"
],
"github_issue": {
"number": 1,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/1"
},
"release": "R1 - Internal MVP"
},
{
"key": "G02",
"title": "Prove local App enrollment and launchd credential access",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [],
"goal": "Resolve GitHub App Manifest loopback enrollment and the macOS credential/service identity contract with real platform evidence and a safe manual-import fallback.",
"scope": "Gate experiments and ADR only. Use disposable authorized Apps/org installations; do not alter production App settings, existing runners or disable FileVault.",
"tdd": [
"Red: reject wrong/expired/replayed state, duplicate callback parameters, wrong Host and forged installation IDs in a small harness.",
"Live-check disabled-webhook Manifest shape, HTTP loopback random-port redirect and two org installations; distinguish OAuth from Manifest.",
"Test Keychain read under actual signed/source-build launchd identity, screen lock, login/logout and reboot; identify file-based Keychain requirement for a system daemon."
],
"acceptance": [
"Confirm minimal org runner permissions, organization-owner installation requirement and per-org identity checks.",
"Decide login-scoped startup and dedicated controller/job identities; document cold-boot limitations and any narrow helper.",
"Manual App import works if Manifest is rejected; partial setup never silently creates extra Apps.",
"Publish sanitized results and explicit support matrix; no secret values or raw callback URLs/codes."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Ready",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 2,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/2"
},
"release": "R3 - General distribution",
"r1_subset": "G02-R1"
},
{
"key": "G03",
"title": "Bootstrap Go module and independent public CI",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [],
"goal": "Establish a reproducible Go development and TDD baseline whose public PR checks run without gh-runnerd, live GitHub credentials or local runner access.",
"scope": "Supported Go toolchain pin, module/package skeleton, formatting/vet/unit/race/fuzz-smoke/vulnerability checks and contribution commands; no runtime behavior.",
"tdd": [
"Verify a negative CI smoke in a temporary fixture (for example malformed Go fails formatting/compilation); do not invent application behavior for scaffolding. Meaningful application red/green evidence begins with G04 contracts.",
"Verify ordinary checks succeed with no App credentials and no Docker daemon.",
"Review workflow permissions and trusted/untrusted triggers; pin external actions to reviewed commits."
],
"acceptance": [
"Record toolchain and dependency policy, licence inventory and local commands.",
"CI uses hosted standard environments and cannot bootstrap-deadlock on this manager.",
"Skipped hardware/live suites are explicit and never represented as passed.",
"No product daemon is installed by tests."
],
"risk": "Medium",
"kind": "implementation",
"priority": "P1",
"status": "Ready",
"test_profile": [
"offline"
],
"github_issue": {
"number": 3,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/3"
},
"release": "R1 - Internal MVP"
},
{
"key": "G04",
"title": "Freeze CLI configuration, provider and scaling contracts",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [
"G01",
"G02",
"G03"
],
"goal": "Publish unambiguous versioned contracts for CLI configuration, provider capabilities, resource ownership and fixed/autoscale policies before parallel implementation.",
"scope": "Design/schema fixtures and interface contracts. Define fixed count and autoscale minTotal/maxTotal; defer idleBuffer. Include explicit existing Docker endpoint and trust domain.",
"tdd": [
"Red: invalid/negative limits, min greater than max, incompatible provider capabilities and duplicate pool IDs are rejected by contract fixtures.",
"Specify desired=min(maxTotal,max(minTotal,TotalAssignedJobs)); reducing below busy count affects admission only.",
"Table-test serialized request/response versions, unknown state and resource identity including process birth evidence."
],
"acceptance": [
"CLI --min maps to minTotal, not minimum idle workers; all docs/examples agree.",
"Define provider create/discover/inspect/retire/logs capabilities and owned-resource identity.",
"Document native controller/job identity and Docker DinD privilege profiles; an adapter cannot silently broaden trust.",
"Assign shared file ownership; independent provider implementation can proceed without redefining contracts.",
"Define runner freshness/security update ownership, staged refresh and rollback; a prohibited stale version must not receive new jobs."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline"
],
"github_issue": {
"number": 4,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/4"
},
"release": "R2 - Everyday operations"
},
{
"key": "G05",
"title": "Implement durable state and operation journal",
"stage": "M1 - Control plane",
"agent": "Luna max",
"dependencies": [
"G03",
"G04"
],
"goal": "Persist desired/observed worker state and side-effect intents so interrupted operations reconcile without uncontrolled duplicate workers or foreign-resource deletion.",
"scope": "SQLite schema/migrations, typed reducer and ownership ledger; no live provider side effects.",
"tdd": [
"Red: reopen a real temporary DB after kill points at intent commit, reservation, lost provider response and cleanup-before-commit.",
"Property/fuzz tests reject invalid transitions and keep unknown workers reserved.",
"Inject DB busy, disk-full, interrupted migration and PID/resource reuse; inspect old/new state after reopen."
],
"acceptance": [
"Stable identities include controller/org/pool/generation/immutable provider ID.",
"Intent is durable before side effect; retries are idempotent and ambiguous outcomes quarantine.",
"No credentials/JIT payload in DB; migrations have tested rollback/recovery policy.",
"Crash tests do not claim to simulate physical power loss unless actually tested."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline"
],
"github_issue": {
"number": 5,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/5"
},
"release": "R2 - Everyday operations"
},
{
"key": "G06",
"title": "Implement the supervised daemon and authorized local IPC",
"stage": "M1 - Control plane",
"agent": "Luna max",
"dependencies": [
"G05"
],
"goal": "Run one foreground daemon under supervision and authorize CLI commands through a private versioned Unix socket with durable operation identities.",
"scope": "Lock ownership, private socket, peer UID, server identity, bounded message parsing and durable mutations; no remote network control API.",
"tdd": [
"Red: duplicate daemon, wrong peer UID, job UID invoking the real CLI, wrong socket owner and symlink substitution cannot mutate state.",
"Test concurrent/replayed commands, stale epochs, invalid methods and oversized frames.",
"Kill daemon while clients are connected; reconnection returns accurate committed/uncommitted outcomes."
],
"acceptance": [
"Terminal/CLI exit does not stop managed workers.",
"No arbitrary shell/path/mint-token endpoint exists; every mutation is authorized.",
"A daemon restart cannot create a second owner or adopt manual runners.",
"No job-user access to control socket in the supported profile."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime"
],
"github_issue": {
"number": 6,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/6"
},
"release": "R2 - Everyday operations"
},
{
"key": "G07",
"title": "Implement GitHub App credential and installation binding",
"stage": "M1 - Control plane",
"agent": "Luna max",
"dependencies": [
"G02",
"G05"
],
"goal": "Authenticate each configured organization with a verified user-owned App installation while keeping management secrets local and out of all worker/control outputs.",
"scope": "Credential-store adapter, App import, canonical org/App binding, SDK refresh facade and safe rotation; no auto browser creation.",
"tdd": [
"Red: wrong org/App/personal/suspended/underprivileged installation is refused; only configured installations are used.",
"Fake full SDK auth chain, concurrent expiry, clock skew, 401 refresh, 403 revoke and per-org isolation.",
"Seed secret canaries into raw SDK response bodies/URLs/errors; verify absence from logs/status/DB/backend spawn.",
"Locked/denied Keychain fails closed; crash during key/profile swap preserves a recoverable old/new selection."
],
"acceptance": [
"Baseline org permission is organization_self_hosted_runners:write; no repo-admin escalation.",
"One org auth failure stops its new acquisition but does not disable the other healthy org.",
"Shared App compromise blast radius and key-memory limitations are documented.",
"Actual G02 credential identity contract is implemented; no plaintext fallback."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 7,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/7"
},
"release": "R2 - Everyday operations"
},
{
"key": "G08",
"title": "Implement guided init and optional Manifest enrollment",
"stage": "M1 - Control plane",
"agent": "Luna max",
"dependencies": [
"G06",
"G07"
],
"goal": "Provide a resumable init flow that imports or creates an operator-owned App and binds authorized organizations without copying per-runner registration tokens.",
"scope": "CLI onboarding over the G02-reviewed auth contract. Manual import is first-class; Manifest available only if its live gate passed.",
"tdd": [
"Red: denial, cancelled browser, port conflict, timed-out conversion, replay and a crash between remote creation/key commit leave honest partial status.",
"Never convert a callback more than once or trust browser installation_id without API verification.",
"Golden CLI tests use synthetic data; no PEM/code/key material in output or failure diagnostics."
],
"acceptance": [
"Init does not require an external callback server or gh OAuth session.",
"Pending second-org installation can be resumed without duplicating the first.",
"App permissions/trust/startup expectations are shown before user browser approval.",
"Luna max reviews all auth-facing code and evidence before merge."
],
"risk": "High",
"kind": "implementation",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-live-github"
],
"github_issue": {
"number": 8,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/8"
},
"release": "R3 - General distribution"
},
{
"key": "G09",
"title": "Implement the recoverable Scale Set adapter",
"stage": "M1 - Control plane",
"agent": "Luna max",
"dependencies": [
"G01",
"G05",
"G07"
],
"goal": "Translate verified Scale Set demand and lifecycle observations into durable local intents with bounded retry and explicit advertised capacity.",
"scope": "One client/session per pool/org, JIT attempt binding, safe errors, reconnect and reviewed ACK strategy; no provider-specific lifecycle policy.",
"tdd": [
"Red: crash after ACK/before callback and lost JIT response cannot permanently lose recoverable capacity or reuse abandoned JIT.",
"Replay >50 jobs, stale messages, expired sessions, 429 backoff and prolonged outage with a fake clock.",
"Confirm aggregate stats drive demand while unknown job identity remains conservative."
],
"acceptance": [
"Uses G01 pinned integration and real evidence, not the instructional Docker example lifecycle.",
"No raw SDK error logs, cross-org mutable client state or unbounded retries.",
"Stops new acquisition on authorization loss and reconciles before resuming.",
"Owned scale-set/runner deletion requires durable identity, not a name prefix."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-live-github"
],
"github_issue": {
"number": 9,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/9"
},
"release": "R2 - Everyday operations"
},
{
"key": "G10",
"title": "Implement disposable Linux workers with isolated Docker services",
"stage": "M2 - Execution and scaling",
"agent": "Luna max",
"dependencies": [
"G04",
"G05",
"G07"
],
"goal": "Provision ARM64 one-job Linux workers against an explicit existing Docker engine with worker-owned Docker services, resources and cleanup.",
"scope": "Docker adapter, pinned images, per-worker daemon/network/storage and logs. No automatic Docker Desktop/Lima installation or global context mutation.",
"tdd": [
"Red: common provider contract for create/lost response/retry/inspect/drain/cleanup preserves unrelated containers and volumes.",
"Run ordinary shell, checkout-like mounts, job container and simultaneous PostgreSQL/Redis service fixtures on real ARM64 Docker.",
"Probe job mounts/env/engine inspection for manager secrets and management socket exposure; enforce the reviewed trusted DinD profile.",
"Runtime outage and partial cleanup retain reservations/quarantine instead of broad prune."
],
"acceptance": [
"DB ports/mount paths and resource ceilings include service daemon overhead.",
"Images pinned by digest and ARM64 manifest, required runtime tool dependencies documented.",
"Dedicated job Docker daemon only; privileged DinD if needed is an explicit trusted-runtime exception, not hostile-code isolation.",
"Existing manual runners/runtime objects remain untouched.",
"Refresh only future workers to a verified supported runner/image version; preserve busy workers and block stale admission."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 10,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/10"
},
"release": "R2 - Everyday operations"
},
{
"key": "G11",
"title": "Implement trusted native macOS worker identity and lifecycle",
"stage": "M2 - Execution and scaling",
"agent": "Luna max",
"dependencies": [
"G02",
"G04",
"G05",
"G07"
],
"goal": "Run one-job macOS ARM64 workers under the reviewed job identity with correct process ownership, recoverable supervision and scoped cleanup.",
"scope": "Dedicated controller/job identity integration and minimal allowlisted helper if required by G02, process-group lifecycle, unique workdir and logs. No VM isolation claim.",
"tdd": [
"Red: job identity cannot read controller key/state/socket; same-UID mode is unsupported by the protected default.",
"A long-running worker survives manager restart; PID reuse cannot authorize killing another process.",
"Inject cancellation during bootstrap, surviving child processes, workdir symlink, cleanup failure and conflicting host-tool mutation.",
"JIT transport follows verified runner support, with residual in-job exposure documented and no management key inheritance."
],
"acceptance": [
"Native provider is enabled only for explicit trusted repositories/trust domain.",
"Different organizations do not share a native job identity or writable credential/cache areas by default.",
"Helper accepts only bounded approved operations, not arbitrary executable paths, UIDs or shell text.",
"Unsupported identity/Keychain/service conditions fail preflight; fresh workdir is not advertised as fresh OS.",
"Controller owns pinned runner download/update policy; verify checksum and refresh new workers without replacing the binary beneath busy workers."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 11,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/11"
},
"release": "R3 - General distribution"
},
{
"key": "G12",
"title": "Implement deterministic shared capacity and fair scheduling",
"stage": "M2 - Execution and scaling",
"agent": "Luna max",
"dependencies": [
"G04",
"G05"
],
"goal": "Compute deterministic fixed/autoscale targets and serial admission proposals that respect per-pool, per-runtime and host-wide budgets, with fair progress across eligible pools.",
"scope": "Pure policy module with fake clock and immutable typed snapshots. Luna max-owned G04 defines policy; G05 owns atomic reservation persistence and G13 owns live serialized application. No concurrent side effects, protocol acquisition or provider mutations in this issue.",
"tdd": [
"Red: a pure reduction of simultaneous two-org demands proposes at most one allocation for the last CPU/memory slot; stale or duplicate proposal application is exercised by G05/G13 integration, not claimed solved here.",
"Property tests cover zero/max/minTotal, infeasible floors, busy-over-reduced-cap, creation/cleanup/unknown reservations and pressure cutoff.",
"Finite scenario tests prove no starvation as slots free, deterministic tie-breaking and no oscillation under chosen backoff."
],
"acceptance": [
"Uses fixed count or minTotal/maxTotal semantics consistently; explicit idleBuffer deferred.",
"Native memory budget is admission-only; no hard OS cap promise.",
"Existing engine allocation and daemon/OS headroom are represented without double-counting.",
"Luna max reviews invariants/property counterexamples before connecting live effects.",
"Return versioned proposals, never mutate reservations or spawn workers; G13 Luna max integration rejects stale proposals and commits capacity atomically."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline"
],
"github_issue": {
"number": 12,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/12"
},
"release": "R2 - Everyday operations"
},
{
"key": "G12a",
"parent": "G12",
"title": "Implement pure scaling targets and capacity arithmetic",
"stage": "M2 - Execution and scaling",
"agent": "Luna max",
"dependencies": [
"G03"
],
"goal": "Implement deterministic, overflow-safe arithmetic for desired runner totals and additional resource capacity as an independent leaf of G12.",
"scope": "Three stdlib-only pure calculations under the independently reviewed numeric contract: fixed target, autoscale target and additional capacity. No config/provider schema, durable reservation, proposal application, fairness, I/O or live effects. G04/G12 integration gates remain required.",
"tdd": [
"Capture a behavioral red for this new feature, not a compilation-only result or a claimed existing product bug.",
"Cover zero/negative/min-max limits, exact last slot, reduced limits below committed usage, distinct CPU/memory and host/runtime constraints, and invalid later input after an early zero result.",
"Cover permitted individual zero-cost host budget plus positive runtime cost, reject nonempty all-zero cost set even for zero request, and independently check MaxInt64 behavior with math/big feasibility/maximality and bounded fuzz."
],
"acceptance": [
"Three pure calculations implement the approved numeric contract without overflow or input mutation.",
"No new dependency or live integration; future caller accounting, stale calculation and atomic application limits are explicit.",
"Independent Astra contract/counterexample review and exact-head GitHub Codex review resolved before merge.",
"Completing this child does not complete G12 or waive G01/G02/G04/G05 integration gates."
],
"risk": "High",
"kind": "implementation",
"priority": "P1",
"status": "Ready",
"test_profile": [
"offline"
],
"github_issue": {
"number": 40,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/40"
},
"release": "R2 - Everyday operations"
},
{
"key": "G13",
"title": "Integrate reconciliation, drain and safe restart",
"stage": "M2 - Execution and scaling",
"agent": "Luna max",
"dependencies": [
"G06",
"G09",
"G10",
"G11",
"G12"
],
"goal": "Reconcile GitHub and provider observations into safe worker lifecycle changes across crashes, scale-down and network/runtime failures.",
"scope": "Connect durable intents to providers and scheduler, stop/resume/restart/drain and quarantine; no automatic job rerun or force-delete default.",
"tdd": [
"Red: assignment immediately after idle observation cannot be killed during scale-down.",
"Inject every intent/side-effect/result-commit crash window, message loss, one-org failure and Docker disconnect.",
"Test drain timeout reports busy/unknown workers without force kill; repeated commands survive restart.",
"Host reboot reports interrupted jobs accurately; manual/foreign resources never adopted."
],
"acceptance": [
"Reservations released only after known terminal/cleanup state.",
"Manager restart preserves surviving workers and quarantines ambiguous state.",
"Future capacity withdrawn during drain without claiming atomic remote cancellation.",
"Luna max independently reviews end-to-end failure matrix."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime"
],
"github_issue": {
"number": 13,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/13"
},
"release": "R2 - Everyday operations",
"r1_subset": "G13-R1"
},
{
"key": "G14",
"title": "Implement status, logs and sanitized diagnostics",
"stage": "M3 - Reliability qualification",
"agent": "Luna max",
"dependencies": [
"G06",
"G13"
],
"goal": "Give operators one accurate view of organizations, pools, capacity, jobs and failures with bounded redacted local logs and machine-readable output.",
"scope": "status/list/describe/logs/doctor/export and telemetry adapters; no new auth scopes unless justified by an approved feature.",
"tdd": [
"Red: desired/reserved/creating/busy/draining/unknown counts reflect durable and stale observations separately.",
"Test concurrent tail/rotation, slow clients, missing provider and bounded diagnostic export.",
"Secret canaries in SDK errors, config and job data never appear in CLI/JSON/logs/metrics."
],
"acceptance": [
"Logs survive worker cleanup with retention/disk limits.",
"Metrics distinguish manager overhead, engine limits and job costs.",
"Stale/offline state is visible rather than falsely healthy.",
"Exit codes/JSON version and cancellation behavior are documented."
],
"risk": "Medium",
"kind": "implementation",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime"
],
"github_issue": {
"number": 14,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/14"
},
"release": "R2 - Everyday operations"
},
{
"key": "G15",
"title": "Implement startup, shutdown and safe configuration updates",
"stage": "M3 - Reliability qualification",
"agent": "Luna max",
"dependencies": [
"G02",
"G06",
"G13"
],
"goal": "Install and manage the daemon through launchd with honest login/boot behavior, safe config generations and reversible lifecycle commands.",
"scope": "startup/unstartup/restart/doctor installation and config persistence. Do not promise cold-boot access unless G02 established it.",
"tdd": [
"Red: CLI without an interactive shell/ambient env uses correct endpoint/keychain paths.",
"Test stale lock, duplicate launch registration, malformed config, generation update mid-job, rollback and daemon crash restart.",
"Run actual supported login/lock/reboot mode; uninstall does not automatically delete Apps or legacy workers."
],
"acceptance": [
"launchd supervises foreground daemon; terminal closure irrelevant.",
"Busy jobs survive ordinary manager upgrades; unsupported service version rejected safely.",
"Explicit boundaries among daemon uninstall, owned-resource cleanup, local key deletion and remote App uninstall.",
"Luna max reviews credential/service identity and cleanup transitions."
],
"risk": "High",
"kind": "implementation",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime"
],
"github_issue": {
"number": 15,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/15"
},
"release": "R2 - Everyday operations"
},
{
"key": "G16",
"title": "Build repeatable two-organization runtime qualification",
"stage": "M3 - Reliability qualification",
"agent": "Luna max",
"dependencies": [
"G08",
"G13",
"G14",
"G15"
],
"goal": "Provide a repeatable, opt-in hardware/live test suite proving real GitHub workflow routing, Linux DB services and macOS jobs across two organizational installations.",
"scope": "Fixtures, scripts and sanitized evidence format from reviewed contracts; no unauthenticated public PR access to local hardware.",
"tdd": [
"Red: tests detect wrong org/label routing, leftover DB/container/workdir and busy-job termination.",
"Execute Linux shell/job-container/services workflows and native macOS workflows, queue bursts and cap changes.",
"Use immutable reviewed commit and disposable controlled resources; record every skipped profile."
],
"acceptance": [
"Both orgs and both platforms appear in evidence, with actual job URLs sanitized if private.",
"Parallel service tests catch port/network/workspace conflicts.",
"Cleanup uses owned inventory and preserves existing manual infrastructure.",
"Luna max signs off contract coverage; credentials stay outside fixtures/artifacts."
],
"risk": "Medium",
"kind": "implementation",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 16,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/16"
},
"release": "R3 - General distribution",
"r1_subset": "G16-R1"
},
{
"key": "G17",
"title": "Qualify crash recovery, soak and resource budgets",
"stage": "M3 - Reliability qualification",
"agent": "Luna max",
"dependencies": [
"G16",
"G19"
],
"goal": "Establish release-candidate reliability and measured resource limits through deterministic faults and a real mixed-workload soak.",
"scope": "24-hour/100-job proposed release gate, fault matrix, performance baseline and decision report. Do not promote if required evidence is missing.",
"tdd": [
"Kill daemon at all identified barriers, interrupt network/runtime, rotate tokens and simulate disk pressure.",
"Run queue bursts and repeated drain/scale transitions with both orgs and OS pools.",
"Measure manager CPU/RSS, API traffic, admission/ready latency, queue time and disk growth on fixed hardware.",
"Control host reboot and classify expected interrupted jobs separately from manager recovery faults.",
"Simulate stale runner/image and urgent required update during busy work; prove paused new admission, safe refresh/drain and no rollback to forbidden stale version."
],
"acceptance": [
"No unexplained duplicates/orphans/cap violations/busy kills/secret exposure.",
"Set recommended counts from measured headroom, not host marketing specs.",
"Document SDK preview limits and residual trust/platform limitations.",
"Independent Luna max reliability verdict; incomplete soak remains incomplete."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 17,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/17"
},
"release": "R3 - General distribution"
},
{
"key": "G18",
"title": "Package signed releases and reproducible distribution",
"stage": "M4 - Pilot and release",
"agent": "Luna max",
"dependencies": [
"G03",
"G15",
"G17"
],
"goal": "Produce verifiable macOS ARM64 release artifacts with install/upgrade/rollback instructions and accurate preview/stability labeling.",
"scope": "Build packaging/checksums/provenance/SBOM/license notices/Homebrew formula plan; signing/notarization only with user-owned credentials when available.",
"tdd": [
"Red: corrupted artifact/signature and incompatible state version fail before replacement.",
"Test clean install and upgrade rollback without deleting user state/keys or interrupting busy jobs.",
"Verify PR builds require no signing secrets; release evidence records unsigned/notarized status truthfully."
],
"acceptance": [
"No downloaded macOS image, restricted virtualization binary or embedded App private key.",
"No auto-publish/signing purchase implied; repository owner controls release channel.",
"Bootstrap build remains independent of gh-runnerd.",
"Luna max reviews supply-chain, update and rollback effects."
],
"risk": "Medium",
"kind": "implementation",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime"
],
"github_issue": {
"number": 18,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/18"
},
"release": "R3 - General distribution"
},
{
"key": "G19",
"title": "Audit trust admission and cross-worker secret boundaries",
"stage": "M3 - Reliability qualification",
"agent": "Luna max",
"dependencies": [
"G08",
"G10",
"G11",
"G13"
],
"goal": "Verify and enforce the advertised trust profiles so untrusted work cannot enter trusted-only pools and jobs cannot reach manager credentials/control in the supported configuration.",
"scope": "Threat-model closure, policy preflight, native UID and Docker DinD profiles, adversarial non-destructive probes. No unsupported claim of hostile-container isolation.",
"tdd": [
"Red: mismatched runner-group access, ambiguous fork provenance and job invoking official CLI cannot bypass policy.",
"Try reading controller home/state/keychain/socket, sibling files/env and manager Docker socket from controlled test jobs.",
"Exercise SDK secret-in-error, proxy inheritance, wrong-org endpoint, unsafe mount/device/host-network requests.",
"Test shared-App blast radius/rotation docs and reject unsupported arbitrary backend flags."
],
"acceptance": [
"Runner-group restrictions verified before new admission; no automatic broadening to all repos.",
"Outer runner launches unprivileged; only reviewed worker-specific DinD has manager-runtime privilege. Trusted jobs control inner daemon; no claim that inner privileged containers are prohibited.",
"Same-user native insecure mode is not protected default; unresolved boundaries block release.",
"Public-fork support deferred until isolated VM/network provenance design is proven."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 19,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/19"
},
"release": "R3 - General distribution"
},
{
"key": "G20",
"title": "Pilot migration with reversible legacy runner handoff",
"stage": "M4 - Pilot and release",
"agent": "Luna max",
"dependencies": [
"G17",
"G18"
],
"goal": "Demonstrate a reversible rollout from existing manual runners to gh-runnerd-managed pools across both organizations without accidental interruption or resource adoption.",
"scope": "Runbook and operator-authorized canary rollout. Existing manual services remain until canary success; no unattended production rewrite.",
"tdd": [
"Red: migration checks detect workflow labels still targeting the wrong pool or a missing access grant.",
"Move one reviewed test workflow first, then expand; verify rollback can route back to old runners.",
"Drain old owned-by-operator services only in the explicit handoff procedure after busy work completes."
],
"acceptance": [
"Linux and macOS canary evidence and pool resource settings are recorded.",
"Legacy identities are never imported solely by name prefix.",
"Workflow routing labels remain stable when scaling worker count.",
"Record rollout verdict and rollback path; current planning task does not perform migration."
],
"risk": "High",
"kind": "gate",
"priority": "P1",
"status": "Backlog",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 20,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/20"
},
"release": "R2 - Everyday operations"
},
{
"key": "G21",
"title": "Evaluate optional macOS VM and multi-host providers",
"stage": "M5 - Future",
"agent": "Luna max",
"dependencies": [
"G17"
],
"goal": "Decide whether optional isolated macOS VM and multi-host adapters can meet safety, licensing and operating-cost requirements without coupling the core to one runtime.",
"scope": "Research/prototype ADR only after core qualification. Evaluate Apple Virtualization helper and optional external tools; no default Tart bundling.",
"tdd": [
"Reproduce image clone/boot/one-job/teardown and controller-restart behavior in an isolated experiment.",
"Measure startup/capacity and validate exact macOS VM licence/runtime limits separately from runner-process counts.",
"Probe persistence, credential access and host/LAN networking before claiming untrusted-job support."
],
"acceptance": [
"Document go/no-go, license boundaries and optional provider interface changes.",
"No unlimited scaling claim on one Mac or inference that all Linux VMs share macOS guest cap.",
"Remote-host design includes trust/auth/recovery and central budget semantics before implementation.",
"Scope stays outside v0.1; create bounded follow-up implementation issues only after evidence."
],
"risk": "High",
"kind": "research",
"priority": "P2",
"status": "Future",
"test_profile": [
"offline"
],
"github_issue": {
"number": 21,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/21"
},
"release": "Future research"
},
{
"key": "G01f",
"parent": "G01",
"title": "Finalize paired execution with bounded owned cleanup",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [],
"release": "R1 - Internal MVP",
"goal": "Complete one private, same-invocation normal-success terminal path after issue #52's paired execution. Prove exact session closure, non-force worker deletion with its separate absence receipt, and owned scale-set deletion through real C/W journals and private SDK/TLS and Docker/Unix fixtures. This child does not authorize a live run, release admission claims or complete parent #1.",
"scope": "Tracked on issue #54 (Done). This keyed record exists so G01g's native blockedBy #54 is resolvable in backlog.json. Do not duplicate runtime evidence here.",
"tdd": [
"See issue #54. Do not edit G01f evidence from the #66 documentation branch."
],
"acceptance": [
"Issue #54 remains the source of acceptance and is Done.",
"Completing G01f does not complete G01 #1."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Done",
"test_profile": [
"offline"
],
"github_issue": {
"number": 54,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/54"
}
},
{
"key": "G01g",
"title": "Wire paired terminal execution through a bounded broker handoff",
"stage": "M0 - Evidence gates",
"agent": "Luna max",
"dependencies": [
"G01f"
],
"release": "R1 - Internal MVP",
"goal": "Connect the reviewed paired terminal path to one same-process experimental executable and a narrowly bound broker handoff, with offline evidence that authority, credential separation and fail-stop recovery boundaries are preserved.",
"scope": "Tracked on issue #60 and PR #62 in a separate worktree. This keyed record exists so R1 dependencies resolve. It is not G01 completion and does not duplicate runtime or CI evidence.",
"tdd": [
"See issue #60. Do not edit #60/#62 from the #66 documentation branch."
],
"acceptance": [
"Issue #60 remains the source of acceptance.",
"Completing G01g does not complete G01 #1."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "In progress",
"test_profile": [
"offline"
],
"github_issue": {
"number": 60,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/60"
}
},
{
"key": "P66",
"title": "Reframe delivery into MVP, operations and distribution releases",
"stage": "M0 - Evidence gates",
"agent": "Grok 4.6 xhigh",
"review_agent": "Luna max",
"dependencies": [],
"release": "R1 - Internal MVP",
"goal": "Reorganize delivery into an internal single-host MVP, an everyday operations release, and a general-distribution release without weakening the existing Scale Set recovery objective or safety/review gates.",
"scope": "Documentation and mapping only. Preserve G01 issue #1 exact Goal and acceptance evidence. Do not create another native goal. No live operations. No production implementation of dependency-blocked issues.",
"tdd": [
"Prose-only planning change: use link checks, diff review and issue/Project mapping verification. Do not invent application tests."
],
"acceptance": [
"Three release stages and concrete user-visible exit criteria documented.",
"All current issues mapped, with native dependency updates only where justified and no false Done states.",
"Minimum executable MVP critical path identified, with unimplemented CLI/daemon/install work explicit.",
"Existing G01 full objective preserved; no live evidence represented as complete.",
"Focused independently reviewed PR, exact-head clean Codex verdict and CI before merge."
],
"risk": "Medium",
"kind": "planning",
"priority": "P0",
"status": "In progress",
"test_profile": [
"offline"
],
"github_issue": {
"number": 66,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/66"
}
},
{
"key": "G02-R1",
"parent": "G02",
"title": "Prove manual single-organization credentials for the foreground MVP",
"stage": "M0 - Evidence gates",
"agent": "Grok 4.6 xhigh",
"review_agent": "Luna max",
"dependencies": [],
"release": "R1 - Internal MVP",
"goal": "Demonstrate a manually configured single-organization credential path for the foreground MVP that binds the intended installation and never exposes management credentials to workers.",
"scope": "Extract the R1 credential subset of #2 without closing or rewriting its broader Manifest, multi-organization or launchd qualification. Foreground-only; unattended login/logout/reboot service behavior is not supported in R1. No implicit live authorization.",
"tdd": [
"Red: missing/wrong/expired credentials, wrong installation and partial setup refuse safely without extra Apps or leaked values.",
"Management credentials never reach worker argv/environment/files; only per-worker JIT follows the reviewed G01 transport.",
"Live/runtime checks require reviewed commits and explicit concrete maintainer authorization."
],
"acceptance": [
"Explicit minimal permission, org/repository/installation identity and credential source validation before remote effects.",
"Actual authorized manual configuration works; negative cases refuse safely.",
"Credentials are not persisted or imported to Keychain implicitly.",
"Broader #2 remains open until its own criteria pass."
],
"risk": "High",
"kind": "gate",
"priority": "P0",
"status": "Ready",
"test_profile": [
"offline",
"trusted-runtime",
"trusted-live-github"
],
"github_issue": {
"number": 67,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/67"
}
},
{
"key": "G13-R1",
"parent": "G13",
"title": "Deliver one foreground command for a bounded single-worker lifecycle",
"stage": "M2 - Execution and scaling",
"agent": "Grok 4.6 xhigh",
"review_agent": "Luna max",
"dependencies": [
"G01g",
"P66",
"G02-R1"
],
"release": "R1 - Internal MVP",
"goal": "Provide a foreground MVP command that connects the reviewed broker and paired worker lifecycle for one organization, one private repository and one worker, with durable fail-stop state and safe owned cleanup.",
"scope": "Vertical R1 slice of #4/#5/#6/#7/#9/#10/#13/#14 with primary parent #13. Reuse the reviewed paired Linux-container execution path. No second backend, native macOS jobs, daemon/install or context switch. Native dependencies remain G01g/#60, P66/#66 and G02-R1/#67. Until full G01 #1 and G02 #2 evidence gates pass, authorized work is a reviewed minimal contract and offline evidence only; production implementation starts only then. Completing G02-R1/#67 does not complete G02. Full G02 remains classified R3; user-visible R1 scope is not independently deliverable until that pre-release gate passes.",
"tdd": [
"Native blockers G01g/#60, P66/#66 and G02-R1/#67 remain the GitHub blockedBy set; do not add #1/#2 as native edges from this docs change.",
"Until full G01 #1 and G02 #2 pass, work is contract/offline evidence only; production implementation is unauthorized.",
"Negative tests for authority mutation, partial state, timeout, cancellation and non-owned cleanup.",
"No claim that the existing empty product entry point already implements the command."
],
"acceptance": [
"One documented user-facing entry point, explicit configuration and safe status output.",
"Bound org/repository/installation and one owned worker, shared capacity hard-limit one.",
"Foreground interruption stops new admission and preserves busy/unknown work.",
"Completing this child does not complete #4\u2013#15.",
"Completing G02-R1/#67 does not complete G02. Production implementation waits for full G01 #1 and G02 #2."
],
"risk": "High",
"kind": "implementation",
"priority": "P0",
"status": "Blocked",
"test_profile": [
"offline"
],
"github_issue": {
"number": 68,
"url": "https://github.com/1XP-AI/gh-runnerd/issues/68"
}
},
{
"key": "G16-R1",
"parent": "G16",
"title": "Qualify the internal MVP with an authorized real job and recovery evidence",
"stage": "M3 - Reliability qualification",
"agent": "Grok 4.6 xhigh",
"review_agent": "Luna max",
"dependencies": [
"G01",
"G13-R1"
],
"release": "R1 - Internal MVP",
"goal": "Qualify the single-host internal MVP with an explicitly authorized real private-repository job, safe cleanup and demonstrated ACK, acquisition and JIT recovery or quarantine behavior.",