Skip to content

Improvement candidates — markpost-cli — August 26th, 2026 #132

Description

@grimicorn-agent

Automated weekly scan. Check the boxes for the improvements you want turned into tracked issues, then close this issue when you're done triaging — closing it is the go signal. On its next run the agent creates the checked items as real issues (unassigned, labelled by priority) and leaves this digest closed; unchecked items are dismissed and won't be re-proposed. While this stays open nothing happens, so take as long as you need.

  • mpcli-pr128-3 Stop the autoSync daemon on a permanent mark-synced failure — A permanent 403 on the PATCH leaves autoSync on, so the daemon re-attempts the same records forever; delete path already guards via deletePermanentlyFailed. (suggested: P2, effort: M, from PR Mark records synced via bulk PATCH /api/records #128)
  • mpcli-pr129-1 Expand ~/$HOME in push input paths — markpost push '~/vault/**' globs a literal ~ and matches nothing; run the same expander over push args in resolveMarkdownInputs. (suggested: P3, effort: S, from PR Expand ~ and $HOME in the configured outputDirectory before writing #129)
  • mpcli-20260826-1 Confirm before sources delete <uuid> — deleteSourceCommand deletes a source immediately when a uuid is passed, with no confirmation prompt, inconsistent with the product's careful guarding against accidental destruction. (suggested: P3, effort: S)
  • mpcli-20260823-3 Add markpost push --dry-run to preview which files would be pushed before creating records — Give push the same preview affordance sync just got, listing the resolved files (and missing/skipped inputs) without creating any server records. (suggested: P3, effort: S)
  • mpcli-pr128-1 Abort mark-synced on a repeated non-transient 4xx — A 422 from MAX_UPDATE_BATCH_SIZE drift or malformed-payload 400 is not systemic, so every chunk fires and fails identically; abort after the first such 4xx. (suggested: P3, effort: S, from PR Mark records synced via bulk PATCH /api/records #128)
Rationale
  • mpcli-pr128-3: A permanent 403 on the PATCH leaves autoSync on, so the daemon re-attempts the same records forever; delete path already guards via deletePermanentlyFailed. (evidence: src/index.ts runDefaultSync mark-synced branch)
  • mpcli-pr129-1: markpost push '~/vault/**' globs a literal ~ and matches nothing; run the same expander over push args in resolveMarkdownInputs. (evidence: src/commands/push.ts, src/libs/files.ts)
  • mpcli-20260826-1: src/commands/sources.ts:336-351 runs the DELETE the moment a uuid arg is supplied, no confirm. Deleting a source drops its ingest config and its one-time signing secret (unrecoverable), forcing a full recreate. Every other destructive path in this CLI is deliberately hard to trigger, so a no-confirm source delete is an outlier. A yes/no confirm (skippable with --yes for scripts) matches the established safety posture.
  • mpcli-20260823-3: commands/push.ts already resolves the full plan up front via resolveMarkdownInputs (files, missing, skipped) before pushFiles creates records, and sync recently gained --dry-run (src/index.ts reportDryRunPlan). A bulk import across globs/directories has no way to confirm the glob matched the right notes before it hammers POST /api/records once per file; a --dry-run that prints the resolved file list and the missing/skipped inputs, then exits without calling createRecord, catches a wrong glob cheaply and is symmetric with sync --dry-run.
  • mpcli-pr128-1: A 422 from MAX_UPDATE_BATCH_SIZE drift or malformed-payload 400 is not systemic, so every chunk fires and fails identically; abort after the first such 4xx. (evidence: src/libs/records.ts markSyncedChunk)

Metadata

Metadata

Assignees

Labels

digest-processedImprovement digest whose checks have been promotedimprovement-digestWeekly improvement candidates for human triage

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions