feat(observability): PW-G007 + PW-G008 + PW-G015 — analytics loop + live dashboard + gap-intake ledger #109
Labels
No labels
agent/claude-code
agent/codex
agent/gemini
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
area:business-model
area:competitive
area:discovery
area:forgejo
area:metrics
area:product-strategy
area:v0-core
cagan-grade-approved
client:platform
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
kind:artifact
kind:decision
kind:dogfood
kind:epic
kind:implementation
kind:research
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
priority:p0
priority:p1
priority:p2
priority:p3
ready-for-agent
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:blocked-on-discovery
status:cagan-grade-review-pending
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:needs-operator-decision
status:operator-needed
status:parked
tier:0-anchor
tier:0-platform-substrate
tier:1-core
tier:1-iskra-value-layer
tier:2-supporting
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
wave:1-foundation
wave:2-positioning
wave:3-validation
wave:4-economics
wave:5-operating
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/patchwarden#109
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The vision
The system can't improve what it can't see. Three observability surfaces that close the feedback loop:
docs/status.htmlevolves from a static snapshot into a live view over layers, artifacts, stale states, and missing evidence — the operator sees real state at a glance (it already self-flags "static snapshot" as a gap).Why it matters
G007 turns Patchwarden from a gate into a learning loop. G008 makes trust legible (and is the operator's daily window). G015 is how the roadmap stays honest — every audit/red-team finding lands as a trackable item, not a forgotten paragraph.
Inspiration — possible shapes
docs/incidents.md, CI failures, revert rate) → opens a Forgejo follow-up issue or enqueues a controller job. Deterministic thresholds, not vibes.operator_status.v1data model already exists — a live renderer could read current Forgejo workflow/artifact state into the same shape (the static page stays the fallback /--no-networkmode). Keep the static page working (its test forbids network in the static artifact).Hard boundaries (safety, not design)
status.htmlmust stay network-free + script-free (its test asserts nohttp(s)://, no<script>, nosrc=). A live dashboard is a separate surface, not a rewrite that breaks the static artifact.The HOW is yours
Sequence freely — G015 ledger (cheap, makes the rest data-driven) is a natural first step; G008 live view and G007 loop are larger. Propose shapes; split into PRs.
Status / refs
src/patchwarden/operator_status.py+docs/status.html·tests/test_status_html.py(static constraints) ·docs/incidents.md(analytics input) ·tests/test_docs_module_inventory.py(drift-guard pattern to mirror).Created by claude from the status.html gap ledger (2026-06-23). Executor: codex.
Addressed by #111 as the first Patchwarden-side/read-only slice.
Close basis:
patchwarden feedback-intake-checknow records value/incident/friction/vision-gap signals and emits read-only follow-up candidates; static status and the gap ledger are present. External issue/job writers and a live dashboard remain tracked as PW-G007/PW-G008/PW-G015 follow-up work in the status artifacts anddocs/operations/vision-gap-issue-disposition.md.Follow-up progress in #111: G015 now has a concrete read-only ledger module.
What landed:
src/patchwarden/vision_gap_ledger.pyis the durable PW-G001..PW-G018 source consumed bypatchwarden status;operator_status.pyno longer owns the hand-written gap list, so the backlog is not prose-only status data;tests/test_vision_gap_ledger.pyverifies contiguous IDs, required fields, allowed statuses, and thatpatchwarden status --format jsonuses the ledger exactly;docs/status.html,docs/architecture.md, anddocs/operations/vision-gap-issue-disposition.mdnow name the ledger explicitly.Verification:
PYTHONPATH=src:. python3 -m unittest discover -s tests-> 512 tests OK.Boundary: this is still read-only. External issue/job writers and the live dashboard remain future work, as stated in #111.