Repository navigation
Merge dev → main (automated) - #2082
Merged
Merged
Conversation
package.json was bumped to 1.0.9 (release commit 6543cb3) but src/version.ts was not regenerated, so wl init semaphore version (1.0.8) mismatched the package version, failing tests/cli/init.test.ts. Regenerate via the documented scripts/generate-version.cjs process (same as dfcc115 for the previous bump).
…rker resolution - resolvePodcastTarget resolves <podcast-review> (--review) and <podcast-both> (--review-rewrite) to the raw first .podcast.md Key File, with a belt-and-braces error when no script exists - both dispatch sites resolve the new markers before the generic modal-form check so they never fall through to the input form - new tests: resolvePodcastTarget review/both cases (resolution + error paths), w chord-leader hints (collapsed footer, expanded r/s/b at script-bearing stages, s-only at intake_complete, none at idea), per-sub-chord stage gating in the project-local shortcuts contract - herdr README: marker contract table extended with <podcast-review> / <podcast-both>, w chord leader description updated
…usion (red phase) Test-first coverage for the dispatched-marker exclusion (parent WL-0MSLIY8ZR004QUSY): - downtime-log.test.ts: readDowntimeLogEntries fail-safe read (missing/ unreadable -> [], malformed lines skipped) + auditDispatchedItemIds audit-tier-only scope guard (plan/intake markers ignored). - downtime-worker.test.ts: selectAuditCandidate dispatched-marker exclusion regression (WL-0MSGTLSUT002NF29), composition with isAuditFresh, empty set no-op. - index.test.ts: getNextAuditCandidate wiring tests (marker exclusion, scope guard, fail-safe missing log + malformed lines) and the e2e single-dispatch case (two consecutive idle windows -> exactly one dispatch). All 11 new tests fail against the current implementation (red phase).
…t tier Closes the duplicate-dispatch loop (parent WL-0MSLIY8ZR004QUSY) where a dispatched /skill:audit run reverts an item to completed/in_review without recording a fresh audit, re-exposing it to audit-tier selection. - downtime-log.ts: add readDowntimeLogEntries(cwd) (fail-safe: missing/ unreadable log -> [], malformed lines skipped) and auditDispatchedItemIds (audit-kind-only marker set — plan/intake markers are scoped to their own tiers and never suppress audit selection). - downtime-worker.ts: selectAuditCandidate gains an optional dispatchedItemIds exclusion set, composing with isAuditFresh (a fresh audit still governs); DowntimeWorkerDeps.getNextAuditCandidate now takes cwd so the shared log can be read per worklog root. - index.ts: getNextAuditCandidate(cwd) reads <cwd>/.worklog/downtime-dispatches.log, builds the marker set and applies it to selection. Fail-safe: missing log -> empty set, audit dispatch still works on a fresh worklog. - README: document the dispatched-marker exclusion in dispatch behaviour and the audit trail. Build (tsc) clean; full test suite 4159 passed / 0 failed.
…OXI007XD4N) The AGENTS.md deduplication dropped the ContextHub-only 'Architecture Notes for Agents' section (per operator decision Q1(a) it must be retained in ContextHub; dev-scripts and open_source_llm correctly do not carry it). Restore it under Project-specific guidance, linking to docs/ARCHITECTURE.md.
Renders the command/prompt preview on the left of the footer model line and the model identifier on the right (after the │ separator), giving the command as much width as possible: - Cap the model part at 30 visible columns (truncateToTerminalWidth appends an ellipsis when longer). - Allocate width − modelWidth − separatorWidth to the command preview (removes the old fixed 38-column reservation). - Keep the final truncateToTerminalWidth(…, width) safety clamp so the line never overflows at very narrow widths. - No-prompt case unchanged (just the model identifier). Tests: updated 'model line in footer' assertions for the new ordering, added explicit measurement of the width split, a model-cap case, and a narrow-width no-overflow case.
…ded (WL-0MSJL00P5004Y0L6) A parent cannot be completed (status) or in_review (stage) while it has uncompleted children. Adding a child via 'wl create --parent <id>' or reparenting via 'wl update <item> --parent <parent>' now automatically demotes the target parent to open/plan_complete, so the lifecycle invariant is preserved at the source instead of being recovered later by 'wl close'. - packages/shared: add demoteParentOnChildAdded() to WorklogDatabase, mirroring the cascadePriorityDowngrade pattern; add DemotedParent type - src/commands/create.ts: demote parent after creating a child with --parent; report in JSON (demotedParent) and a human summary line - src/commands/update.ts: demote the new parent when reparenting via --parent; report in JSON and human output - tests: database-level coverage (completed/in_review, completed/done, in_review stage, non-eligible no-op, missing parent, ancestor untouched) and CLI-level coverage for create/update JSON + human reporting Full suite: 224 files / 4179 tests passing.
…0MSKUANPC000OKR2) + impl (WL-0MSKUAT5D00443GA)
Test-first matrix for the herdr downtime implement tier (WL-0MSMAYPQP001FLR6). All 36 new tests fail against the current implementation (red phase): - downtime-worker.test.ts: dispatch priority audit → implement → plan → intake; fallback order; no-candidate handling; parseImplementCandidatesOutput (wl next --stage plan_complete --risk low --effort small -n N --json shape); selectImplementCandidate (status=open client-side filter AC2, risk/effort threshold boundaries AC1, dispatched-marker exclusion AC6); implement prompt/pane/comment helpers. - index.test.ts: getNextImplementCandidate dep — wl next invocation with risk/effort flags + --worklog-dir, client-side status=open selection, fail-closed on wl error/malformed output/hung timeout, kind-implement dispatched-marker exclusion, missing-log fail-safe. - downtime-log.test.ts: implementDispatchedItemIds (kind implement only, ignores audit/plan/intake markers). Coverage map: AC1 risk/effort thresholds, AC2 status=open, AC4 dispatch priority, AC5 fallback + CLI-error non-short-circuit, AC6 no-candidate + dispatched-marker exclusion, AC7 kind-implement dispatch logging. Verified red: 36 failed | 224 passed (zero regression).
…shortcuts docs-typed work items (e.g. SA-0MSKZNHEQ003NW5J) are now eligible for the intake/plan/implement shortcuts. Updates shortcuts.json, README, and tests (all 771 herdr tests pass).
…ription and md viewer Replace the hand-rolled line parser in packages/herdr with the marked v18.x lexer + a custom ANSI token walker: - md-viewer.ts: full GFM rendering — heading hierarchy (h1=██/h2=█/h3+=▌), ordered + nested bullet lists, blockquotes, aligned GFM tables, fenced + inline code, bold/italic/strikethrough, links (underlined + dim href), horizontal rules, word-wrapped paragraphs; NOTE markers still render as <id>↗ (renderNoteLinks applied pre-lex); YAML frontmatter skipped in the viewer; fail-open on parse errors. - worklist.ts: description section now renders via renderMarkdown (GFM) instead of raw line-splitting + wrap. - package.json: add marked ^18.0.5 dependency (installed into packages/herdr/node_modules). - md-viewer.test.ts: +9 GFM tests (headings, lists, blockquote, tables, inline styling, links, hr, NOTE-in-GFM, description GFM); updated h1 glyph assertion. - README.md: Markdown viewer section documents supported GFM constructs, description rendering, and the marked dependency. Full repo suite green (4254 passed, 5 skipped); root tsc clean.
…_MODULE_NOT_FOUND crash on prefix+l launch)
added 11 commits
August 11, 2026 15:46
…001M9EY) Rejected by manual review: the spec was wrong (priority-first ordering). Reverts the priority-first sorting chain committed to dev: - 501c8c4 (F1 grouping tests) - 32633cf (F2 grouping.ts priority-first sort) - 003f91c (F3 dependent test updates) - b3f0bea (F4 README/docs) - 6780d4b (F4 docs) - b0535be (AC4 fetcher.ts regroup wiring, WL-0MSOPHLD1000EWNN) Restores the file-path-conflict group partitioning (Critical Group N / Group N / Idea / Other / In Review) and the stage-sub-order comparator. .gitignore changes from unrelated WL-0MSOKOI4J0046GE5 are preserved. Full vitest suite green: 4254 passed / 0 failed / 5 skipped.
…escription diffs Extract shared compareTrackedFields() comparator used by hasWorkItemChanged() (16 fields, import()/upsertItems()) and the update() no-op guard (13 fields). title/description are compared whitespace-normalized (leading/trailing whitespace, trailing newlines, blank-line runs) so wl sync no longer re-timestamps items whose only difference is stripped trailing whitespace — fixes the infinite conflict-resolution loop that silently invalidated audits (LP-0MSL1OX51003DOP4). Adds 15 unit tests (packages/shared/src/database.test.ts); documents behavior in JSDoc + README. Full suite green (4269 tests); real-data verification on lp conflict set: 3818 whitespace-only items, 0 updatedAt bumps (old logic bumped all), genuine changes still bump.
…ion list Add a Description preview section to formatMetadataPanel() in the herdr worklist: up to 3 non-empty lines of the selected item's description, labelled with a dim/underlined Description heading, placed after the metadata rows and before the last-command line. Lines are truncated to the panel width via the existing truncateLine(); the preview joins the existing scrollable content so m/M scrolling and the [m/M scroll] indicator are unchanged. Items without a description render no preview. - worklist.ts: add DESCRIPTION_PREVIEW_MAX_LINES + buildDescriptionPreview() - worklist.test.ts: 7 new tests (rendering, empty/missing, 3-line cap, truncation, fences, placement, scrolling) - README.md: document the preview in the Metadata panel section Full project suite green (4279 vitest + node suites); audit passed.
…imple page layout (no dialog box) Replace the bordered, centered dialog overlay in FormState.render() with a full-pane page layout: - Remove border-box decoration (no ┌┐└┘ corners, │ side borders, ─ edges) - Content starts at top-left (no leftPad centering, no leading blank lines) - Description and field values wrap at the full pane width (maxCols) instead of the 80%-of-pane clamp - Keep all inner content: heading, description, labeled fields, action hints, active-field cursor indicator (with visible space after ⌨/▶) - render(maxCols, maxRows) contract unchanged; output bounded by maxRows - wrapContent now rewinds to the last space when a word doesn't fit so no line exceeds the pane width (single over-long words still hard-break) - Cursor indicator line capped to maxCols-1 before appending so the truncated-value + cursor combination never overflows the pane Tests: rewrite rendering tests for the page layout (no border, no centering, full-width wrap, pane bounds); keep interaction/substitution tests. Full suite green (228 files, 4285 tests). Docs: update packages/herdr/README.md and code comments.
The herdr downtime worker now honours the ship-it code-freeze marker at dispatch time: while the marker is frozen OR ambiguous (fail-closed), the audit and implement tiers are skipped (no new implementations/audits during a release) and the plan/intake tiers continue. The marker is re-read fresh on every dispatch (never cached), and a freeze skip reports reason 'code-freeze' (never 'no-candidate') so it never triggers the no-candidate cooldown — polling continues and implement/audit dispatch resumes immediately when the freeze lifts. - code-freeze.ts: new tri-state read (readCodeFreezeStatus: frozen/not-frozen/ambiguous) + readCodeFreezeStatusForRoot; existing fail-open isCodeFreezeActive/readCodeFreezeState unchanged for browsing and shortcut blocking. - downtime-worker.ts: freeze gate in dispatchDowntimeWork (new readCodeFreezeStatus dep), code-freeze outcome handled neutrally by the worker tick. - worklist.ts: distinct 'Ambiguous Codefreeze marker' banner + tri-state refreshFreezeState; active-freeze banner unchanged. - index.ts: real dep wires readCodeFreezeStatusForRoot. - Tests: tri-state parsing (active/inactive/absent/ambiguous), dispatch gate (frozen/ambiguous/cleared/not-frozen, no-cooldown), banner rendering + line-count invariant. - README: freeze-gate + ambiguous-banner docs.
…r (WL-0MSPZP7FE009YXPG) mergeDifferentTimestampItems and mergeSameTimestampItems only treated stage=done as a protected close state. completed/in_review (the standard 'ready for review' state after pi audit) got zero protection: a stale remote copy with a newer updatedAt silently reverted such items to open/idea (observed on WL-0MSKFFJWD002BQJ5). Introduce isTerminalStage() (whitelist: done, in_review) and use it for close-detection in both merge paths. Intentional reopen semantics are preserved: a newer local open/in_progress still beats an older remote close. Tests (tests/sync.test.ts): 6 new cases across both merge paths — (a) local close vs older remote open, (b) remote close vs older local open, (c) local close vs NEWER stale remote open (the clobber regression), reopen guard, and both same-timestamp directions.
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.
Automated release created by ship skill.\n\nIncludes CHANGELOG.md with work-item summaries from this release.