agent-conveyor 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,8 +14,8 @@
14
14
  --ink: #17202a;
15
15
  --muted: #607080;
16
16
  --line: #d7dde4;
17
- --page: #f7f4ec;
18
- --surface: #fffdf8;
17
+ --page: #f6f8fb;
18
+ --surface: #ffffff;
19
19
  --coal: #24313d;
20
20
  --green: #257a61;
21
21
  --blue: #2b68a8;
@@ -46,11 +46,11 @@
46
46
  .topbar {
47
47
  align-items: center;
48
48
  display: flex;
49
- gap: 24px;
49
+ gap: 18px;
50
50
  justify-content: space-between;
51
51
  margin: 0 auto;
52
52
  max-width: 1180px;
53
- padding: 18px 24px;
53
+ padding: 14px 24px;
54
54
  }
55
55
 
56
56
  .brand {
@@ -58,6 +58,7 @@
58
58
  display: flex;
59
59
  font-weight: 800;
60
60
  gap: 10px;
61
+ white-space: nowrap;
61
62
  }
62
63
 
63
64
  .brand-mark {
@@ -73,14 +74,16 @@
73
74
  nav {
74
75
  display: flex;
75
76
  flex-wrap: wrap;
76
- gap: 16px;
77
+ gap: 14px;
77
78
  justify-content: flex-end;
78
79
  }
79
80
 
80
81
  nav a {
81
82
  color: var(--muted);
82
- font-size: 14px;
83
+ font-size: 13px;
84
+ font-weight: 700;
83
85
  text-decoration: none;
86
+ white-space: nowrap;
84
87
  }
85
88
 
86
89
  nav a:hover {
@@ -89,7 +92,7 @@
89
92
 
90
93
  .hero {
91
94
  border-top: 1px solid rgba(36, 49, 61, 0.1);
92
- min-height: min(760px, 92vh);
95
+ min-height: min(700px, 88vh);
93
96
  overflow: hidden;
94
97
  position: relative;
95
98
  }
@@ -106,12 +109,12 @@
106
109
 
107
110
  .hero-inner {
108
111
  display: grid;
109
- gap: 52px;
112
+ gap: 46px;
110
113
  grid-template-columns: minmax(0, 0.95fr) minmax(430px, 1.05fr);
111
114
  margin: 0 auto;
112
115
  max-width: 1180px;
113
- min-height: min(710px, 86vh);
114
- padding: 78px 24px 48px;
116
+ min-height: min(600px, 76vh);
117
+ padding: 46px 24px 34px;
115
118
  position: relative;
116
119
  }
117
120
 
@@ -125,7 +128,7 @@
125
128
  }
126
129
 
127
130
  h1 {
128
- font-size: clamp(44px, 7vw, 92px);
131
+ font-size: clamp(44px, 5.8vw, 76px);
129
132
  line-height: 0.95;
130
133
  letter-spacing: 0;
131
134
  margin: 0;
@@ -134,16 +137,57 @@
134
137
 
135
138
  .hero-copy {
136
139
  color: #354758;
137
- font-size: 20px;
138
- margin: 24px 0 0;
140
+ font-size: 18px;
141
+ margin: 20px 0 0;
142
+ max-width: 650px;
143
+ }
144
+
145
+ .hero-summary {
146
+ color: #425467;
147
+ font-size: 15px;
148
+ font-weight: 700;
149
+ margin: 16px 0 0;
150
+ max-width: 640px;
151
+ }
152
+
153
+ .hero-proof {
154
+ display: grid;
155
+ gap: 12px;
156
+ grid-template-columns: repeat(3, minmax(0, 1fr));
157
+ margin-top: 20px;
139
158
  max-width: 650px;
140
159
  }
141
160
 
161
+ .hero-proof span {
162
+ background: rgba(255, 255, 255, 0.68);
163
+ border-left: 4px solid var(--green);
164
+ color: #354758;
165
+ display: block;
166
+ font-size: 13px;
167
+ min-height: 76px;
168
+ padding: 12px;
169
+ }
170
+
171
+ .hero-proof strong {
172
+ color: var(--ink);
173
+ display: block;
174
+ font-size: 14px;
175
+ margin-bottom: 4px;
176
+ }
177
+
178
+ .hero-proof span:nth-child(2) {
179
+ border-color: var(--blue);
180
+ }
181
+
182
+ .hero-proof span:nth-child(3) {
183
+ border-color: var(--gold);
184
+ }
185
+
142
186
  .actions {
143
187
  display: flex;
144
188
  flex-wrap: wrap;
145
189
  gap: 12px;
146
- margin-top: 34px;
190
+ margin-top: 26px;
147
191
  }
148
192
 
149
193
  .button {
@@ -174,17 +218,49 @@
174
218
  color: #edf7f2;
175
219
  display: grid;
176
220
  font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
177
- font-size: 14px;
221
+ font-size: 13px;
178
222
  gap: 9px;
179
- margin-top: 30px;
223
+ margin-top: 22px;
180
224
  max-width: 650px;
181
225
  padding: 18px;
182
226
  }
183
227
 
228
+ .command code {
229
+ overflow-wrap: anywhere;
230
+ }
231
+
184
232
  .command span {
185
233
  color: #91d9bd;
186
234
  }
187
235
 
236
+ .transcript {
237
+ background: var(--surface);
238
+ border: 1px solid var(--line);
239
+ border-radius: 8px;
240
+ display: grid;
241
+ gap: 10px;
242
+ margin-top: 16px;
243
+ padding: 16px;
244
+ }
245
+
246
+ .transcript-row {
247
+ display: grid;
248
+ gap: 12px;
249
+ grid-template-columns: 86px minmax(0, 1fr);
250
+ }
251
+
252
+ .transcript-row strong {
253
+ color: var(--green);
254
+ font-size: 12px;
255
+ text-transform: uppercase;
256
+ }
257
+
258
+ .transcript-row p {
259
+ color: #425467;
260
+ font-size: 14px;
261
+ margin: 0;
262
+ }
263
+
188
264
  .flow-stage {
189
265
  align-self: center;
190
266
  background: rgba(255, 253, 248, 0.74);
@@ -208,6 +284,7 @@
208
284
  border: 1px solid var(--line);
209
285
  border-radius: 8px;
210
286
  min-height: 130px;
287
+ min-width: 0;
211
288
  padding: 16px;
212
289
  }
213
290
 
@@ -266,6 +343,10 @@
266
343
  padding: 64px 24px;
267
344
  }
268
345
 
346
+ #recipes .section-inner {
347
+ padding-top: 28px;
348
+ }
349
+
269
350
  h2 {
270
351
  font-size: clamp(30px, 4vw, 52px);
271
352
  letter-spacing: 0;
@@ -287,6 +368,38 @@
287
368
  grid-template-columns: repeat(5, minmax(0, 1fr));
288
369
  }
