feat: MPS-24 — manual tags are ghost metadata; hide behind a flag

Operator direction: stop hand-attaching tags ('ghost metadata'
invisible to the humans and agents reading the page). Derive tags
from title + description (auto-hydrate + suggest engine) instead.

- New MPS-22-style kill switch: app.features.manual_tags.enabled
  (request.manual_tags_enabled, DEFAULT FALSE, env
  MPS_FEATURES_MANUAL_TAGS_ENABLED, =True in test.ini so the existing
  tag suite keeps passing).
- product_edit.j2: hides the chip editor + comma tags field +
  product_tags.js; shows a 'tags are derived from your title &
  description' note (lists current auto-derived tags read-only).
- shop_tags.j2: hides 'Create a tag' + the per-product apply (focus)
  section; shows a 'How tags work' note. Suggest categories + the
  category overview stay (the blessed linguistic path).
- Endpoints remain functional -> flipping the flag On is instant and
  lossless ('until further notice').
- CLAUDE.md: 'Tag Philosophy' section + manual_tags row in the
  kill-switch matrix. mps-24.md Phase 2.8o.
- Tests: TestManualTagsKillSwitch (fresh app, flag False; mirrors
  TestKillSwitches). 1147 passed; existing tag suite green under
  test.ini (flag True).
This commit is contained in:
russell@unturf.com 2026-05-17 12:08:55 -04:00
parent d6ae00073f
commit 3467909b80
No known key found for this signature in database
7 changed files with 203 additions and 8 deletions

View file

@ -363,6 +363,23 @@ Tests (`test_functional.py::TestProductTagsSpa`):
Deferred (occasional click, not the hot path): AJAX-ifying the
"Suggest categories" link — still a full navigation by design.
**Phase 2.8o — manual tags are ghost metadata: hide behind a flag**
(shipped 2026-05-17): operator direction — stop hand-attaching tags
("ghost metadata" invisible to humans/agents reading the page);
derive them from title + description instead. New MPS-22-style kill
switch `app.features.manual_tags.enabled` (`request.manual_tags_enabled`,
**default False**, `MPS_FEATURES_MANUAL_TAGS_ENABLED` env, `True` in
test.ini). When off: `product_edit.j2` hides the chip editor + comma
field + `product_tags.js`, showing a "tags are derived from your
title & description" note; `shop_tags.j2` hides the "Create a tag"
form + the per-product apply (focus) section, showing a "How tags
work" note — the **Suggest** panel + category overview stay (the
derived path). Endpoints stay functional so the flip is instant +
lossless ("until further notice"). Tests:
`TestManualTagsKillSwitch` (fresh app, flag False — mirrors
`TestKillSwitches`). Docs: CLAUDE.md "Tag Philosophy" + kill-switch
matrix row.
**Phase 2.8n — auto-hydrate products into existing tags** (shipped
2026-05-17): operator wants new/edited products auto-filed into
existing categories without manual tagging.