Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

roadmap: prints "validated successfully" for IDs that violate the tool's own ID format rule

Closed Beginner friendly
#308 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

A pull request for this has already been merged.

  • #419 by @Kuldeep2822k — merged

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
cli

Research direction

The check that only tests for an empty id is at src/cli/roadmap.ts:422, before anything is written to the vault. The format rule lives in src/engine/topic-id.ts (lines 26-53) and is enforced later by src/validation/rules/valid-topic-id-format.ts. Run the repro YAML through roadmap --from ... --yes to confirm exit 0, then make it exit 3 with zero bytes written and name each bad ID in the error.

Written by the indexing model from the issue text.

Description

bug core priority: high tests

Summary

roadmap --from checks only that id is non-empty, writes whatever it accepted, and reports success. validate then rejects the same IDs. A pre-write gate that passes unparseable IDs is not a validation gate.

Repro

topics:
  - {id: T-Alpha,      title: Uppercase,  path: a.md}
  - {id: bad-noprefix, title: NoPrefix,   path: b.md}
  - {id: T-bad_slug,   title: Underscore, path: c.md}
command exit output
roadmap --from badids.yaml --yes 0 Roadmap validated successfully.
grep palee_id vault/*.md — T-Alpha, bad-noprefix, T-bad_slug written to disk
validate 3 ✗ Found 3 validation error(s): Invalid topic ID format … expected T- plus lowercase kebab-case slug

Expected

Fail closed before any write, exit 3, naming each offending ID and the format rule — the same all-or-nothing behaviour roadmap already gets right for duplicate IDs, missing dependencies, cycles, invalid difficulty and vault escapes (all verified separately: exit 3, zero bytes written).

Where

src/cli/roadmap.ts:422 tests only if (!id). The format rule is src/engine/topic-id.ts:26-53, enforced after the fact by src/validation/rules/valid-topic-id-format.ts.

Impact

Bad IDs land in the vault, so edges naming them resolve inconsistently, and the learner discovers it only in a later validate run — after the write already happened.

Environment
  • palee 0.6.0, local build from main at 02dacd0 (installed as palee-test; reproduce with palee)
  • Node v24.19.0, Windows 11 x64, Git Bash
  • Vault: MIT-licensed Microsoft/OSSU curriculum markdown, 21-187 notes per vault
  • Every command was run for real; exit codes captured by command substitution (never $? after a pipe)
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Kuldeep2822k/cli

All issues in Kuldeep2822k/cli

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.