Integrate and fix contributor PRs #865, #868, #869, #870 - #875
Merged
Conversation
remark-directive (enabled for plugin directives like ::inline-vis{...})
also parses inline :name and block :::name directives, so any colon
before a letter or digit (9:30, key:value, :D) became a directive node.
remarkMessageDirectives only handled leaf (::name) directives; text and
container directives fell through to mdast-util-to-hast, which renders an
unknown directive as an empty <div>. Inside a paragraph that split the
line and dropped the directive's text.
Handle all three kinds: leaf directives mount as before; text and
container directives are rewritten back to their literal source (text
inline, container as a paragraph). Display-only change.
Every catalog resolution (each thread turn and project-page load) logs one line per deduped skill; with a 71-skill inherited root that is ~30K journald lines/day of expected-precedence noise.
PR #870 demoted the skill-tier override dedup logs from info to debug, but the capturing logger in the injected-skills test stubbed debug out as a no-op, so the three precedence tests asserting on those messages saw an empty infos array and failed. Add a debugs capture alongside infos/warnings, wire debug through captureTo, and point the three override assertions at debugs. The assertions are preserved rather than dropped: they are the only coverage that precedence actually excludes the shadowed source. Co-authored-by: Ali Madad <ali@scty.org> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-ups on the machine-selection change: - Gate the picker on connected machines, not every non-destroyed one. A single stale enrollment was enough to replace the native OS folder picker with the in-app remote browser, even though the offline machine could not be selected. - Treat a still-loading host list as "not single machine". The list query resolves independently of the local-daemon probe that enables the New project button, so a fast click could fall through to the native picker on the primary host and skip the machine choice entirely. - Stop the multi-machine/none-connected state from offering a submit that is silently dropped. The dialog now shows an offline empty state instead of the meaningless manual-path input and keeps submit disabled, and useLocalPathPicker takes the target host explicitly — the old default parameter only covered an omitted argument, never the explicit null the dialog sends when nothing is selected. - Drop the stray Diátaxis marker from docs/multiple-devices.md; it was the only occurrence in the repo and nothing reads it. - Add the machine picker and all-offline states to the dialog stories. Co-authored-by: Ali Madad <ali@scty.org> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review follow-ups on the YAML frontmatter change: - parseMarkdownDocument treated any text between two `---` lines as frontmatter, so a document opening with a thematic break had its opening section hidden from the editor, nav titles, and previews. Require the fenced block to parse as a YAML mapping (or as nothing) first. - The rich editor dropped the blank line between frontmatter and body on the first save, giving every canonical `---\n\n# Heading` document a spurious diff line. Replay the body's leading line breaks on save, and give the round-trip fixture the blank line it was missing. - renameToTitle bailed on any frontmatter, so a document with only `tags:` silently stopped following its H1. Gate on the parsed title instead. - The search preview dropped the first heading of any level whenever frontmatter supplied a title. Only drop a heading that repeats the title. - Drop the loading-state test that asserted on Tailwind class names. Co-authored-by: Ali Madad <ali@scty.org> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-up to the remark-directive colon fix.
- Update two stale assertions in markdown-thread-mentions.test.tsx. The
rewritten prose is now one text node, so `getByText("@thread")` — which
joins only an element's direct text-node children — no longer matches.
Assert the paragraph's textContent instead.
- Leave container directives (`:::name`) on the default rendering path.
`:::` at the start of a line is not incidental prose the way an inline
`:` is, and rewriting the block to literal text both stopped a nested
registered `::name` from mounting and collapsed the block onto one line.
- Merge the rewritten text directive into an adjacent `text` sibling so a
paragraph containing `9:30` is indistinguishable from one that never
parsed as a directive.
- Add a regression test for the originally reported symptom: "Meeting at
9:30 and 10:45 today." rendered as "Meeting at 9 and 10 today.".
Co-authored-by: Bhuvan Singla <bhuvansingla2000@gmail.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Jul 27, 2026
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.
Supersedes #865, #868, #869, and #870 — all four reviewed, fixed, and integrated into one branch.
Each original PR was reviewed against a local checkout (not from the diff), and each had defects. This branch keeps every contributor commit with its original authorship and adds one follow-up commit per PR.
What's here
---lines was treated as frontmatter, so a document opening with a thematic break had its first section hidden from the editor, nav titles, and previews. The blank line after frontmatter was dropped on every save.renameToTitlebailed on any frontmatter. Previews dropped the first heading of any level.:::blocks onto one line.textDirective; containers left on the previous path; the literal is merged into an adjacent text node; stale assertions updated; regression test added for the reported symptom.debugout entirely.debug; the three assertions were retargeted, not deleted.#867 (Pi SDK upgrade) is deliberately not included. It still has a blocking defect: Pi advertises
maxreasoning whilePI_SERVER_CAPABILITIEScaps atxhigh, so setting the override persists and then 400s on the next turn.Verification
Automated, via Turbo:
Both server failures are environmental and pass individually:
internal-skill-trees.test.tsexpectsmode: 420(0644) and gets436underumask 0002— it also fails onmain, and passes underumask 022;public-host-management.test.tshit a 5s per-test timeout under concurrent load and passes alone in 883ms.Live QA against a running dev instance on this exact tree:
<hr>, both sections); blank line after frontmatter survives a real autosave, verified withcat -Aon the saved bytes; a title-less-frontmatter doc renames to follow its H1 while a frontmatter-titled one stays put; a non-title H2 survives in the preview.Meeting at 9:30 and 10:45 today.as a single#textnode with zero injected empty<div>s, and:::notestill wraps a real<strong>in aDIV.bb-cliskill collision, five catalog resolutions produced five override lines, all at level 20, zero at level 30.Also checked under a dark Nord palette and at a 760px width.
Known, not fixed
Three cosmetic issues that all reproduce on
mainand are not regressions from this branch:---still title as---in the Docs nav —cleanLineonly strips list markers when whitespace follows the dash. This ismainbehaviour and Fix Docs YAML frontmatter parsing #868's fix restores it exactly, but it's the same symptom Fix Docs YAML frontmatter parsing #868 set out to remove.useQuickCreateProjectnow gates on connected machines whileProjectPathDialogstill computesshowMachinePickerfrom the total. Harmless today; worth unifying.Separately: none of the five PRs had any CI (
gh pr checksreported no checks on every branch), and three were red againstmain's suite.Co-authored-by: Ali Madad ali@scty.org
Co-authored-by: Bhuvan Singla bhuvansingla2000@gmail.com
🤖 Generated with Claude Code