@sublang/playbook 0.4.1 → 0.5.0

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.
@@ -112,8 +112,9 @@ const planAndImplementInput = (context) => ({
112
112
  ...bossReplyInputFields(context),
113
113
  prompt: [
114
114
  'Assess whether this can be completed in a single commit, following best practices.',
115
- 'If yes, implement and test, updating both code and specs; otherwise, decompose into tasks as a new IR under @specs/iterations.',
116
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; ensure @specs/map.md reflects the changes.',
115
+ 'If yes, implement and test, updating both code and specs; otherwise, decompose into tasks as a new IR under @specs/iterations and stop without implementing any IR task.',
116
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
117
+ 'Ensure @specs/map.md reflects the changes.',
117
118
  'Do not commit.',
118
119
  ].join('\n'),
119
120
  result: withNeedsBossReply({
@@ -154,7 +155,7 @@ const summarizeSpecsInput = (context) => ({
154
155
  'The set should be complete and coherent.',
155
156
  'Avoid implementation specifics.',
156
157
  'Avoid redundant spec items.',
157
- 'Consult @specs/map.md for relevant context and update it to reflect your changes.',
158
+ 'Ensure @specs/map.md reflects the changes.',
158
159
  ].join('\n'),
159
160
  result: withNeedsBossReply({
160
161
  specsReady: 'Coder produced uncommitted spec updates (Initial Changes).',
@@ -501,8 +502,10 @@ export const codingMachine = setup({
501
502
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
502
503
  '',
503
504
  'Flag anything missing, redundant, over-specified, or under-specified.',
504
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
505
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
506
+ 'Verify @specs/map.md reflects the changes.',
505
507
  "If the change is ready to commit or push, don't raise nitpicks.",
508
+ 'Do not edit files or commit; report findings only.',
506
509
  ].join('\n'),
507
510
  result: {
508
511
  noFindings: 'The spec-only commit has no review findings.',
@@ -538,8 +541,10 @@ export const codingMachine = setup({
538
541
  'Refer to the commit message.',
539
542
  'Flag any issues or improvements (numbered; no duplication).',
540
543
  "Think thoroughly — don't just approve or reject.",
541
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
544
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
545
+ 'Verify @specs/map.md reflects the changes.',
542
546
  "If the change is ready to commit or push, don't raise nitpicks.",
547
+ 'Do not edit files or commit; report findings only.',
543
548
  ].join('\n'),
544
549
  result: {
545
550
  noFindings: 'The code-only commit has no review findings.',
@@ -582,8 +587,10 @@ export const codingMachine = setup({
582
587
  'Flag anything missing, redundant, over-specified, or under-specified.',
583
588
  'Flag any issues or improvements (numbered; no duplication).',
584
589
  "Think thoroughly — don't just approve or reject.",
585
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
590
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
591
+ 'Verify @specs/map.md reflects the changes.',
586
592
  "If the change is ready to commit or push, don't raise nitpicks.",
593
+ 'Do not edit files or commit; report findings only.',
587
594
  ].join('\n'),
588
595
  result: {
589
596
  noFindings: 'The mixed commit has no review findings.',
@@ -625,8 +632,10 @@ export const codingMachine = setup({
625
632
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
626
633
  '',
627
634
  'Flag anything missing, redundant, over-specified, or under-specified.',
628
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
635
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
636
+ 'Verify @specs/map.md reflects the changes.',
629
637
  "If the change is ready to commit or push, don't raise nitpicks.",
638
+ 'Do not edit files or commit; report findings only.',
630
639
  ].join('\n'),
631
640
  result: {
632
641
  noFindings: 'The IR-task spec-only commit has no review findings.',
@@ -663,8 +672,10 @@ export const codingMachine = setup({
663
672
  'Refer to the commit message.',
664
673
  'Flag any issues or improvements (numbered; no duplication).',
665
674
  "Think thoroughly — don't just approve or reject.",
666
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
675
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
676
+ 'Verify @specs/map.md reflects the changes.',
667
677
  "If the change is ready to commit or push, don't raise nitpicks.",
678
+ 'Do not edit files or commit; report findings only.',
668
679
  ].join('\n'),
669
680
  result: {
670
681
  noFindings: 'The IR-task code-only commit has no review findings.',
@@ -708,8 +719,10 @@ export const codingMachine = setup({
708
719
  'Flag anything missing, redundant, over-specified, or under-specified.',
709
720
  'Flag any issues or improvements (numbered; no duplication).',
710
721
  "Think thoroughly — don't just approve or reject.",
711
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
722
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
723
+ 'Verify @specs/map.md reflects the changes.',
712
724
  "If the change is ready to commit or push, don't raise nitpicks.",
725
+ 'Do not edit files or commit; report findings only.',
713
726
  ].join('\n'),
714
727
  result: {
715
728
  noFindings: 'The IR-task mixed commit has no review findings.',
@@ -740,7 +753,7 @@ export const codingMachine = setup({
740
753
  sourceItem: 'CODE-11',
741
754
  ...bossReplyInputFields(context),
742
755
  prompt: [
743
- 'Review the unstaged/untracked changes.',
756
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
744
757
  'Understand the intent.',
745
758
  'Verify any affected spec items are:',
746
759
  '',
@@ -749,8 +762,10 @@ export const codingMachine = setup({
749
762
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
750
763
  '',
751
764
  'Flag anything missing, redundant, over-specified, or under-specified.',
752
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
765
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
766
+ 'Verify @specs/map.md reflects the changes.',
753
767
  "If the change is ready to commit or push, don't raise nitpicks.",
768
+ 'Do not edit files or commit; report findings only.',
754
769
  ].join('\n'),
755
770
  result: {
756
771
  noFindings: 'The uncommitted spec-only changes are ready to commit.',
@@ -783,12 +798,14 @@ export const codingMachine = setup({
783
798
  sourceItem: 'CODE-12',
784
799
  ...bossReplyInputFields(context),
785
800
  prompt: [
786
- 'Review the unstaged/untracked changes.',
801
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
787
802
  'Understand the intent.',
788
803
  'Flag any issues or improvements (numbered; no duplication).',
789
804
  "Think thoroughly — don't just approve or reject.",
790
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
805
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
806
+ 'Verify @specs/map.md reflects the changes.',
791
807
  "If the change is ready to commit or push, don't raise nitpicks.",
808
+ 'Do not edit files or commit; report findings only.',
792
809
  ].join('\n'),
793
810
  result: {
794
811
  noFindings: 'The uncommitted code-only changes are ready to commit.',
@@ -821,7 +838,7 @@ export const codingMachine = setup({
821
838
  sourceItem: 'CODE-13',
822
839
  ...bossReplyInputFields(context),
823
840
  prompt: [
824
- 'Review the unstaged/untracked changes.',
841
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
825
842
  'Understand the intent.',
826
843
  'Verify any affected spec items are:',
827
844
  '',
@@ -832,8 +849,10 @@ export const codingMachine = setup({
832
849
  'Flag anything missing, redundant, over-specified, or under-specified.',
833
850
  'Flag any issues or improvements (numbered; no duplication).',
834
851
  "Think thoroughly — don't just approve or reject.",
835
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
852
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
853
+ 'Verify @specs/map.md reflects the changes.',
836
854
  "If the change is ready to commit or push, don't raise nitpicks.",
855
+ 'Do not edit files or commit; report findings only.',
837
856
  ].join('\n'),
838
857
  result: {
839
858
  noFindings: 'The uncommitted mixed changes are ready to commit.',
@@ -868,7 +887,7 @@ export const codingMachine = setup({
868
887
  reviews: context.reviews,
869
888
  challenges: context.challenges,
870
889
  prompt: [
871
- 'Review the unstaged/untracked changes.',
890
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
872
891
  'Understand the intent.',
873
892
  'Verify any affected spec items are:',
874
893
  '',
@@ -877,8 +896,10 @@ export const codingMachine = setup({
877
896
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
878
897
  '',
879
898
  'Flag anything missing, redundant, over-specified, or under-specified.',
880
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
899
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
900
+ 'Verify @specs/map.md reflects the changes.',
881
901
  "If the change is ready to commit or push, don't raise nitpicks.",
902
+ 'Do not edit files or commit; report findings only.',
882
903
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
883
904
  ].join('\n'),
884
905
  result: {
@@ -914,12 +935,14 @@ export const codingMachine = setup({
914
935
  reviews: context.reviews,
915
936
  challenges: context.challenges,
916
937
  prompt: [
917
- 'Review the unstaged/untracked changes.',
938
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
918
939
  'Understand the intent.',
919
940
  'Flag any issues or improvements (numbered; no duplication).',
920
941
  "Think thoroughly — don't just approve or reject.",
921
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
942
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
943
+ 'Verify @specs/map.md reflects the changes.',
922
944
  "If the change is ready to commit or push, don't raise nitpicks.",
945
+ 'Do not edit files or commit; report findings only.',
923
946
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
924
947
  ].join('\n'),
925
948
  result: {
@@ -955,7 +978,7 @@ export const codingMachine = setup({
955
978
  reviews: context.reviews,
956
979
  challenges: context.challenges,
957
980
  prompt: [
958
- 'Review the unstaged/untracked changes.',
981
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
959
982
  'Understand the intent.',
960
983
  'Verify any affected spec items are:',
961
984
  '',
@@ -966,8 +989,10 @@ export const codingMachine = setup({
966
989
  'Flag anything missing, redundant, over-specified, or under-specified.',
967
990
  'Flag any issues or improvements (numbered; no duplication).',
968
991
  "Think thoroughly — don't just approve or reject.",
969
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
992
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
993
+ 'Verify @specs/map.md reflects the changes.',
970
994
  "If the change is ready to commit or push, don't raise nitpicks.",
995
+ 'Do not edit files or commit; report findings only.',
971
996
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
972
997
  ].join('\n'),
973
998
  result: {
@@ -1004,6 +1029,7 @@ export const codingMachine = setup({
1004
1029
  challenges: context.challenges,
1005
1030
  prompt: [
1006
1031
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
1032
+ 'Do not edit files or commit; report findings only.',
1007
1033
  ].join('\n'),
1008
1034
  result: {
1009
1035
  challengeAccepted: 'Reviewer accepted the rebuttal — no further review edits are required.',
@@ -1063,8 +1089,10 @@ export const codingMachine = setup({
1063
1089
  sourceItem: 'CODE-18',
1064
1090
  ...bossReplyInputFields(context),
1065
1091
  coderPlayer: context.coderPlayer,
1092
+ committerPlayer: context.committerPlayer,
1066
1093
  prompt: [
1067
1094
  'Make a commit of the changes that belong in the repo, following @specs/dev/git.md (reread if necessary).',
1095
+ 'Write concisely.',
1068
1096
  'Coder is <coder-llm>.',
1069
1097
  'Format the `Co-authored-by` `<model>` token as the conventional human form of the substituted id (e.g., `claude-opus-4-7` → `Claude-Opus-4.7`, `gpt-5.5` → `GPT-5.5`).',
1070
1098
  ].join('\n'),
@@ -1125,8 +1153,10 @@ export const codingMachine = setup({
1125
1153
  ...bossReplyInputFields(context),
1126
1154
  coderPlayer: context.coderPlayer,
1127
1155
  reviewerPlayer: context.reviewerPlayer,
1156
+ committerPlayer: context.committerPlayer,
1128
1157
  prompt: [
1129
1158
  'Make a commit of the changes that belong in the repo, following @specs/dev/git.md (reread if necessary).',
1159
+ 'Write concisely.',
1130
1160
  'Coder is <coder-llm>; Reviewer is <reviewer-llm>.',
1131
1161
  'Format the `Co-authored-by` `<model>` token as the conventional human form of the substituted id (e.g., `claude-opus-4-7` → `Claude-Opus-4.7`, `gpt-5.5` → `GPT-5.5`).',
1132
1162
  ].join('\n'),
@@ -66,6 +66,13 @@ export type CaptainInput = {
66
66
  challenges?: string;
67
67
  coderPlayer?: string;
68
68
  reviewerPlayer?: string;
69
+ // Routing-only: the configured Committer-alias player id (`coder` /
70
+ // `reviewer`) threaded from `captain.options.code.committer`
71
+ // (PBRT-8 / PBRT-30). It selects which host pane runs a `Committer`
72
+ // commit; it is not a prompt-placeholder source, so it never affects
73
+ // <coder-llm> / <reviewer-llm> substitution or any labelled block,
74
+ // and `input.player` stays `Committer` (PLAYBOOK-3).
75
+ committerPlayer?: string;
69
76
  pendingBossQuestion?: PendingBossQuestion;
70
77
  bossReply?: string;
71
78
  };
@@ -254,8 +261,9 @@ const planAndImplementInput: CaptainInputFactory = (context) => ({
254
261
  ...bossReplyInputFields(context),
255
262
  prompt: [
256
263
  'Assess whether this can be completed in a single commit, following best practices.',
257
- 'If yes, implement and test, updating both code and specs; otherwise, decompose into tasks as a new IR under @specs/iterations.',
258
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; ensure @specs/map.md reflects the changes.',
264
+ 'If yes, implement and test, updating both code and specs; otherwise, decompose into tasks as a new IR under @specs/iterations and stop without implementing any IR task.',
265
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
266
+ 'Ensure @specs/map.md reflects the changes.',
259
267
  'Do not commit.',
260
268
  ].join('\n'),
261
269
  result: withNeedsBossReply({
@@ -301,7 +309,7 @@ const summarizeSpecsInput: CaptainInputFactory = (context) => ({
301
309
  'The set should be complete and coherent.',
302
310
  'Avoid implementation specifics.',
303
311
  'Avoid redundant spec items.',
304
- 'Consult @specs/map.md for relevant context and update it to reflect your changes.',
312
+ 'Ensure @specs/map.md reflects the changes.',
305
313
  ].join('\n'),
306
314
  result: withNeedsBossReply({
307
315
  specsReady: 'Coder produced uncommitted spec updates (Initial Changes).',
@@ -708,8 +716,10 @@ export const codingMachine = setup({
708
716
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
709
717
  '',
710
718
  'Flag anything missing, redundant, over-specified, or under-specified.',
711
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
719
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
720
+ 'Verify @specs/map.md reflects the changes.',
712
721
  "If the change is ready to commit or push, don't raise nitpicks.",
722
+ 'Do not edit files or commit; report findings only.',
713
723
  ].join('\n'),
714
724
  result: {
715
725
  noFindings: 'The spec-only commit has no review findings.',
@@ -748,8 +758,10 @@ export const codingMachine = setup({
748
758
  'Refer to the commit message.',
749
759
  'Flag any issues or improvements (numbered; no duplication).',
750
760
  "Think thoroughly — don't just approve or reject.",
751
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
761
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
762
+ 'Verify @specs/map.md reflects the changes.',
752
763
  "If the change is ready to commit or push, don't raise nitpicks.",
764
+ 'Do not edit files or commit; report findings only.',
753
765
  ].join('\n'),
754
766
  result: {
755
767
  noFindings: 'The code-only commit has no review findings.',
@@ -795,8 +807,10 @@ export const codingMachine = setup({
795
807
  'Flag anything missing, redundant, over-specified, or under-specified.',
796
808
  'Flag any issues or improvements (numbered; no duplication).',
797
809
  "Think thoroughly — don't just approve or reject.",
798
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
810
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
811
+ 'Verify @specs/map.md reflects the changes.',
799
812
  "If the change is ready to commit or push, don't raise nitpicks.",
813
+ 'Do not edit files or commit; report findings only.',
800
814
  ].join('\n'),
801
815
  result: {
802
816
  noFindings: 'The mixed commit has no review findings.',
@@ -841,8 +855,10 @@ export const codingMachine = setup({
841
855
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
842
856
  '',
843
857
  'Flag anything missing, redundant, over-specified, or under-specified.',
844
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
858
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
859
+ 'Verify @specs/map.md reflects the changes.',
845
860
  "If the change is ready to commit or push, don't raise nitpicks.",
861
+ 'Do not edit files or commit; report findings only.',
846
862
  ].join('\n'),
847
863
  result: {
848
864
  noFindings: 'The IR-task spec-only commit has no review findings.',
@@ -882,8 +898,10 @@ export const codingMachine = setup({
882
898
  'Refer to the commit message.',
883
899
  'Flag any issues or improvements (numbered; no duplication).',
884
900
  "Think thoroughly — don't just approve or reject.",
885
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
901
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
902
+ 'Verify @specs/map.md reflects the changes.',
886
903
  "If the change is ready to commit or push, don't raise nitpicks.",
904
+ 'Do not edit files or commit; report findings only.',
887
905
  ].join('\n'),
888
906
  result: {
889
907
  noFindings: 'The IR-task code-only commit has no review findings.',
@@ -930,8 +948,10 @@ export const codingMachine = setup({
930
948
  'Flag anything missing, redundant, over-specified, or under-specified.',
931
949
  'Flag any issues or improvements (numbered; no duplication).',
932
950
  "Think thoroughly — don't just approve or reject.",
933
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
951
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
952
+ 'Verify @specs/map.md reflects the changes.',
934
953
  "If the change is ready to commit or push, don't raise nitpicks.",
954
+ 'Do not edit files or commit; report findings only.',
935
955
  ].join('\n'),
936
956
  result: {
937
957
  noFindings: 'The IR-task mixed commit has no review findings.',
@@ -965,7 +985,7 @@ export const codingMachine = setup({
965
985
  sourceItem: 'CODE-11',
966
986
  ...bossReplyInputFields(context),
967
987
  prompt: [
968
- 'Review the unstaged/untracked changes.',
988
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
969
989
  'Understand the intent.',
970
990
  'Verify any affected spec items are:',
971
991
  '',
@@ -974,8 +994,10 @@ export const codingMachine = setup({
974
994
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
975
995
  '',
976
996
  'Flag anything missing, redundant, over-specified, or under-specified.',
977
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
997
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
998
+ 'Verify @specs/map.md reflects the changes.',
978
999
  "If the change is ready to commit or push, don't raise nitpicks.",
1000
+ 'Do not edit files or commit; report findings only.',
979
1001
  ].join('\n'),
980
1002
  result: {
981
1003
  noFindings: 'The uncommitted spec-only changes are ready to commit.',
@@ -1011,12 +1033,14 @@ export const codingMachine = setup({
1011
1033
  sourceItem: 'CODE-12',
1012
1034
  ...bossReplyInputFields(context),
1013
1035
  prompt: [
1014
- 'Review the unstaged/untracked changes.',
1036
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
1015
1037
  'Understand the intent.',
1016
1038
  'Flag any issues or improvements (numbered; no duplication).',
1017
1039
  "Think thoroughly — don't just approve or reject.",
1018
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
1040
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
1041
+ 'Verify @specs/map.md reflects the changes.',
1019
1042
  "If the change is ready to commit or push, don't raise nitpicks.",
1043
+ 'Do not edit files or commit; report findings only.',
1020
1044
  ].join('\n'),
1021
1045
  result: {
1022
1046
  noFindings: 'The uncommitted code-only changes are ready to commit.',
@@ -1052,7 +1076,7 @@ export const codingMachine = setup({
1052
1076
  sourceItem: 'CODE-13',
1053
1077
  ...bossReplyInputFields(context),
1054
1078
  prompt: [
1055
- 'Review the unstaged/untracked changes.',
1079
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
1056
1080
  'Understand the intent.',
1057
1081
  'Verify any affected spec items are:',
1058
1082
  '',
@@ -1063,8 +1087,10 @@ export const codingMachine = setup({
1063
1087
  'Flag anything missing, redundant, over-specified, or under-specified.',
1064
1088
  'Flag any issues or improvements (numbered; no duplication).',
1065
1089
  "Think thoroughly — don't just approve or reject.",
1066
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
1090
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
1091
+ 'Verify @specs/map.md reflects the changes.',
1067
1092
  "If the change is ready to commit or push, don't raise nitpicks.",
1093
+ 'Do not edit files or commit; report findings only.',
1068
1094
  ].join('\n'),
1069
1095
  result: {
1070
1096
  noFindings: 'The uncommitted mixed changes are ready to commit.',
@@ -1102,7 +1128,7 @@ export const codingMachine = setup({
1102
1128
  reviews: context.reviews,
1103
1129
  challenges: context.challenges,
1104
1130
  prompt: [
1105
- 'Review the unstaged/untracked changes.',
1131
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
1106
1132
  'Understand the intent.',
1107
1133
  'Verify any affected spec items are:',
1108
1134
  '',
@@ -1111,8 +1137,10 @@ export const codingMachine = setup({
1111
1137
  '- Minimal: essential and concise; every item earns its place; also check with other items.',
1112
1138
  '',
1113
1139
  'Flag anything missing, redundant, over-specified, or under-specified.',
1114
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
1140
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
1141
+ 'Verify @specs/map.md reflects the changes.',
1115
1142
  "If the change is ready to commit or push, don't raise nitpicks.",
1143
+ 'Do not edit files or commit; report findings only.',
1116
1144
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
1117
1145
  ].join('\n'),
1118
1146
  result: {
@@ -1152,12 +1180,14 @@ export const codingMachine = setup({
1152
1180
  reviews: context.reviews,
1153
1181
  challenges: context.challenges,
1154
1182
  prompt: [
1155
- 'Review the unstaged/untracked changes.',
1183
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
1156
1184
  'Understand the intent.',
1157
1185
  'Flag any issues or improvements (numbered; no duplication).',
1158
1186
  "Think thoroughly — don't just approve or reject.",
1159
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
1187
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
1188
+ 'Verify @specs/map.md reflects the changes.',
1160
1189
  "If the change is ready to commit or push, don't raise nitpicks.",
1190
+ 'Do not edit files or commit; report findings only.',
1161
1191
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
1162
1192
  ].join('\n'),
1163
1193
  result: {
@@ -1197,7 +1227,7 @@ export const codingMachine = setup({
1197
1227
  reviews: context.reviews,
1198
1228
  challenges: context.challenges,
1199
1229
  prompt: [
1200
- 'Review the unstaged/untracked changes.',
1230
+ 'Review the unstaged and untracked changes in the context of the staged changes.',
1201
1231
  'Understand the intent.',
1202
1232
  'Verify any affected spec items are:',
1203
1233
  '',
@@ -1208,8 +1238,10 @@ export const codingMachine = setup({
1208
1238
  'Flag anything missing, redundant, over-specified, or under-specified.',
1209
1239
  'Flag any issues or improvements (numbered; no duplication).',
1210
1240
  "Think thoroughly — don't just approve or reject.",
1211
- 'Consult @specs/map.md or @specs/meta.md for relevant context if needed; verify @specs/map.md reflects the changes.',
1241
+ 'For context discovery, @specs/map.md indexes all spec files and @specs/meta.md describes the spec format.',
1242
+ 'Verify @specs/map.md reflects the changes.',
1212
1243
  "If the change is ready to commit or push, don't raise nitpicks.",
1244
+ 'Do not edit files or commit; report findings only.',
1213
1245
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
1214
1246
  ].join('\n'),
1215
1247
  result: {
@@ -1249,6 +1281,7 @@ export const codingMachine = setup({
1249
1281
  challenges: context.challenges,
1250
1282
  prompt: [
1251
1283
  'For each rebuttal below, challenge or accept it, with strong reasoning, solid evidence, and comprehensive thinking.',
1284
+ 'Do not edit files or commit; report findings only.',
1252
1285
  ].join('\n'),
1253
1286
  result: {
1254
1287
  challengeAccepted:
@@ -1316,8 +1349,10 @@ export const codingMachine = setup({
1316
1349
  sourceItem: 'CODE-18',
1317
1350
  ...bossReplyInputFields(context),
1318
1351
  coderPlayer: context.coderPlayer,
1352
+ committerPlayer: context.committerPlayer,
1319
1353
  prompt: [
1320
1354
  'Make a commit of the changes that belong in the repo, following @specs/dev/git.md (reread if necessary).',
1355
+ 'Write concisely.',
1321
1356
  'Coder is <coder-llm>.',
1322
1357
  'Format the `Co-authored-by` `<model>` token as the conventional human form of the substituted id (e.g., `claude-opus-4-7` → `Claude-Opus-4.7`, `gpt-5.5` → `GPT-5.5`).',
1323
1358
  ].join('\n'),
@@ -1380,8 +1415,10 @@ export const codingMachine = setup({
1380
1415
  ...bossReplyInputFields(context),
1381
1416
  coderPlayer: context.coderPlayer,
1382
1417
  reviewerPlayer: context.reviewerPlayer,
1418
+ committerPlayer: context.committerPlayer,
1383
1419
  prompt: [
1384
1420
  'Make a commit of the changes that belong in the repo, following @specs/dev/git.md (reread if necessary).',
1421
+ 'Write concisely.',
1385
1422
  'Coder is <coder-llm>; Reviewer is <reviewer-llm>.',
1386
1423
  'Format the `Co-authored-by` `<model>` token as the conventional human form of the substituted id (e.g., `claude-opus-4-7` → `Claude-Opus-4.7`, `gpt-5.5` → `GPT-5.5`).',
1387
1424
  ].join('\n'),