289
370
 
371
+ .mode-guide {
372
+ display: grid;
373
+ gap: 12px;
374
+ grid-template-columns: repeat(3, minmax(0, 1fr));
375
+ margin: -12px 0 22px;
376
+ }
377
+
378
+ .mode-guide a {
379
+ background: rgba(255, 255, 255, 0.72);
380
+ border: 1px solid var(--line);
381
+ border-radius: 8px;
382
+ display: grid;
383
+ gap: 6px;
384
+ min-height: 104px;
385
+ padding: 14px;
386
+ text-decoration: none;
387
+ }
388
+
389
+ .mode-guide a:hover {
390
+ border-color: var(--blue);
391
+ box-shadow: 0 10px 28px rgba(23, 32, 42, 0.08);
392
+ }
393
+
394
+ .mode-guide strong {
395
+ font-size: 15px;
396
+ }
397
+
398
+ .mode-guide span {
399
+ color: var(--muted);
400
+ font-size: 13px;
401
+ }
402
+
290
403
  .recipe {
291
404
  background: var(--surface);
292
405
  border: 1px solid var(--line);
@@ -309,6 +422,12 @@
309
422
  margin: 0;
310
423
  }
311
424
 
425
+ .recipe .use-case {
426
+ color: var(--ink);
427
+ font-size: 13px;
428
+ font-weight: 800;
429
+ }
430
+
312
431
  .tag-row {
313
432
  align-content: flex-start;
314
433
  align-items: flex-start;
@@ -359,6 +478,11 @@
359
478
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
360
479
  }
