Context
packages/loopover-miner/lib/idea-feasibility.js:38-40 computes objectiveSignals = idea.acceptanceHints?.length ?? 0 — array length only, never content. idea-feasibility-cli.js:34-42's --hint parsing only rejects undefined or a value starting with -; a whitespace-only value like " " is accepted verbatim. packages/loopover-engine/src/idea-intake.ts:104-107's validateIdeaSubmission only checks the array holds strings, no non-blank check (unlike its own isNonEmptyString guard used for id/title/body). So { acceptanceHints: [" "] } sails through as issueStatus: "ready", directly contradicting the module's own stated purpose: "An idea with no objective success signal is invalid... and is rejected before compute."
Requirements
deriveIdeaIssueStatus must count only non-blank (trimmed, non-empty) hints toward objectiveSignals.
idea-feasibility-cli.js's --hint parsing should reject a whitespace-only value with the same error used for a missing value.
Deliverables
Test Coverage Requirements
99%+ Codecov patch coverage on every changed line and branch, plus a regression test that reproduces the exact failure mode described above and asserts it's fixed.
Expected Outcome
A whitespace-only acceptance hint is correctly rejected as "no objective success signal," matching the module's stated purpose.
Links & Resources
packages/loopover-miner/lib/idea-feasibility.js:16-18,38-40, packages/loopover-miner/lib/idea-feasibility-cli.js:34-42, packages/loopover-engine/src/idea-intake.ts:79-80,104-107.
Context
packages/loopover-miner/lib/idea-feasibility.js:38-40computesobjectiveSignals = idea.acceptanceHints?.length ?? 0— array length only, never content.idea-feasibility-cli.js:34-42's--hintparsing only rejectsundefinedor a value starting with-; a whitespace-only value like" "is accepted verbatim.packages/loopover-engine/src/idea-intake.ts:104-107'svalidateIdeaSubmissiononly checks the array holds strings, no non-blank check (unlike its ownisNonEmptyStringguard used forid/title/body). So{ acceptanceHints: [" "] }sails through asissueStatus: "ready", directly contradicting the module's own stated purpose: "An idea with no objective success signal is invalid... and is rejected before compute."Requirements
deriveIdeaIssueStatusmust count only non-blank (trimmed, non-empty) hints towardobjectiveSignals.idea-feasibility-cli.js's--hintparsing should reject a whitespace-only value with the same error used for a missing value.Deliverables
deriveIdeaIssueStatus'sobjectiveSignalscomputation--hintacceptanceHints: [" "]returns"invalid";--hint " "returns a parse errorTest Coverage Requirements
99%+ Codecov patch coverage on every changed line and branch, plus a regression test that reproduces the exact failure mode described above and asserts it's fixed.
Expected Outcome
A whitespace-only acceptance hint is correctly rejected as "no objective success signal," matching the module's stated purpose.
Links & Resources
packages/loopover-miner/lib/idea-feasibility.js:16-18,38-40,packages/loopover-miner/lib/idea-feasibility-cli.js:34-42,packages/loopover-engine/src/idea-intake.ts:79-80,104-107.