Repository navigation
feat: add --description-file and stdin input for long bodies - #47
Closed
seraph-pixelperfect wants to merge 1 commit into
Closed
seraph-pixelperfect wants to merge 1 commit into
seraph-pixelperfect wants to merge 1 commit into
Conversation
This was referenced Aug 19, 2026
Collaborator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #28
Depends on #46
What
--description-file <path>onissue createandissue update, mirroring the existing--body-fileoncomment— plus-to read the description from stdin to EOF (new capability, file case only on--body-file). Long markdown bodies without shell-quoting hazards.src/commands/issue.ts: flag added toCREATE_FLAGS/UPDATE_FLAGS; sharedreadDescriptionInputguard (mutual exclusion with--descriptionusing comment's "Pass only one of…" convention, blank-value guard); exportedreadDescriptionFile(path, read?)reader — a UTF-8 file path, or-mapped to fd 0 (readFileSync(0, 'utf-8')). Both flags absent → field omitted exactly as before.test/description-file.test.ts: 17 new tests (create/update content lands in mutation variables, stdin end-to-end for both subcommands, mutual exclusion, unreadable path, empty file, blank value, default-unchanged, reader semantics, help).Demo (real CLI, fake key — proves the flag parses and the file is read; content transport is proven by the stubbed tests)
(AUTH_REQUIRED is the fake key at the API layer — the flag was accepted, the file/stdin was read, and the request was attempted. Same for
issue update LIN-123 --description-file /tmp/demo-desc.md.)Loud guards (all fail before any network request, exit 2):
Local gates (all run against the pushed commit)
pnpm run format:checkstill flags the pre-existing set of 18 files (identical to the base branch; CI does not run it).skills/linear-axi/SKILL.mdneeded no regen — it derives fromTOP_HELP, which this change does not touch;--checkconfirms.Stacked-PR note
Stacked on #46 (
feat/sub-issues); stack: #37→#38→#39→#40→#41→#42→#43→#44→#45→#46→this PR. No CI checks appear becauseci.ymlonly triggers on PRs targetingmain. CI runs when retargeted tomainafter the stack merges; local gates above are the evidence. Not retargeting.CI caveat: if checks do appear and fail fast (~3-4s, empty steps), that pattern indicates a billing/spending-limit rejection rather than a code failure —
gh run view <run-id>would show the billing annotation.Flagged decisions (review attention)
--description-file is empty: <path>, VALIDATION_ERROR) rather than accepted as"". Rationale: onupdate, a silently-empty description would wipe the field — a destructive no-op. Inline--description ""keeps its pre-existing pass-through behavior (out of scope here).-works on--description-fileonly. The issue claims stdin for--description-file; comment's--body-filewas left untouched to keep this PR minimal. Follow-up candidate: extend-tocomment --body-file(and reuse this reader) for consistency.readDescriptionFile(path, read?)takes an injectable raw-read function (defaultreadFileSyncutf-8, which serves both a path and a numeric fd). Tests demonstrate-→fd 0 two ways: reader-level with an injected read assertingread(0), and command-level withnode:fsmocked so fd 0 serves fixed content — no real stdin dependence, no network.Identity
Automated agent dispatch authenticated as
seraph-pixelperfect; submitted for human review — not self-approved. Merge is a human decision.