Skip to content

WriteGate rejections print to stdout — pipelines silently swallow them #161

Description

@jordanpartridge

What happened

know add entries rejected by WriteGateService print the rejection to stdout and exit 1. Any pipeline that filters stdout (e.g. know add ... | grep ID to capture the new entry id) silently discards the rejection — the operator believes the entry stored when it didn't. Bit me twice tonight before I caught it: a long factual checkpoint entry was gate-rejected and the red message vanished into a grep.

Repro

know add "test-$(date +%s)" --content "$(python3 -c 'print("word " * 400)')" --no-git | grep ID
echo $?   # 1, but nothing was printed — rejection message was on stdout, filtered away

Proposed fix

  • Write gate rejections (and other add failures) to stderr; keep stdout for the success table only. Standard CLI contract: stdout = result, stderr = diagnostics.
  • Bonus: a --quiet flag that prints just the entry UUID on success would make scripted use (ID=$(know add ... --quiet)) robust and remove the temptation to grep the table.

Secondary observation (separate concern, mentioning for context)

The gate rejected a dense, fact-heavy operational handoff (dates, paths, decisions) — plausibly a criteria false-negative on long multi-topic content. Not requesting a change here; just noting the gate's heuristics may deserve an eval set of known-good/known-bad entries, same pattern as hird-eval.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions