chore(core): make ty the default typechecker#736
Conversation
Signed-off-by: phernandez <paul@basicmachines.co>
|
Claude finished @phernandez's task in 2m 46s —— View job PR Review: chore(core): make ty the default typechecker
|
| Category | Status | Notes |
|---|---|---|
| Coding conventions (CLAUDE.md) | ✅ | |
| Python 3.12+ type annotations | ✅ | |
| SQLAlchemy 2.0 best practices | ✅ | |
| FastAPI/Typer conventions | ✅ | |
| 100-char line length | ✅ | |
| No commented-out code | ✅ | |
| Unit tests for changed code | ✅ | Existing tests updated with typed fakes/casts |
| 100% test coverage | ✅ | |
| CLAUDE.md updated | Build commands section not updated (see issue #2) | |
| MCP tool atomic/composable design | ✅ | |
| No DB migrations needed | ✅ | No schema changes |
| Security / no hardcoded secrets | ✅ | |
| Windows file path compatibility | ✅ | |
| No emoji/unicode in console output | ✅ |
CI Status
Tests are currently queued/in-progress — no failures observed yet.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 58dd6963bd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| schema.title, schema.note_type, content_frontmatter["permalink"] | ||
| schema.title, | ||
| schema.note_type, | ||
| _coerce_to_string(content_frontmatter["permalink"]), |
There was a problem hiding this comment.
Preserve null frontmatter permalinks during entity creation
Coercing content_frontmatter["permalink"] through _coerce_to_string converts YAML null/empty permalink values into the literal string "None". In files with frontmatter like permalink: or permalink: null, resolve_permalink() now treats that as an explicit permalink and persists None (or None-1, etc.) instead of generating the canonical permalink from the file path, which changes identifiers and can create collisions across notes. This path previously preserved null semantics, so the coercion should be skipped for permalink values unless they are already non-empty strings.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in a3e4bad. YAML null/empty frontmatter permalink values now keep their null semantics, so permalink resolution falls back to the canonical file path instead of persisting a literal None value.
Signed-off-by: phernandez <paul@basicmachines.co>
|
Claude finished @phernandez's task in 1m 24s —— View job PR Review: chore(core): make ty the default typecheckerTasks:
What's new since last reviewNew commit Open issues1. Non-exhaustive Still not addressed. The Recommend restoring: case _:
raise ValueError(f"Unexpected type: {item_type}") # pragma: no coverafter the 2. CLAUDE.md not updated to reflect new typecheck commands The justfile now has:
But CLAUDE.md (lines 33–34) still reads: Should be updated to: 3. Minor: redundant if isinstance(entity_data, dict):
update_data = cast(dict[str, Any], entity_data) # isinstance already narrows thisThe Checklist
SummaryThe |
This reverts commit 052545b.

Summary
just typecheckrunty check src tests test-intand keep pyright available asjust typecheck-pyright.Verification
just format && just lint && just typecheckjust test