@galda/cli 0.10.86 → 0.10.87

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/app/index.html CHANGED
@@ -9859,6 +9859,11 @@ function saItemHtml(it, i){
9859
9859
  // verification visible together while prior attempts stay in Conversation.
9860
9860
  const attempt = it.attempt;
9861
9861
  const activeText = String(attempt?.activeRequirement?.text || '').replace(/\s+/g, ' ').trim();
9862
+ const requestText = String(it.goalText || '').replace(/\s+/g, ' ').trim();
9863
+ // A single requirement is commonly recorded verbatim from the Request. Do
9864
+ // not make the review read it back as a second section; keep this section for
9865
+ // a narrowed retry requirement or concrete run evidence instead.
9866
+ const reviewText = activeText && activeText !== requestText ? activeText : '';
9862
9867
  const attemptFiles = Array.isArray(attempt?.changedFiles) ? attempt.changedFiles.filter(Boolean) : [];
9863
9868
  const attemptTests = attempt?.verification?.tests;
9864
9869
  const attemptProof = attempt?.verification?.proof;
@@ -9867,8 +9872,8 @@ function saItemHtml(it, i){
9867
9872
  attemptTests?.ran ? `Tests: ${attemptTests.passed ?? 0} passed${attemptTests.failed ? ` / ${attemptTests.failed} failed` : ''}` : '',
9868
9873
  attemptProof?.pass === true ? 'Proof recorded' : '',
9869
9874
  ].filter(Boolean).join(' · ');
9870
- const attemptSec = activeText || attemptEvidence
9871
- ? `<section class="rsec"><div class="rsec-h">This review</div>${activeText ? `<p class="rbody rask">${esc(activeText)}</p>` : ''}${attemptEvidence ? `<p class="rbody v">${esc(attemptEvidence)}</p>` : ''}</section>`
9875
+ const attemptSec = reviewText || attemptEvidence
9876
+ ? `<section class="rsec"><div class="rsec-h">This review</div>${reviewText ? `<p class="rbody rask">${esc(reviewText)}</p>` : ''}${attemptEvidence ? `<p class="rbody v">${esc(attemptEvidence)}</p>` : ''}</section>`
9872
9877
  : '';
9873
9878
  const reqVerify = it.requirementVerification;
9874
9879
  const reqVerifyParts = [
@@ -9877,10 +9882,15 @@ function saItemHtml(it, i){
9877
9882
  Array.isArray(reqVerify?.changedFiles) && reqVerify.changedFiles.length ? `Files: ${reqVerify.changedFiles.join(' · ')}` : '',
9878
9883
  ].filter(Boolean);
9879
9884
  const reqVerifySec = reqVerifyParts.length ? `<section class="rsec"><div class="rsec-h">Requirement verification</div><p class="rbody v">${esc(reqVerifyParts.join(' · '))}</p></section>` : '';
9880
- const coverageRows = (it.requirementCoverage || []).filter((r) => r.text).map((r) => {
9885
+ const coverage = (it.requirementCoverage || []).filter((r) => r.text);
9886
+ // For one requirement copied from Request, its status is useful but the full
9887
+ // sentence is not. Multiple or narrowed requirements retain their text.
9888
+ const coverageIsSingleRequest = coverage.length === 1
9889
+ && String(coverage[0].text).replace(/\s+/g, ' ').trim() === requestText;
9890
+ const coverageRows = coverage.map((r) => {
9881
9891
  const status = r.evidenceStatus || r.taskStatus;
9882
9892
  const tone = status === 'addressed' || status === 'done' ? 'ok' : status === 'partial' ? '' : 'dim';
9883
- return `<p class="rbody v"><b class="${tone}">${esc(status)}</b> · ${esc(r.text)}</p>`;
9893
+ return `<p class="rbody v"><b class="${tone}">${esc(status)}</b>${coverageIsSingleRequest ? '' : ` · ${esc(r.text)}`}</p>`;
9884
9894
  }).join('');
9885
9895
  const coverageSec = coverageRows ? `<section class="rsec"><div class="rsec-h">Requirement coverage</div>${coverageRows}</section>` : '';
9886
9896
  // Worker-declared evidence is displayed verbatim as an auditable label, not
@@ -9890,8 +9900,6 @@ function saItemHtml(it, i){
9890
9900
  return `<p class="rbody v"><b class="${tone}">${esc(entry.status)}</b> · ${esc(entry.evidence || entry.id)}</p>`;
9891
9901
  }).join('');
9892
9902
  const evidenceSec = evidenceRows ? `<section class="rsec"><div class="rsec-h">Requirement evidence</div>${evidenceRows}</section>` : '';
9893
- const userCoverageRows = (it.requirementCoverage || []).filter((r) => r.text).map((r) => `<p class="rbody v"><b class="${r.status === 'done' ? 'ok' : 'dim'}">${esc(r.status)}</b> · ${esc(r.text)}</p>`).join('');
9894
- const userCoverageSec = userCoverageRows ? `<section class="rsec"><div class="rsec-h">User requirements</div>${userCoverageRows}</section>` : '';
9895
9903
  // ── Open it (Masa 2026-07-22): a plain section in the card's own typography — the same
9896
9904
  // heading + body shape as Request and Result, not a chip in another vocabulary. The
9897
9905
  // address the worker declared IS the control (press it → the process starts on demand →
@@ -10122,7 +10130,6 @@ function saItemHtml(it, i){
10122
10130
  ${coverageSec}
10123
10131
  ${evidenceSec}
10124
10132
  ${reqVerifySec}
10125
- ${userCoverageSec}
10126
10133
  ${S('Open it', openBody)}
10127
10134
  ${S('Run state', interruptedBody)}
10128
10135
  ${S('PR', prRepairBody)}
package/engine/server.mjs CHANGED
@@ -5520,6 +5520,12 @@ async function answerGoalQuestion(goal, question) {
5520
5520
  addGoalMessage(goal, { from: 'you', via: 'review', text });
5521
5521
  goal.text = text.slice(0, 8000);
5522
5522
  }
5523
+ // A PR request added during Review changes the deliverable, not the
5524
+ // worker's permissions. Workers deliberately cannot git add/commit; the
5525
+ // Manager close-out below owns commit/push/PR creation. Keep this
5526
+ // monotonic: an explicit later PR request upgrades a No-PR/auto goal,
5527
+ // while ordinary feedback never silently downgrades an existing PR goal.
5528
+ if (result.spawnsWorker && resolveWantsPR('auto', text, false)) goal.wantsPR = true;
5523
5529
  goal.status = result.status;
5524
5530
  saveGoal(goal);
5525
5531
  // rescope はワーカーを起こさない——「いったん止めて考え直す」なので、走り出したら
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galda/cli",
3
- "version": "0.10.86",
3
+ "version": "0.10.87",
4
4
  "type": "module",
5
5
  "description": "Galda - hand off work to Claude Code or Codex, get proof back. Runs on your existing subscription, no extra API cost.",
6
6
  "scripts": {