ticket: use base32 project record ids
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: "ワークスペースのメモリーをLintするヘッドレスCLI"
|
||||
state: "closed"
|
||||
created_at: "2026-05-27T00:00:19Z"
|
||||
updated_at: "2026-05-31T02:15:17Z"
|
||||
---
|
||||
|
||||
## Background
|
||||
|
||||
The memory linter currently exists as library/pre-write validation used by memory tools, but there is no headless command to check all existing workspace memory/knowledge records at once. This makes it hard to validate `.insomnia/memory` and `.insomnia/knowledge` before commits, migrations, or manual edits.
|
||||
|
||||
The installed user-facing binary is currently produced by the `tui` crate as `insomnia`. It is acceptable for this ticket to add the headless lint command to that crate/binary instead of introducing a separate binary. A future rename from `tui` crate to `insomnia`, or a more explicit single-binary CLI structure, can be handled separately.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Add a headless CLI mode to the existing `insomnia` binary in the `tui` crate.
|
||||
- Preferred invocation shape: `insomnia memory lint [--workspace <PATH>] [--json] [--warnings-as-errors]`.
|
||||
- `insomnia memory` without `lint` should remain available as a normal positional Pod name if possible.
|
||||
- If this shape is awkward with the current parser, keep the command unambiguous and document the chosen shape in tests/help text.
|
||||
- Default workspace root is the current working directory.
|
||||
- `--workspace <PATH>` overrides the workspace root passed to `memory::WorkspaceLayout::new`.
|
||||
- Lint all existing records classified by `memory::WorkspaceLayout`:
|
||||
- `.insomnia/memory/summary.md` when present;
|
||||
- `.insomnia/memory/decisions/*.md`;
|
||||
- `.insomnia/memory/requests/*.md`;
|
||||
- `.insomnia/knowledge/*.md`.
|
||||
- Do not lint subsystem-owned opaque trees such as `.insomnia/memory/_staging`, `_logs`, `_usage`.
|
||||
- Use the existing `memory::Linter` and `WriteMode::Update` for existing files so the CLI matches tool pre-write validation semantics without triggering create-only duplicate slug checks on the file itself.
|
||||
- Print a deterministic, human-readable report by default:
|
||||
- file path;
|
||||
- errors;
|
||||
- warnings;
|
||||
- summary counts.
|
||||
- Exit status:
|
||||
- `0` if no errors, and no warnings when `--warnings-as-errors` is set;
|
||||
- `1` if lint errors are found, or warnings are found with `--warnings-as-errors`;
|
||||
- `2` for CLI usage / I/O / unexpected runtime failures.
|
||||
- `--json` may be simple but should be machine-readable and stable enough for scripts: include workspace, files, errors, warnings, and counts.
|
||||
- The command must not start a Pod, connect to sockets, enter raw terminal mode, or mutate files.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Renaming the `tui` crate to `insomnia`.
|
||||
- Adding a separate installed binary.
|
||||
- Linting Workflow files; workflow linting can be a future command.
|
||||
- Auto-fixing memory/knowledge records.
|
||||
- Changing memory schema/linter rules.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- `insomnia memory lint` runs headlessly against the current directory and reports existing memory/knowledge lint results.
|
||||
- `insomnia memory lint --workspace <PATH>` works in tests/fixtures.
|
||||
- The command exits non-zero for lint errors.
|
||||
- `--warnings-as-errors` makes warnings fail.
|
||||
- `--json` returns valid JSON containing counts and per-file diagnostics.
|
||||
- Existing Pod/TUI argument parsing behavior remains covered by tests, especially positional Pod names and `--multi`/`--resume` conflicts.
|
||||
- `cargo fmt --check`, focused `cargo test -p tui` tests, `cargo check -p tui`, `./tickets.sh doctor`, and `git diff --check` pass.
|
||||
@@ -0,0 +1 @@
|
||||
Implemented `insomnia memory lint` as a headless command in the existing user-facing `insomnia` binary. The command lints workspace memory/knowledge records with the existing `memory::Linter` using `WriteMode::Update`, supports human and JSON output, handles warnings-as-errors, preserves `insomnia memory` as a positional Pod name, and returns before TUI/raw-terminal or Pod connection paths. External review approved and validation passed.
|
||||
@@ -0,0 +1,105 @@
|
||||
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:19Z -->
|
||||
|
||||
## Migrated
|
||||
|
||||
Migrated from TODO.md entry without a legacy ticket file. No legacy review file was present at migration time.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: plan author: hare at: 2026-05-31T00:51:55Z -->
|
||||
|
||||
## Plan
|
||||
|
||||
Planning note:
|
||||
|
||||
- Keep this in the existing user-facing `insomnia` binary implemented by the `tui` crate. Do not add another installed command for this ticket.
|
||||
- The command should be headless: parse args, lint files, print report, exit. It must not initialize terminal UI or connect to a Pod.
|
||||
- `insomnia memory lint` is preferred, but `insomnia memory` alone should continue to be a valid Pod-name attach/create path if practical with the current parser.
|
||||
- Use `memory::Linter` directly so CLI behavior tracks tool pre-write validation. Existing files should be linted with `WriteMode::Update`.
|
||||
- Keep crate rename / single-binary architecture as future cleanup, not part of this ticket.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: implementation_report author: hare at: 2026-05-31T02:14:28Z -->
|
||||
|
||||
## Implementation report
|
||||
|
||||
Implementation report from coder Pod `workspace-memory-lint-coder-20260531`:
|
||||
|
||||
- Branch: `workspace-memory-lint-cli`
|
||||
- Commit: `7a717f2d259563df562913e0c3ceb388b094b697` (`cli: add workspace memory lint`)
|
||||
- Added `insomnia memory lint [--workspace <PATH>] [--json] [--warnings-as-errors]` as a headless mode in the existing `tui` crate/user-facing `insomnia` binary.
|
||||
- `insomnia memory` alone remains a positional Pod name.
|
||||
- The lint command resolves workspace root, collects existing summary/decisions/requests/knowledge records through `memory::WorkspaceLayout`, and lints with existing `memory::Linter` using `WriteMode::Update`.
|
||||
- The command prints deterministic human output by default and stable JSON with workspace/files/errors/warnings/counts when `--json` is requested.
|
||||
- Exit codes follow the ticket: 0 clean, 1 lint failures or warnings-as-errors, 2 usage/I/O/output/runtime failures.
|
||||
- The headless path returns before raw terminal setup or Pod connection/spawn logic.
|
||||
|
||||
Validation reported by coder:
|
||||
|
||||
- `cargo fmt --check` passed
|
||||
- `cargo test -p tui memory_lint -- --nocapture` passed
|
||||
- `cargo test -p tui` passed
|
||||
- `cargo check -p tui` passed
|
||||
- `./tickets.sh doctor` passed
|
||||
- `git diff --check` passed
|
||||
|
||||
Unresolved issues: none.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: review author: hare at: 2026-05-31T02:14:28Z status: approve -->
|
||||
|
||||
## Review: approve
|
||||
|
||||
External review by reviewer Pod `workspace-memory-lint-reviewer-rerun-20260531`: approve.
|
||||
|
||||
The original reviewer Pod `workspace-memory-lint-reviewer-20260531` became non-visible to the parent before output could be recovered; this review was rerun with a replacement read-only reviewer Pod.
|
||||
|
||||
Reviewer summary:
|
||||
|
||||
- The implementation adds `insomnia memory lint` as a headless mode in the existing user-facing `insomnia` binary.
|
||||
- The memory lint path branches before raw terminal setup and Pod connection/spawn logic.
|
||||
- Parser tests preserve `insomnia memory` as positional Pod name behavior.
|
||||
- The collector targets summary, decisions, requests, and knowledge records while ignoring opaque memory subsystem directories and workflow files.
|
||||
- Existing `memory::Linter` and `WriteMode::Update` are used, and the code only reads files / writes reports.
|
||||
- Human and JSON outputs are deterministic enough for the ticket, and exit code mapping matches requirements.
|
||||
|
||||
Blockers: none.
|
||||
|
||||
Non-blocking follow-ups:
|
||||
|
||||
- Add broader fixture coverage for `_staging`, `_usage`, knowledge, and decisions if desired.
|
||||
- Add process-level exit-code integration tests if a CLI test harness is introduced later.
|
||||
|
||||
Validation adequacy: coder-reported validation is sufficient for this ticket. Reviewer additionally checked `git diff --check develop...HEAD` read-only.
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: implementation_report author: hare at: 2026-05-31T02:15:16Z -->
|
||||
|
||||
## Implementation report
|
||||
|
||||
Main workspace validation after merge:
|
||||
|
||||
- `cargo fmt --check` passed
|
||||
- `cargo test -p tui memory_lint -- --nocapture` passed (10 passed)
|
||||
- `cargo test -p tui` passed (224 passed)
|
||||
- `cargo check -p tui` passed with pre-existing dead-code warnings in `llm-worker` and `tui`
|
||||
- `./tickets.sh doctor` passed
|
||||
- `git diff --check` passed
|
||||
|
||||
|
||||
---
|
||||
|
||||
<!-- event: close author: hare at: 2026-05-31T02:15:17Z status: closed -->
|
||||
|
||||
## Closed
|
||||
|
||||
Implemented `insomnia memory lint` as a headless command in the existing user-facing `insomnia` binary. The command lints workspace memory/knowledge records with the existing `memory::Linter` using `WriteMode::Update`, supports human and JSON output, handles warnings-as-errors, preserves `insomnia memory` as a positional Pod name, and returns before TUI/raw-terminal or Pod connection paths. External review approved and validation passed.
|
||||
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user