github-issue-tower-defence-management 1.122.7 → 1.122.8

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.122.8](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.122.7...v1.122.8) (2026-07-14)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * instruct unconditional re-raise in stale-owner-call reminder ([#1168](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1168)) ([f246cd3](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/f246cd385befd0f29c51576593a1ecb2fd23bf40))
7
+
1
8
  ## [1.122.7](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.122.6...v1.122.7) (2026-07-14)
2
9
 
3
10
 
@@ -44,9 +44,9 @@ const composeMainStalledWithStaleOwnerCallMessage = (mainSilentSeconds, unanswer
44
44
  const silentMinutes = Math.floor(mainSilentSeconds / 60);
45
45
  const ownerCallAgeMinutes = Math.floor(unansweredOwnerCallAgeSeconds / 60);
46
46
  return [
47
- `${silentSessionReminderSentinel_1.SILENT_SESSION_REMINDER_SENTINEL} This is an automated status check. No output has been observed for ${silentMinutes} minutes, and the owner call raised ${ownerCallAgeMinutes} minutes ago is still unanswered.`,
48
- `If you are still waiting on that answer, the older owner call may have been missed, so please re-raise the ask as a fresh, self-contained owner call. ${(0, exports.composeOwnerCallFormatGuidance)(ownerCallMarker)}`,
49
- `If you are no longer blocked, please continue with the next step. Please also include in your next output an estimate of the remaining minutes to finish all tasks.`,
47
+ `${silentSessionReminderSentinel_1.SILENT_SESSION_REMINDER_SENTINEL} This is an automated status check. No output has been observed for ${silentMinutes} minutes, and the owner call raised ${ownerCallAgeMinutes} minutes ago has not yet been acknowledged by the owner.`,
48
+ `An owner call without an acknowledgment — whether it carried a completion report, a question, or a decision request — is still awaiting the owner's acknowledgment, and the earlier message may have been missed. Please re-raise its content as a fresh, self-contained owner call. ${(0, exports.composeOwnerCallFormatGuidance)(ownerCallMarker)}`,
49
+ `Please also include in your next output an estimate of the remaining minutes to finish all tasks.`,
50
50
  ].join('\n');
51
51
  };
52
52
  class DefaultSilentSessionMessageComposer {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSilentSessionMessageComposer.js","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DefaultSilentSessionMessageComposer.js","sourceRoot":"","sources":["../../../src/domain/usecases/DefaultSilentSessionMessageComposer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.122.7",
3
+ "version": "1.122.8",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -308,10 +308,12 @@ describe('notifySilentTmuxSessions', () => {
308
308
  (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
309
309
  );
310
310
  expect(sendCall?.[1][2]).toBe(SESSION_NAME);
311
- expect(sendCall?.[1][4]).toContain('is still unanswered');
311
+ expect(sendCall?.[1][4]).toContain('has not yet been acknowledged');
312
312
  expect(sendCall?.[1][4]).toContain(
313
- 're-raise the ask as a fresh, self-contained owner call',
313
+ 're-raise its content as a fresh, self-contained owner call',
314
314
  );
315
+ expect(sendCall?.[1][4]).not.toContain('no longer blocked');
316
+ expect(sendCall?.[1][4]).not.toContain('continue with the next step');
315
317
  });
316
318
 
317
319
  it('defers the first cycle then notifies on the next cycle once the persisted candidate state confirms a second consecutive cycle', async () => {
@@ -113,33 +113,63 @@ describe('DefaultSilentSessionMessageComposer', () => {
113
113
  3659,
114
114
  );
115
115
  expect(section).toContain(
116
- 'No output has been observed for 10 minutes, and the owner call raised 60 minutes ago is still unanswered.',
116
+ 'No output has been observed for 10 minutes, and the owner call raised 60 minutes ago has not yet been acknowledged by the owner.',
117
117
  );
118
118
  });
119
119
 
120
- it('suggests re-raising the pending ask as a fresh self-contained owner call when still waiting', () => {
120
+ it('instructs unconditionally to re-raise the content as a fresh self-contained owner call', () => {
121
121
  const section = composer.composeMainStalledWithStaleOwnerCallSection(
122
122
  600,
123
123
  3600,
124
124
  );
125
125
  expect(section).toContain(
126
- 'please re-raise the ask as a fresh, self-contained owner call',
126
+ 'Please re-raise its content as a fresh, self-contained owner call.',
127
127
  );
128
128
  });
129
129
 
130
- it('suggests continuing when no longer blocked and requests a remaining-minutes estimate', () => {
130
+ it('frames every unanswered owner call kind as awaiting acknowledgment', () => {
131
131
  const section = composer.composeMainStalledWithStaleOwnerCallSection(
132
132
  600,
133
133
  3600,
134
134
  );
135
+ expect(section).toContain('acknowledg');
135
136
  expect(section).toContain(
136
- 'If you are no longer blocked, please continue with the next step.',
137
+ 'a completion report, a question, or a decision request',
138
+ );
139
+ expect(section).toContain("still awaiting the owner's acknowledgment");
140
+ });
141
+
142
+ it('contains no not-blocked escape phrasing and no conditional re-raise phrasing', () => {
143
+ const section = composer.composeMainStalledWithStaleOwnerCallSection(
144
+ 600,
145
+ 3600,
146
+ );
147
+ expect(section).not.toContain('no longer blocked');
148
+ expect(section).not.toContain('continue with the next step');
149
+ expect(section).not.toContain('If you are still waiting');
150
+ expect(section).not.toContain('If you are');
151
+ });
152
+
153
+ it('requests a remaining-minutes estimate in the stale-owner-call section', () => {
154
+ const section = composer.composeMainStalledWithStaleOwnerCallSection(
155
+ 600,
156
+ 3600,
137
157
  );
138
158
  expect(section).toContain(
139
159
  'an estimate of the remaining minutes to finish all tasks',
140
160
  );
141
161
  });
142
162
 
163
+ it('states the owner-call format guidance exactly once in the stale-owner-call section', () => {
164
+ const section = composer.composeMainStalledWithStaleOwnerCallSection(
165
+ 600,
166
+ 3600,
167
+ );
168
+ const formatOccurrences =
169
+ section.split('complete opening and closing pair on one line').length - 1;
170
+ expect(formatOccurrences).toBe(1);
171
+ });
172
+
143
173
  it('interpolates the configured owner-call marker into the stale-owner-call format guidance', () => {
144
174
  const markedComposer = new DefaultSilentSessionMessageComposer(
145
175
  '<<OWNER_CALL>>',
@@ -161,7 +191,7 @@ describe('DefaultSilentSessionMessageComposer', () => {
161
191
  3600,
162
192
  );
163
193
  expect(staleSection).not.toBe(plainSection);
164
- expect(plainSection).not.toContain('is still unanswered');
194
+ expect(plainSection).not.toContain('has not yet been acknowledged');
165
195
  });
166
196
 
167
197
  it('emits a distinct idle message for a sub-agent that is only output-idle', () => {
@@ -77,11 +77,11 @@ const composeMainStalledWithStaleOwnerCallMessage = (
77
77
  const silentMinutes = Math.floor(mainSilentSeconds / 60);
78
78
  const ownerCallAgeMinutes = Math.floor(unansweredOwnerCallAgeSeconds / 60);
79
79
  return [
80
- `${SILENT_SESSION_REMINDER_SENTINEL} This is an automated status check. No output has been observed for ${silentMinutes} minutes, and the owner call raised ${ownerCallAgeMinutes} minutes ago is still unanswered.`,
81
- `If you are still waiting on that answer, the older owner call may have been missed, so please re-raise the ask as a fresh, self-contained owner call. ${composeOwnerCallFormatGuidance(
80
+ `${SILENT_SESSION_REMINDER_SENTINEL} This is an automated status check. No output has been observed for ${silentMinutes} minutes, and the owner call raised ${ownerCallAgeMinutes} minutes ago has not yet been acknowledged by the owner.`,
81
+ `An owner call without an acknowledgment — whether it carried a completion report, a question, or a decision request — is still awaiting the owner's acknowledgment, and the earlier message may have been missed. Please re-raise its content as a fresh, self-contained owner call. ${composeOwnerCallFormatGuidance(
82
82
  ownerCallMarker,
83
83
  )}`,
84
- `If you are no longer blocked, please continue with the next step. Please also include in your next output an estimate of the remaining minutes to finish all tasks.`,
84
+ `Please also include in your next output an estimate of the remaining minutes to finish all tasks.`,
85
85
  ].join('\n');
86
86
  };
87
87