5.4 KiB
Session 0086.0 — Transcript
App: ohm Start: 2026-06-07T17-22 (PST) End: 2026-06-07T17-47 (PST) Type: planning-and-executing Status: FINALIZED
Launch prompt
/goal next → resolved from memory's Next /goal: field to SLICE-3 —
Faceted left-pane filtering (read) of the Configurable Collection Metadata
design (docs/design/2026-06-06-configurable-collection-metadata.md §7.2,
completing PUC-3).
Pre-state
- Origin
main=1bcf8aa@ v0.48.0 (SLICE-2 — collection field schema + central validation — shipped session 0085). Localmainclean, fully pushed. - SLICE-1 sidecars + dual-read (v0.47.0) and SLICE-2
fields:schema +app/metadata_schema.py+collections.get_collection().fieldsin place. cached_rfcspersistedtags_json+ lifecycle columns but droppedEntry.extra— so declared field values (priority, custom) were unrecoverable for faceting.- One stale
SESSION-0080--INPROGRESSplaceholder (2026-06-06, predating the finalized 0083–0085 series) — an abandoned orphan, not a live concurrent session; noted and left untouched.
Session arc
-
Session-gate routing. Classified
/goal next→ planning-and-executing (≥90% confident; SLICE-3 already spec'd upstream). Claimed session 0086 (atomic Gitea push). Cleanmainbaseline confirmed. -
Orientation. Read the design doc SLICE-3 section (§7.2 DoD), §6.4 interfaces, §5.1 catalog left pane, the invariants (INV-3/5/7). Traced the code: list endpoints (
_list_rfcs_for_collection+ the two scoped routes),cache._upsert_cached_rfc,metadata.metadata_dict/Entry.extra,Catalog.jsx, the migration runner, and the test harnesses (test_metadata_cache.py's_set_default_fields_schema+ fake-Gitea fixture;Directory.test.jsx's Vitest mocking; the lonee2e/smoke.spec.js). -
Plan. Wrote
docs/superpowers/plans/2026-06-07-slice3-faceted-filtering.md(writing-plans): 10 TDD tasks with locked decisions — facetable = declaredenum+tags+ built-instate(text not faceted v1); drill-down facet counts (a field's counts ignore its own selection);malformeda cross-cutting toggle; facets on the collection-scoped path only;meta_jsonstores the fullmetadata_dict. -
Execution (executing-plans, inline — tightly-coupled sequential tasks).
- migration 034
cached_rfcs.meta_json(additive/nullable). _upsert_cached_rfcpersistsmetadata_dict(entry)asmeta_json.- pure
app/facets.py(facet_fields/allowed_filter_keys/filter_and_count) + 8 unit tests. _list_rfcs_for_collectionreadsrequest.query_params, validates keys (unknown → 400), returns{items(+meta), facets}; both scoped callers pass the params; unscoped/api/rfcsuntouched. + 6 integration tests throughTestClient.- frontend:
listRFCs(pid, cid, {selections, malformed})→{items,facets}; newFacetGroups.jsx;Catalog.jsxfaceted mode gated oncollection.fields(server re-fetch on selection, split from the once-per-collection effect), legacy chips otherwise; malformed row marker; facet styles. + 3 Vitest tests. - v0.49.0: VERSION + package.json mirror, CHANGELOG with upgrade steps, SPEC §7.1 forward-pointer.
- migration 034
-
Ship. Backend 615 + frontend 39 green, build clean. PR #33 (Gitea API) → merged to
origin/main=7ece6d3, branch deleted, local main synced. Plan archived toben/ohm-rfc:plans/.
Cut state
- Origin
main=7ece6d3@ v0.49.0. SLICE-3 shipped (PUC-3 complete). - Backend 615 / frontend 39 green; build clean.
- NOT deployed — OHM live @ v0.46.1; undeployed gap now 4 minors (0.46.2/0.47.0/0.48.0/0.49.0), all non-breaking.
Deferred decisions (operator plate)
- Playwright E2E for the faceted pane deferred to backend API-integration
(
test_facets_api.py) + frontend Vitest (Catalog.test.jsx). Rationale: the only E2E spec runs against a full local-Docker stack with seeded Gitea, and there is no fixture for a collection carrying afields:schema + entries with metadata values; §9 explicitly references the E2E/PPE machinery rather than automating it while it is being built. Revisit when the §9 E2E seeding harness exists. (Consistent with how SLICE-1/SLICE-2 were tested.) text-type fields not faceted in v1 — free text makes a poor facet group; §5.1 says "one per schema field" but onlyenum/tags/stateare sensible facets.textgets a detail control in SLICE-4. Logged for the spec.- §9 pipeline status: localhost unit/integration + component tests run and green; PPE + prod deploy and browser E2E not run this session (deferred to a batched deploy session — the 4-minor gap above).
Next session
/goal SLICE-4 — single-entry metadata edit (completes PUC-1), per docs/design/2026-06-06-configurable-collection-metadata.md §7.2 SLICE-4
SLICE-4 also carries the SLICE-1-deferred work: make every write path
sidecar-aware (api_graduation.py graduation/claim/_read_meta_entry, bot.py
mark_entry_reviewed, api_branches.py _wrap_body/_extract_body,
api_prs.py PR-replay wrappers) before the metadata.migrate_collection
Owner-gated operator endpoint can ship. Write-boundary enforcement turns
metadata_schema.validate from advisory → 422-blocking (INV-4). Read the
rfc-app-multiproject memory's session-0086 block first.