dhpk-opsx-post-observationlisted
Install: claude install-skill hmj1026/dhpk
# opsx-post-obs
Non-blocking background observer for `opsx-apply-resume` Save Phase — the POST
overlaps Steps 4–6 and the caller collects its result before the handoff write
(it is *not* truly fire-and-forget: the obs_id feeds the handoff frontmatter).
Called with compact-save output fields; posts an observation to the claude-mem worker without blocking the main Save Phase flow.
## When NOT to Use
- Loading Resume Phase context → use `dhpk-opsx-load-context`
- Generating a `/goal` condition for a fresh session → use `dhpk-opsx-apply-goal`
- Outside Save Phase Step 3b (do not post observations mid-implementation)
## Inputs
| Variable | Source | Description |
|----------|--------|-------------|
| `title` | L0 from extract-compact | One-liner session headline |
| `content` | Concatenation of compact fields | session_goal + in_progress[].task + key_decisions[].decision + reason + failed_approaches[].lesson;各欄位以 `\n` 分隔,組成單一字串 |
| `concepts` | Caller provides | Array: `[<change_id>, <stage>, <wave>, "opsx-apply-resume"]` — stage 和 wave 從 L0 解析(見下方 Notes) |
### Notes:從 L0 解析 stage / wave
L0 格式範例:`Phase 7 Stage S9c.8.8 Wave C: saveReceipt_new record_mo support`
- `stage` = 正則抓取 `Stage (S[\w.]+)` → 小寫化加前綴,例如 `stage-s9c.8.8`
- `wave` = 正則抓取 `Wave ([A-Z])` → 小寫化加前綴,例如 `wave-c`
- 解析失敗時省略 stage / wave,保留 `[<change_id>, "opsx-apply-resume"]`(見 Guardrails)
## Step 1 — Build payload JSON
Compose a JSON object:
```json
{
"title": "<title>",
"content": "<content — multi-line OK