v0.6.0 audit sweep: findings not yet given their own issue
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 18/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Active
- Tech stack
- node.js, typescript
Research direction
This is a tracking dump of many unverified audit items, not one change. Maintainers ask you to confirm a single finding and file its own issue before coding. Start from the cited paths (src/storage/loader.ts, wikilink.ts, auto-chain.ts, cli/migrate.ts, bin/palee.ts) and reproduce against temp-dir fixtures. Done for this ticket is splitting and verifying one item, not landing a sweep-wide patch.
Written by the indexing model from the issue text.
Description
A 16-agent read-only audit of v0.6.0 (c02c114) ran on 2026-10-03. The high-severity items were verified and filed individually (#251, #255, #257, #258, #259, #260, #261, #262, #263, #264, #265, #266, #267, #268). What follows is everything else the sweep produced. Each was reproduced by an automated probe against fixtures under the OS temp dir with bin/palee.ts; none was re-verified by hand, so confirm before fixing.
Status: re-verified against main at 81e9c9c on 2026-10-09 — 16 fixed, 4 still open, 4 refuted (list at the bottom). The file:line citations are from c02c114 and have drifted everywhere; navigate by the PR named on each item instead. Checked means fixed and merged, not merely worked.
Loss of user-authored state
-
loader.tsrequired a stringpalee_id, so a note with unreadable YAML or a numeric id failed to load andresolveWikilinkRoadmapminted a new id for the same path, orphaning every edge that named it. Fixed in #277 (4b414c4): the string rule stands — it is B7, deliberate — but the mint now refuses instead, "declares apalee_idthat is not a usable topic ID … would orphan every edge", andadoptskips such notes by name. -
palee roadmap --fromcould re-ID an already-adopted note, after whichvalidatereporteddepends on missing topicerrors. Fixed in #277: an incumbent check refuses the re-ID before any write (INV-32), pinned intest/cli-roadmap-edge-integrity.test.ts. The claim's second half was inverted as written: a dangling prerequisite does not get ignored, it hard-gates the dependent, andvalidatecounts a missing dependency as a warning because INV-24 says so. -
palee adoptoverwrote hand-authoredtopic_masteryanddifficultyon first adoption, and--fixthen said "Nothing to repair". Fixed in #277:carriedPillarScoresomits absent pillars instead of injecting zeros,difficultyis preserved unless--difficultyis passed, and the mastery rule skips all-pillars-absent notes.test/cli-adopt-preservation.test.ts.
Wrong target or wrong rank, silently
-
vault-walker.tsmatched.mdcase-sensitively while the resolvable-path checks folded case, soSetup.MDwas invisible toloadTopicsyet resolvable by[[setup.md]]. Fixed in #281 (e200597): the walk filter,stemOfNoteandfoldNoteKeynow agree, andwithWalkedCasingreturns the walked spelling so an id is not re-minted under a second casing. - No NFC/NFD folding anywhere, so a note stored decomposed was unresolvable from a composed link — an entire accented subtree under-chained on APFS. Fixed in #281, with two follow-ups: #289 (
46d14cf) closedwithWalkedCasing, which folded the index key but compared paths case-only and was visible only as a macOS CI failure, and #292 (open) folds the three sites this audit never named —adopt's declared-prerequisite index keys, the section scanner's dedupe key, andmatchesPattern's non-wildcard branch.
Reporting that does not add up
- A lock/OCC conflict on the relabel pass set
hadConflictbut incremented neitherstalenorfailed, so the summary readRelabelled 1 of 2 notesunannotated. Fixed in #283 (9f634c8): its own counter,(N locked: re-run to retry), and exit 4. - A note deleted between scan and write was reported as a write error ("The notes remain gated"). Fixed in #283 (
c577eba): classified vanished, counted separately, dropped from the schema pass that follows. -
RelabelOutcome.unresolvedwas never populated on the write path. Fixed in #283: every return from the write path carries the count it just printed. - An unknown
depends_on_sourcelabel gated the note but no validation rule flagged it, sovalidate --jsonsaidvalid: true. Fixed in #283: the dependency-list rule errors on a present-but-unrecognised label;toc-typo,weird,"",['toc']and7are covered.
Robustness
- A malformed YAML note aborted a whole batch with exit 5 and no filename. Fixed in #277: the note is named, counted, and skipped, so one bad file costs its own edge. The demanded exit 3 collides with INV-11 — an integrity error is reported, it does not abort the vault.
- One unguarded
readFileSyncinresolveWikilinkRoadmaplet anEACCESescape as a bare stack trace. Fixed in #277: guarded, names the target, keepscause, and the CLI printsError: …at exit 3. -
config.tsbuilt a temp name frompid + Date.now()with no entropy. Fixed in #285 (3dd06fe):randomBytes(4)suffix, same asatomicWrite. - Roadmap accepted a topic path of
".md":path.extname('.md')is'', so the walker createdvault/.md/.md, reported success, and hid the file from every later command. Fixed in #281: a path the walker cannot see is refused before any write, exit 3. -
toc.ts's privatetoRelativebypassedrelativeVaultPath, sodiscoverTocFilescould return paths outside the vault when the root is a junction. Fixed in #281: the shared helper is the only path now, and it re-derives from canonical endpoints.
Release health
- The PR matrix omitted the legs that broke (macOS heap limit, case-fold, symlink suites), and a tag push ran
release.ymlonly, so a published artifact was never tested on macOS or Windows. Fixed in #285 (one event-independent 7-leg matrix, tags trigger CI) and #283 (test-platformsgatespublish-npm), pinned bytest/ci-workflow-matrix.test.ts. -
toc-chain.tsstill commented the default tier asfull; the default isstrict. Fixed in #285.
Still open — needs a decision, not just a fix
- Advisory quarantine ignores
depends_on_source(dependency.ts,plan.ts): a cycle made only of advisorytoc/tieedges still emptiesplan's ready list. INV-25 ("cycles are quarantined") and INV-46 ("advisory edges never hold a note off the ready list") genuinely disagree, so this needs an owner ruling before code. Two halves of the original claim were wrong:planprintsQuarantined Cyclesand exits 0, and the exit 3 comes fromvalidate, which is deliberate containment. An advisory-only loop also cannot be created by adoption (the plan is asserted acyclic pre-write), so it takes hand-edited labels. -
plancan list one note under bothReviews DueandBlocked by prerequisites(plan.ts): any note with nodue_atcounts as due and any non-ready acyclic note with an unmet prerequisite counts as blocked, and nothing dedupes them. TheLearning: 0 / New: 14half of the claim is correct arithmetic, not a defect, and "Due: Never reviewed" innext.tsis deliberate;dashboard.tsdisagrees withplan.tsabout due, not about new. Owned jointly with #209, which touches both files. - A
SIGKILLmid-write leaves a permanent stray*.tmp.<pid>.<hex>: cleanup is only the in-process error path, and no startup sweep exists. Low impact — the stray ends in.tmp…, so no enumerator sees it, making it vault litter rather than data loss. A reaper means deleting files in a user's vault, which is a policy decision, andatomic-write.tsis the file #264/#280 just landed on. -
palee assessrecords no provenance fortopic_masteryand lowers a score with no--forceor dry run, so dependents re-hide behind the new number. "Silently" is imprecise — the count is printed, just after the write. A remedy exists but is unmerged:--force/--dry-runplusassessment_source: 'manual'onfix/269-audit-sweep(d7fe96c). Needs a frontmatter key, so it is a schema change (docs/05-1, ADR-0004), and INV-37 makesassessthe sole mastery writer today.
Refuted when re-verified — do not fix these
[[C#]]truncates at#. Stripping the anchor is the specified Obsidian rule (INV-48), pinned bytest/engine-auto-chain.test.ts;[[F#]]failing closed is the documented exit-3 path.e200597left the residue — a note namedC#.md— deliberately, and the TOC sibling of that class shipped in #279.- A fence opened inside a list item swallows later bullets because
FENCE_LINEanchors^ {0,3}. The regex does match a two-space opener, so the stated mechanism is wrong and the links survive. Worth confirming separately, and not yet verified by hand: an opener indented 4+ spaces (a nested list) is unrecognised, and its dedented closer then opens a fence that runs to end-of-file. Same harm class, different trigger — re-reproduce before filing. - The enumerating
README.mdreceives a prerequisite from the last lesson it lists. Ran it:guide/README.mdends withdepends_on: []at tiertoc, because groups are built from the enumerated paths' parent directories and the enumerating file is not among them. A README can be chained when a different note's Contents lists it — that is that author's ordering claim, which is the tier's whole point. _meta/should be inEXCLUDED_DIRS. The name appears nowhere insrc,docs,planning,test,examplesor.github, so excluding it would invent a convention the project does not have;WalkOptions.excludeDirscovers a caller who does use it, though no CLI flag reaches it today. Declined on the same reasoning ine200597.
- Dominant language
- TypeScript
- Stars
- 1
- Forks
- 0
- Avg merge
- 23h 23m
- Merged PRs (30d)
- 163
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Kuldeep2822k/cli
-
core priority: medium tests
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Kuldeep2822k/cli#484 ·
Maintainers usually reply within 1 day
-
bug core priority: low
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Kuldeep2822k/cli#343 · 1 comment ·
Maintainers usually reply within 1 day
-
bug core priority: low
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Kuldeep2822k/cli#342 · 1 comment ·
Maintainers usually reply within 1 day
-
bug core tests
Difficulty 4/5 3-5 days Newbie friendliness 42/100
Kuldeep2822k/cli#514 ·
Maintainers usually reply within 1 day
-
bug tests
Difficulty 5/5 Over a week Newbie friendliness 25/100
Kuldeep2822k/cli#504 ·
Maintainers usually reply within 1 day
All issues in Kuldeep2822k/cli
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
chaitin/MonkeyCode#1437 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
carbon-design-system/carbon-ai-chat#2615 ·
Maintainers usually reply within 1 day
-
e2e-failure ready-to-code
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
redhat-developer/rhdh-plugin-export-overlays#4486 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: fileUploadMatrix.test.ts URL case does a real DNS lookup and fails offlinePossibly taken @r2jaff claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
ComposioHQ/composio#5054 ·
Maintainers usually reply within 1 day