Skip to content

v0.16.0 — gateway host onboarding

Choose a tag to compare

@hanfour hanfour released this 29 May 09:39
· 85 commits to main since this release
ec54d6f

Host-side onboarding rail (PRD-2026-0006): a clean checkout to "bot answers in Slack" without reading source — now with the M6 baseline trial that hardened doctor and a live end-to-end verify on a real host.

Added (FR1–FR5)

  • Slack app manifest (FR1) — manifest.template.json carries every required bot scope + event; MANIFEST_VERSION lives outside the JSON so Slack accepts the upload. gateway init = a single manifest paste instead of reciting scopes.
  • pmk gateway doctor [--json] (FR2) — 8 read-only preflight checks (config, both Slack tokens, LLM provider, mra workspace, PKB, channel ACL, manifest alignment). Exit 1 on any FAIL.
  • pmk gateway start --dry-run (FR3) — outermost-layer WebClient proxy stubs every Slack write; events route to dryrun-events-*.log.
  • pmk gateway demo seed|unseed (FR4) — one tagged smoke-test atom, idempotent, symmetric.
  • Onboarding guide (FR5) — gateway/onboarding.md, a 30-minute sequence, cross-linked with README + lifecycle.

M6 doctor hardenings (trial findings)

  • Empty-PKB false-PASS fixedpkb-content now counts approved atoms on disk and FAILs an empty PKB only when its source provably can't seed it; a fresh-but-viable install stays WARN (no false positive on clean installs).
  • OAuth false-FAIL fixed — the LLM-provider check tested only a raw API key and FAILed when none was set, blocking valid OAuth-only hosts. Renamed llm-provider, it now mirrors resolveProvider (PMK_PROVIDER → CLI config.providerauto): in auto mode it falls back to the local claude login.

M6 baseline (quality gate)

  • Doctor coverage 4/4 (100%) — all four deliberately-provoked runtime failures FAIL + exit 1 + actionable hint.
  • Live preflight, real OAuth-only host → exit 0 — real Slack tokens, 63 mra repos, 1 PKB atom, llm-provider PASS. No ANTHROPIC_API_KEY.
  • Live first-message turn confirmed — a DM to the running bot drove socket receive → retrieval (1 atom) → audience: tech → LLM turn via local claude login → Slack reply + reactions, turn.processed logged. The runtime LLM path needs no API key.
  • Time-to-first-message: deferred, not faked — measures a fresh operator who hasn't seen the source; deferred to the first real external onboarding rather than a misleading self-timing.

Tests

446/446 pass (@pmk/cli 371 → 446). New: gateway-manifest, gateway-doctor, gateway-dry-run, gateway-demo-seed.

Full details: changelog · PR #59.