361
480
 
481
+ .split h2 {
482
+ font-size: clamp(30px, 3.2vw, 44px);
483
+ max-width: 640px;
484
+ }
485
+
362
486
  .timeline {
363
487
  display: grid;
364
488
  gap: 12px;
@@ -399,7 +523,29 @@
399
523
  grid-template-columns: repeat(3, minmax(0, 1fr));
400
524
  }
401
525
 
402
- .db-item {
526
+ .diagnostic-strip {
527
+ background: #edf7f2;
528
+ border: 1px solid rgba(37, 122, 97, 0.22);
529
+ border-radius: 8px;
530
+ display: grid;
531
+ gap: 12px;
532
+ grid-template-columns: minmax(0, 0.7fr) minmax(0, 1fr);
533
+ margin-top: 14px;
534
+ padding: 16px;
535
+ }
536
+
537
+ .diagnostic-strip strong {
538
+ display: block;
539
+ margin-bottom: 4px;
540
+ }
541
+
542
+ .diagnostic-strip p {
543
+ color: #425467;
544
+ margin: 0;
545
+ }
546
+
547
+ .db-item,
548
+ .proof-card {
403
549
  background: var(--surface);
404
550
  border: 1px solid var(--line);
405
551
  border-radius: 8px;
@@ -407,17 +553,62 @@
407
553
  padding: 16px;
408
554
  }
409
555
 
410
- .db-item strong {
556
+ .db-item strong,
557
+ .proof-card strong {
411
558
  display: block;
412
559
  margin-bottom: 6px;
413
560
  }
414
561
 
415
- .db-item p {
562
+ .db-item p,
563
+ .proof-card p {
416
564
  color: var(--muted);
417
565
  font-size: 14px;
418
566
  margin: 0;
419
567
  }
420
568
 
569
+ .proof-grid {
570
+ display: grid;
571
+ gap: 12px;
572
+ grid-template-columns: repeat(4, minmax(0, 1fr));
573
+ }
574
+
575
+ .proof-card {
576
+ min-height: 146px;
577
+ }
578
+
579
+ .proof-card code {
580
+ color: var(--green);
581
+ display: block;
582
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
583
+ font-size: 12px;
584
+ margin-bottom: 8px;
585
+ }
586
+
587
+ .release-band {
588
+ background: #eaf1f7;
589
+ }
590
+
591
+ .release-grid {
592
+ align-items: start;
593
+ display: grid;
594
+ gap: 18px;
595
+ grid-template-columns: minmax(0, 1fr) minmax(360px, 0.78fr);
596
+ }
597
+
598
+ .release-list {
599
+ display: grid;
600
+ gap: 10px;
601
+ margin: 0;
602
+ padding: 0;
603
+ }
604
+
605
+ .release-list li {
606
+ background: rgba(255, 255, 255, 0.74);
607
+ border-left: 4px solid var(--blue);
608
+ list-style: none;
609
+ padding: 12px 14px;
610
+ }
611
+
421
612
  .closing {
422
613
  background: var(--coal);
423
614
  color: white;
@@ -448,20 +639,94 @@
448
639
  }
449
640
 
450
641
  .recipes,
642
+ .mode-guide,
643
+ .proof-grid,
451
644
  .db-grid {
452
645
  grid-template-columns: repeat(2, minmax(0, 1fr));
453
646
  }
647
+
648
+ .release-grid {
649
+ grid-template-columns: 1fr;
650
+ }
651
+
652
+ .diagnostic-strip {
653
+ grid-template-columns: 1fr;
654
+ }
454
655
  }
455
656
 
456
657
  @media (max-width: 640px) {
457
658
  .topbar {
458
659
  align-items: flex-start;
459
660
  flex-direction: column;
661
+ gap: 10px;
662
+ padding: 10px 18px;
663
+ }
664
+
665
+ .brand {
666
+ font-size: 14px;
667
+ }
668
+
669
+ .brand-mark {
670
+ height: 18px;
671
+ width: 26px;
672
+ }
673
+
674
+ nav {
675
+ gap: 10px;
676
+ flex-wrap: nowrap;
677
+ justify-content: flex-start;
678
+ overflow-x: auto;
679
+ padding-bottom: 2px;
680
+ width: 100%;
681
+ }
682
+
683
+ nav a {
684
+ font-size: 12px;
460
685
  }
461
686
 
462
687
  .hero-inner {
463
- gap: 28px;
464
- padding-top: 46px;
688
+ gap: 20px;
689
+ min-height: auto;
690
+ padding: 30px 24px 30px;
691
+ }
692
+
693
+ .eyebrow {
694
+ font-size: 11px;
695
+ margin-bottom: 10px;
696
+ }
697
+
698
+ .hero-copy {
699
+ font-size: 16px;
700
+ margin-top: 16px;
701
+ }
702
+
703
+ .hero-summary {
704
+ font-size: 13px;
705
+ margin-top: 12px;
706
+ }
707
+
708
+ .hero-proof {
709
+ gap: 8px;
710
+ margin-top: 16px;
711
+ }
712
+
713
+ .hero-proof span {
714
+ min-height: 0;
715
+ padding: 10px 12px;
716
+ }
717
+
718
+ .actions {
719
+ margin-top: 20px;
720
+ }
721
+
722
+ .hero .command {
723
+ font-size: 12px;
724
+ margin-top: 16px;
725
+ padding: 14px;
726
+ }
727
+
728
+ .hero .command code:nth-child(n + 2) {
729
+ display: none;
465
730
  }
466
731
 
467
732
  .flow-stage {
@@ -469,18 +734,7 @@
469
734
  }
470
735
 
471
736
  .mobile-flow-strip {
472
- align-items: center;
473
- background: rgba(255, 253, 248, 0.78);
474
- border: 1px solid rgba(36, 49, 61, 0.16);
475
- border-radius: 8px;
476
- box-shadow: 0 12px 32px rgba(23, 32, 42, 0.12);
477
- display: grid;
478
- gap: 8px;
479
- grid-template-columns: 1fr 18px 1fr 18px 1fr;
480
- margin-top: 18px;
481
- min-height: 64px;
482
- padding: 12px;
483
- text-align: center;
737
+ display: none;
484
738
  }
485
739
 
486
740
  .mobile-flow-strip span {
@@ -494,6 +748,9 @@
494
748
  }
495
749
 
496
750
  .recipes,
751
+ .hero-proof,
752
+ .mode-guide,
753
+ .proof-grid,
497
754
  .db-grid {
498
755
  grid-template-columns: 1fr;
499
756
  }
@@ -501,6 +758,10 @@
501
758
  h1 {
502
759
  font-size: 44px;
503
760
  }
761
+
762
+ #recipes .section-inner {
763
+ padding-top: 16px;
764
+ }
504
765
  }
505
766
  </style>
506
767
  </head>
@@ -511,7 +772,8 @@
511
772
  <a href="#recipes">Recipes</a>
512
773
  <a href="#flow">Manager Flow</a>
513
774
  <a href="#database">Audit Trail</a>
514
- <a href="../README.md">README</a>
775
+ <a href="#release">Release</a>
776
+ <a href="https://github.com/neonwatty/agent-conveyor#readme">README</a>
515
777
  </nav>
516
778
  </header>
517
779
 
@@ -522,13 +784,22 @@
522
784
  <p class="eyebrow">Local Codex manager / worker control plane</p>
523
785
  <h1>Agent Conveyor</h1>
524
786
  <p class="hero-copy">
525
- Turn broad Codex work into repeatable manager recipes: one manager
526
- supervises one worker through Dispatch, evidence gates, handoffs,
527
- and an auditable SQLite trail.
787
+ Turn broad Codex work into repeatable manager recipes: pick a
788
+ mode, launch one supervised worker, and require receipts before
789
+ the manager continues, compacts, merges, or stops.
790
+ </p>
791
+ <p class="hero-summary">
792
+ Built for long-running GoalBuddy boards, screenshot-driven UX
793
+ polish, coverage loops, and PR/CI merge supervision.
528
794
  </p>
795
+ <div class="hero-proof" aria-label="Agent Conveyor outcomes">
796
+ <span><strong>Choose a recipe</strong>Modes, tools, permissions, and cleanup rules are locked before work starts.</span>
797
+ <span><strong>Route the worker</strong>Dispatch sends handoffs, records attempts, and blocks unsafe continuations.</span>
798
+ <span><strong>Close with proof</strong>SQLite receipts make tests, screenshots, CI, and blockers replayable.</span>
799
+ </div>
529
800
  <div class="actions">
530
801
  <a class="button primary" href="#recipes">Explore recipes</a>
531
- <a class="button secondary" href="manager-recipes.md">Read the docs</a>
802
+ <a class="button secondary" href="https://github.com/neonwatty/agent-conveyor/blob/main/docs/manager-recipes.md">Read the docs</a>
532
803
  </div>
533
804
  <div class="command" aria-label="Install and recipe preview commands">
534
805
  <code>npm install -g agent-conveyor</code>
@@ -579,9 +850,24 @@
579
850
  starts it resolves to a named recipe or explicit custom mode. Each
580
851
  recipe has settings, permissions, evidence gates, and cleanup rules.
581
852
  </p>
853
+ <div class="mode-guide" aria-label="Choose a starting recipe">
854
+ <a href="https://github.com/neonwatty/agent-conveyor/blob/main/docs/manager-recipes.md#goalbuddy-conveyor">
855
+ <strong>Need overnight progress?</strong>
856
+ <span>Start with GoalBuddy Conveyor and one active board at a time.</span>
857
+ </a>
858
+ <a href="https://github.com/neonwatty/agent-conveyor/blob/main/docs/manager-recipes.md#ux-polish-loop">
859
+ <strong>Need visible quality?</strong>
860
+ <span>Use UX Polish when screenshots should decide the next pass.</span>
861
+ </a>
862
+ <a href="https://github.com/neonwatty/agent-conveyor/blob/main/docs/manager-recipes.md#prcimerge-ralph-loop">
863
+ <strong>Need a green merge?</strong>
864
+ <span>Use the PR/CI loop for review, CI monitoring, and merge receipts.</span>
865
+ </a>
866
+ </div>
582
867
  <div class="recipes">
583
868
  <article class="recipe accent-green">
584
869
  <h3>GoalBuddy Conveyor</h3>
870
+ <p class="use-case">Use when the work is bigger than one safe worker turn.</p>
585
871
  <p>Runs broad work as sequential child boards with one active child at a time.</p>
586
872
  <div class="tag-row">
587
873
  <span class="tag">strict</span>
@@ -591,6 +877,7 @@
591
877
  </article>
592
878
  <article class="recipe accent-blue">
593
879
  <h3>Test Coverage Loop</h3>
880
+ <p class="use-case">Use when confidence is the blocker.</p>
594
881
  <p>Improves or proves test confidence before another worker pass can begin.</p>
595
882
  <div class="tag-row">
596
883
  <span class="tag">strict</span>
@@ -600,6 +887,7 @@
600
887
  </article>
601
888
  <article class="recipe accent-gold">
602
889
  <h3>UX Polish Loop</h3>
890
+ <p class="use-case">Use when screenshots should drive the next fix.</p>
603
891
  <p>Iterates visible quality using screenshots, browser evidence, and visual diffs.</p>
604
892
  <div class="tag-row">
605
893
  <span class="tag">guided</span>
@@ -609,6 +897,7 @@
609
897
  </article>
610
898
  <article class="recipe accent-rose">
611
899
  <h3>Nudge / What's Next</h3>
900
+ <p class="use-case">Use when direction is fuzzy and risk should stay low.</p>
612
901
  <p>Observes, negotiates criteria, and asks focused next-step questions without taking over.</p>
613
902
  <div class="tag-row">
614
903
  <span class="tag">guided</span>
@@ -618,6 +907,7 @@
618
907
  </article>
619
908
  <article class="recipe accent-violet">
620
909
  <h3>PR / CI / Merge Ralph Loop</h3>
910
+ <p class="use-case">Use when the manager should drive review to green merge.</p>
621
911
  <p>Drives PR readiness, CI monitoring, green merge, handoff, and fresh-worker replay.</p>
622
912
  <div class="tag-row">
623
913
  <span class="tag">strict</span>
@@ -639,9 +929,16 @@
639
929
  </p>
640
930
  <div class="command">
641
931
  <code><span>conveyor</span> manager-config "$TASK" --recipe goalbuddy-conveyor --mode strict</code>
932
+ <code><span>conveyor</span> pair --task dogfood-goalbuddy --manager-recipe goalbuddy-conveyor --path /tmp/agent-conveyor-dogfood/workerctl.db</code>
642
933
  <code><span>conveyor</span> cycle "$TASK"</code>
643
934
  <code><span>conveyor</span> replay "$TASK"</code>
644
935
  </div>
936
+ <div class="transcript" aria-label="Example manager dispatcher worker transcript">
937
+ <div class="transcript-row"><strong>Manager</strong><p>Start `ux-polish-loop`; require screenshot proof before another worker pass.</p></div>
938
+ <div class="transcript-row"><strong>Dispatch</strong><p>Routes the task, records the command attempt, and waits for worker receipts.</p></div>
939
+ <div class="transcript-row"><strong>Worker</strong><p>Returns screenshot paths, changed files, tests run, and the next blocker if one remains.</p></div>
940
+ <div class="transcript-row"><strong>Manager</strong><p>Accepts proof, asks for one more pass, or closes the loop with replayable evidence.</p></div>
941
+ </div>
645
942
  </div>
646
943
  <div class="timeline">
647
944
  <div class="step">
@@ -660,6 +957,27 @@
660
957
  <span class="step-number">4</span>
661
958
  <div><strong>Finish with proof</strong><p>Completion needs receipts: tests, screenshots, CI, handoff, audit, or an explicit blocker.</p></div>
662
959
  </div>
960
+ <div class="step">
961
+ <span class="step-number">5</span>
962
+ <div><strong>Dogfood the package</strong><p>A clean package run launches Dispatch, records acks, satisfies criteria, and finishes without path fixes.</p></div>
963
+ </div>
964
+ </div>
965
+ </div>
966
+ </section>
967
+
968
+ <section>
969
+ <div class="section-inner">
970
+ <h2>Dogfood proof is a first-class recipe output</h2>
971
+ <p class="section-lede">
972
+ A useful manager setup is more than a prompt. It should leave enough
973
+ evidence for another operator to replay what happened and improve
974
+ the recipe when friction repeats.
975
+ </p>
976
+ <div class="proof-grid">
977
+ <div class="proof-card"><code>manager-config</code><strong>Settings locked</strong><p>Mode, objective, permissions, tools, epilogues, and cleanup policy are saved before the manager starts.</p></div>
978
+ <div class="proof-card"><code>pair --json</code><strong>Launch is explicit</strong><p>The package records manager, worker, Dispatch PID, cwd, and database path for the run.</p></div>
979
+ <div class="proof-card"><code>criteria --list</code><strong>Acceptance is visible</strong><p>Criteria move from accepted to satisfied with evidence instead of being inferred from chat.</p></div>
980
+ <div class="proof-card"><code>replay / audit</code><strong>Closeout is replayable</strong><p>Worker completion, manager decisions, finish task, and cleanup receipts remain inspectable.</p></div>
663
981
  </div>
664
982
  </div>
665
983
  </section>
@@ -680,6 +998,41 @@
680
998
  <div class="db-item"><strong>manager_cycles</strong><p>Observation history and the manager context used for each decision.</p></div>
681
999
  <div class="db-item"><strong>telemetry_events</strong><p>Dispatch heartbeat, routing issues, stale work, and searchable issue clues.</p></div>
682
1000
  </div>
1001
+ <div class="diagnostic-strip">
1002
+ <div>
1003
+ <strong>When a run feels wrong</strong>
1004
+ <p>Use the database as the bug report, not a reconstructed chat summary.</p>
1005
+ </div>
1006
+ <p>
1007
+ Start with `conveyor replay`, attach acceptance criteria and
1008
+ notification receipts, then tune the recipe gate that allowed the
1009
+ weak continuation.
1010
+ </p>
1011
+ </div>
1012
+ </div>
1013
+ </section>
1014
+
1015
+ <section id="release" class="release-band">
1016
+ <div class="section-inner release-grid">
1017
+ <div>
1018
+ <h2>Release without token wrangling</h2>
1019
+ <p class="section-lede">
1020
+ Package verification can stay separate from publish. The manual
1021
+ workflow first creates a review tarball; only an explicit publish
1022
+ run with the npm production environment uses Trusted Publishing.
1023
+ </p>
1024
+ <div class="command">
1025
+ <code><span>gh</span> workflow run publish.yml -f version=0.1.8 -f publish=false</code>
1026
+ <code><span>gh</span> workflow run publish.yml -f version=0.1.8 -f publish=true</code>
1027
+ <code><span>npm</span> view agent-conveyor version</code>
1028
+ </div>
1029
+ </div>
1030
+ <ul class="release-list">
1031
+ <li><strong>Verify first</strong><br />Run tests, package smoke, release check, and upload a tarball for review.</li>
1032
+ <li><strong>Publish intentionally</strong><br />Require `publish=true`, a matching version input, and the `npm-production` environment.</li>
1033
+ <li><strong>Use OIDC</strong><br />Trusted Publishing removes long-lived npm tokens from the release path.</li>
1034
+ <li><strong>Dogfood after publish</strong><br />Fresh-install the public package before merging release paperwork.</li>
1035
+ </ul>
683
1036
  </div>
684
1037
  </section>
685
1038
 
@@ -692,8 +1045,8 @@
692
1045
  continued, stopped, compacted, or finished.
693
1046
  </p>
694
1047
  <div class="actions">
695
- <a class="button primary" href="manager-recipes.md">Open manager recipes</a>
696
- <a class="button secondary" href="../README.md">Read install docs</a>
1048
+ <a class="button primary" href="https://github.com/neonwatty/agent-conveyor/blob/main/docs/manager-recipes.md">Open manager recipes</a>
1049
+ <a class="button secondary" href="https://github.com/neonwatty/agent-conveyor#readme">Read install docs</a>
697
1050
  </div>
698
1051
  </div>
699
1052
  </section>