Shared

repo: ~/Projects/_shared · 129 commits · 0 in last 24h, 1 in last 7d ·

Search the build

129 commits indexed

  1. a9e4e02 2026-07-26 auto-save: 2026-07-26T20:15:38 (1 files) — fleet-registry
  2. 489ac80 2026-07-18 snapshot: bump submodule pointer(s)
  3. f6a215b 2026-07-17 auto-save: 2026-07-17T19:47:29 (1 files) — fleet-registry
  4. f63fb28 2026-07-10 auto-save: 2026-07-10T14:39:00 (2 files) — fleet-registry scripts/run-guard.sh
  5. 2dbe018 2026-07-07 auto-save: 2026-07-07T08:56:34 (3 files) — fleet-registry designer-personas/ dust2026-carwash-usage-review.md
  6. 934e7d7 2026-07-05 Dust2026 full-backlog sweep: manifest + prestige owned-media seed
  7. dfe23f8 2026-07-03 corner-nav: move login to its own hamburger in upper-left (panel slides from left)
  8. 20c8a97 2026-07-03 add shared ollama-enrich.mjs (local vision enrichment helper)
  9. 95c62b6 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  10. 90a4d32 2026-07-01 auto-save: 2026-07-01T14:36:50 (1 files) — fleet-registry
  11. 7df0d18 2026-06-25 auto-save: 2026-06-25T16:05:06 (1 files) — fleet-registry
  12. bc00800 2026-06-24 auto-save: 2026-06-24T17:28:32 (1 files) — fleet-registry
  13. 969afef 2026-06-24 auto-save: 2026-06-24T16:58:22 (1 files) — fleet-registry
  14. b8f975e 2026-06-24 auto-save: 2026-06-24T16:28:13 (1 files) — fleet-registry/
  15. 3ecfa01 2026-06-20 promo-banner: auto-contrast ink (fix white-on-light-accent invisibility) + fix template-literal regex escape-collapse in parseRGB
  16. 5f88591 2026-06-19 Tier B promo strip: _universal-promo-banner.js drop-in — serves /dw-promo-banner.js + injects the script into every static-served HTML page (buffers res.write/end to catch express.static), identical 'New · <product> →' strip from /api/products?sort=newest; no per-site index.html edits
  17. 8408a2b 2026-06-16 Track decade-palettes.mjs (shared decade-palette script, created 2026-06-01, previously untracked)
  18. c678c4d 2026-06-16 Track dw-theme-nav.js (shared theme nav component, created 2026-06-01, previously untracked)
  19. b4fbe6f 2026-06-16 image-proxy: add CONSUMERS header documenting the 5 live dependents (not dead code — load-bearing for the /img vendor-redaction proxy fleet-wide)
  20. 1c94a84 2026-06-16 api-vendor-redact: add non-mutating warm(products) export to pre-warm the /img token map at boot (closes cold-start 404 window; additive, sites that don't call it are unaffected)
  21. 7153284 2026-06-14 Add pm2-restart.sh wrapper (sources .env + --update-env) + stale-env audit (113 bare offenders)
  22. 3a4346d 2026-06-11 rail-match: add optional synonyms layer + shared default synonym map
  23. 044f458 2026-06-09 step2 codemod: deterministic dual-key /sample + handle_display fleet edit script
  24. d78332a 2026-06-09 gitleaks allowlist: secrets-audit report files (placeholder DSN templates are the findings, not leaks)
  25. 4011e2b 2026-06-03 api-vendor-redact: wire redactVendorText to scrub vendor names from displayed sku + emit vendor-scrubbed handle_display (raw handle left intact for buy-links) — text-leak Step 1
  26. 25b9a00 2026-06-03 add vendor-text-redact.js (PROVEN-offline concatenated+bare vendor handle/sku scrubber; NOT yet wired — awaiting Steve go on deploy approach per DTD verdict C)
  27. be9b8d8 2026-06-03 api-vendor-redact: also proxy image_url/images CDN urls -> /img/<token> (kills vendor-name-in-filename leak on client-rendered sites); serve /img/:token from the same middleware with map-miss fall-through
  28. 60cdadd 2026-06-03 Add fleet vendor-leak scan + scrub tooling (task 41; reuses api-vendor-redact)
  29. 90f45c0 2026-06-03 Add image-proxy.js: vendor-neutral /img/<token> proxy module for standalone sister-site storefronts (imgToken/proxyImg/scrubProduct/mount)
  30. c3f9ad5 2026-06-02 scripts: pm2-daily-fleet.sh — daily cron wrapper for safe batched fleet restart
  31. 11595c2 2026-06-02 scripts: pm2-batch-restart.cjs — safe staged fleet restart (batches of 6, never mass-reload)
  32. 3621285 2026-06-01 api-vendor-redact: export redact(body) (=walk) for non-Express raw-http servers
  33. c72e011 2026-06-01 api-vendor-redact: export scrubTitle + isVendorTag for reuse (fliepaper data pre-scrub)
  34. 34b5490 2026-06-01 api-vendor-redact: drop Brand_/Vendor_/Color_ metadata tags + normalize underscores + optional and/& connector (Brand_Lincrusta, farrow-ball)
  35. 78173f0 2026-06-01 api-vendor-redact: fall back to house brand when vendor was the entire product name (Lincrusta); global vendor strip
  36. fa0646c 2026-06-01 api-vendor-redact: accept & as well as 'and' in multi-word vendors (Clarke & Clarke etc)
  37. 003d530 2026-06-01 api-vendor-redact: comprehensive 100-vendor denylist from dw_unified (adds Malibu/AS Creation/China Seas/Rebel/Mind the Gap/Newmor/1838/etc; keeps house brands + William Morris)
  38. e8d9332 2026-06-01 api-vendor-redact: strip mid-title vendor tokens (Golden Versace.../Shimmer 1 Arte...) the lead/suffix passes missed
  39. 1d89e44 2026-06-01 api-vendor-redact: scrub vendor names from tags[] arrays (display chips) — Schumacher/Maya Romanoff/Harlequin/Arte etc; keep house brands
  40. 66ed672 2026-06-01 eyebrow scripts: apply claude-codex confirmed findings #1-#3,#5
  41. b456923 2026-06-01 fix-eyebrow-surgical: harden per claude-codex DTD (FIX 1/2/5)
  42. 4d7745e 2026-06-01 hero-bg deploy script
  43. 10fa91b 2026-06-01 deploy-hero-ideas: comment-aware verify (sed couldn't strip comments containing >, caused 28 false VERIFY-FAILs; all 51 actually deployed clean)
  44. 8c0fcb3 2026-06-01 fix-eyebrow-surgical: resolve prod path per site (var/www OR /root/Projects)
  45. a2dbff9 2026-06-01 add fix-eyebrow-surgical.sh — in-place prod eyebrow collapse (no clobber of prod-only drift)
  46. e1f2835 2026-06-01 hero/ideas fleet deploy script
  47. 61380c5 2026-06-01 add deploy-fleet-eyebrow.sh — dry-run-by-default prod deploy for the Ideas-eyebrow fix
  48. 215d4f8 2026-06-01 Big Red: removal fanout + safe left-move redeploy (rsync-only, no reload)
  49. 0ffff42 2026-06-01 TODO: mark PoppyPetitions audit-events table done (77c4ca8)
  50. 45ce0fd 2026-06-01 gitleaks: scrub literal password names from explanatory comment too
  51. 2c29d65 2026-06-01 gitleaks: drop literal-password rules, use generic hardcoded-credential pattern (no live secret in scanner config)
  52. 9d0095e 2026-05-31 gitleaks: escape dw-postgres-password literal regex (was crashing gitleaks fleet-wide — invalid repetition operator)
  53. 9ff529e 2026-05-31 Add rendered contact-sheet.png (181 favicons, live-href version)
  54. 92e485f 2026-05-31 Contact sheet: clickable live-site hrefs (92/181 mapped via site.config + nginx/pm2), dim local-only tiles
  55. bafce0a 2026-05-31 Regenerate favicon contact sheet (181 favicons, post-href pass)
  56. e546ef1 2026-05-31 Add add-favicon-href.js — insert favicon <link> into sites that have favicon.svg but no head reference
  57. f1fb28d 2026-05-31 Add favicon contact-sheet generator + rendered grid of all fleet favicons
  58. e80c8d2 2026-05-31 Add gen-fleet-favicons.js — per-site branded favicon generator (kills /favicon.ico 404 fleet-wide, non-clobbering)
  59. 22d3461 2026-05-30 debriefs: add gitignore for mp4s; mark session-debrief item 20 done
  60. 0124641 2026-05-30 TODO reconciliation: mark multi-tenancy cutover WON'T-DO (parked by design, no demand)
  61. 4926af6 2026-05-30 TODO: mark item 22 done (peer-survey)
  62. 6f86505 2026-05-30 add grant peer survey — competitive intel on Instrumentl/GrantStation/FDO/Submittable + pricing rec
  63. a0c9c4f 2026-05-30 TODO: mark item 21 done (Grant landing mockups already shipped)
  64. 3238ace 2026-05-30 TODO: mark item 19 Petition Pulse done (Patty ca02103)
  65. cc8e060 2026-05-30 TODO: check off Federal Register integration (Grant 4256838)
  66. d521bf4 2026-05-30 TODO: mark P1-E + P1-F done (PoppyPetitions session-binding + NULL race)
  67. 76c5e74 2026-05-30 wave3-radar + TODO: mark Freddy middleware/gemini port done
  68. 9fe01b1 2026-05-30 wave3-radar: add info@ mailbox row per 'every site needs info@' rule
  69. dc7284c 2026-05-30 todo: mark items 12+13 done — secret-strip Norma + DW commerce sweeps (CNCP follow-through)
  70. c7b937a 2026-05-30 TODO: check off PoppyPetitions P1-B length caps (already shipped 7f44f02)
  71. c704102 2026-05-30 TODO: record gitleaks secret-scan hooks installed fleet-wide (305 repos)
  72. 4ed0ea8 2026-05-30 Add gitleaks pre-commit secret-scan tooling (CNCP _shared Lane B)
  73. 502888c 2026-05-26 sku-redact: shared display-only vendor scrubber for product identifiers (card meta/list/detail)
  74. 47e8b21 2026-05-26 api-vendor-redact: stripLeadVendor — strip vendor baked into head of product name (Kravet/Versace/Nina Campbell/Fentucci/etc.), bare names fall back to 'Designer Wallcovering' (DTD X+P, Steve go)
  75. d8a636a 2026-05-26 docs: staged proposal for 46 residual vendor-name-leads-product-name renames (31 auto + 15 manual); not applied
  76. e040ac1 2026-05-26 rail-match: export productInRail (tag-aware facet filter) + ledger: regression fix + batch-3 revert
  77. 0a289e9 2026-05-26 ledger: editorial-label + zero-firing deploy to Kamatera (38 sites live)
  78. a5fba91 2026-05-26 ledger: 9 rail-fixed sites DEPLOYED to Kamatera (helper-first ordering, all 200 + 5-6 rails live)
  79. 4e4a235 2026-05-26 ledger: batch-2 rail-helper fixes (fabric/healthcare/1900s/silkwallcoverings) + loop convergence note
  80. d7201c1 2026-05-26 rail-match: shared read-time tag rail builder (hybrid, DTD verdict D) + ledger resolution for 5 degenerate sites
  81. 069ad2e 2026-05-26 api-vendor-redact: scrubTitle keeps leading product name only, drops all vendor/collection/category suffix segments + 'By <vendor>' attributions, preserves DW house brands (Steve sign-off, structural approach)
  82. 513cc61 2026-05-26 api-vendor-redact: keep Hollywood house brand + drop york/romo/stout/knoll raw tokens (Steve sign-off); real vendors still caught by category word
  83. c3f6467 2026-05-26 ledger: zero-firing-rails fix (3 repointed) + 6 thin-catalog sites flagged
  84. b92fe9d 2026-05-26 api-vendor-redact: scrub vendor-name suffix from title/imageAlt/description (DTD verdict A; sku/handle left for data-layer pass; STAGED, not deployed)
  85. b4ecb7a 2026-05-26 ledger: fleet-wide editorial-label extension (36 sites) + zero-firing-rails finding
  86. 1b0168b 2026-05-26 rails sweep: add fleet-rails audit script + deploy-log record (35 sites rails-rendering, 3 pairs consolidated)
  87. 24184b8 2026-05-26 ledger: follow-up #1 (editorial rail labels) done on 8 sites
  88. b81776d 2026-05-26 fleet-rails-sweep: close-out — all 4 slices DONE, 10 trailing config-rails fixes committed, follow-ups logged
  89. f70c552 2026-05-26 fanout-rails-deploy: also force-ship data/products.json when server.js reads it (customdigitalmurals empty rails fix)
  90. 36a05fc 2026-05-26 fanout-rails-deploy: auto-detect path via pm2 describe + skip redirects/lander + ship runtime deps (hollywood site.config.json hotfix)
  91. 08b6f95 2026-05-26 consolidate-fleet-sweep.sh — post-sweep audit: verdict counts, per-site commits, pattern-divergence check (hollywood vs retrowalls canonical), sort+density coverage
  92. df5d161 2026-05-26 backfill-hollywood-tags.js — paginated /products.json scrape → bulk-UPDATE microsite_products.tags by handle, single tx. Reports tag-vocabulary frequency so rails can be picked from real catalog vocab
  93. 757bc47 2026-05-26 merge-tags-into-products-json.js — overlay PG microsite_products.tags/aesthetic onto a site's static data/products.json (handle-keyed, lossless, preserves dw_sku/mfr_sku/retail_price/metafields/image_url). Dry-run by default; --apply writes with .bak-<ts> backup. First user: hollywood-wallcoverings (3224/3224 matched)
  94. cb54218 2026-05-25 add api-vendor-redact middleware — strips vendor names from /api/* responses
  95. b31eed9 2026-05-25 rebucket: add --safe flag + SITE_BASES env + slug-with-hyphen resolver
  96. 267170f 2026-05-25 add retag-aesthetics-from-pg.js — fleet-wide aesthetic backfill
  97. dca05e5 2026-05-25 fix(microsite-aesthetic): match hyphenated rails like art-nouveau, arts-crafts
  98. 993096a 2026-05-19 fix-card-title-wrap script — fleet-wide overflow-wrap on .card .pat (long-token clip prevention)
  99. 447e50e 2026-05-19 fix-theme-toggle script — null-guard the dead #theme-toggle reference fleet-wide
  100. c76ca1a 2026-05-19 backfill-microsite-images — fill image_url from images[] for wallsandfabrics + customdigitalmurals
  101. 332c2b3 2026-05-19 stage2-followups script — slug-collision re-migration + thin-catalog pull from DW master
  102. 140643f 2026-05-19 admin-catalog: drag products from grid into collections (clone), ×-remove chips
  103. d3722ad 2026-05-19 connect to dw_unified via unix-socket peer auth (no password)
  104. 2af3097 2026-05-19 fleet admin catalog — schema, classifier, migration, mountable admin-catalog module
  105. d30d410 2026-05-14 fleet: tossed-domains list — recycledwallpaper.com (expired, intentional drop)
  106. a53a584 2026-05-14 hero-4grid: fetch /hero-4grid.json from /public/ not /data/
  107. 85e480d 2026-05-13 fleet-status: surface host loadavg from build-pages /api/health
  108. 827c21e 2026-05-13 corner-nav: title-case lowercase brand sources
  109. 7d8bfe0 2026-05-13 corner-nav: titleCase helper for brand display
  110. c194a29 2026-05-13 fleet-status: append fleet velocity (commits in last 24h + last 7d)
  111. 3f5dffc 2026-05-13 _shared: ns-contact-modal-fanout.js — patch ns-modal CSS+HTML to any DW site missing it
  112. 6901161 2026-05-13 scripts: dw-bigred-embed-fanout — Big Red widget on every DW microsite
  113. d3f121d 2026-05-13 scripts: dw-chip-details-fanout — vendor redact + chip-click→openDetails across all DW microsites
  114. 9149dcf 2026-05-13 status-loop: include build-pages in deployed-versions + latest-commits stanzas
  115. 4fdf915 2026-05-13 fleet-smoke: include build-pages (3rd site, 23 assertions)
  116. e24500c 2026-05-13 fleet-status: include build-pages (3rd site, .counts.projects)
  117. 55b6f24 2026-05-13 snapshot: backup uncommitted work (1 files)
  118. eb6dc39 2026-05-13 status-loop: log deployed git SHA + started_at per site (via /api/version)
  119. bb3f55f 2026-05-13 scripts: add fleet-status.sh — at-a-glance health digest from /api/{health,version}
  120. 77f67e4 2026-05-13 fleet-smoke: show git SHA per site (pulled from /api/version)
  121. 3988b8c 2026-05-13 snapshot: 1 file(s) changed, ~1 modified
  122. a9b7983 2026-05-13 fleet-smoke.sh — one-command smoke across asim + sod with combined tally. --json mode for monitoring.
  123. 61a091c 2026-05-13 status-loop MAX_ITERS 60→720 (2h→24h). Multi-day YOLO sessions were repeatedly outliving the 2h ceiling and requiring re-arms. 24h covers overnight+workday.
  124. 826ec4c 2026-05-12 status-loop.sh: also surface sod /api/stats each tick — designers/firms/claimed/candidates JSON alongside the asim spotted block
  125. 6f762d1 2026-05-12 status-loop.sh: bump MAX_ITERS 10→60 (20min→2h to outlive multi-hour YOLO runs), surface /api/spotted/stats JSON each tick, +http timeout 2→5s for cold-cache hits. First-time tracked into _shared.
  126. 6973387 2026-05-12 deploy.sh: honor RSYNC_EXTRA_EXCLUDES from project .deploy.conf
  127. 65384af 2026-05-12 shared color-isolate — add closenessBand(de, kind) + attach to nearestSW + coordinatingDesigns results. +12 unit tests. Consumed by wallco-ai R2 + thesetdecorator isolate modal.
  128. 22410e1 2026-05-11 add archive-guard: hard block on re-activating intentionally-archived SKUs
  129. 9195b5b 2026-05-06 initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)

Authors

Agents used

  • none detected

Skills used

  • /products7
  • /www3
  • /aesthetic2
  • /sku2
  • /push2
  • /version2
  • /stats2
  • /run-guard1
  • /npm1
  • /npx1
  • /homebrew1
  • /dw-promo-banner1
  • /end1
  • /minimal1
  • /sample1
  • /images1
  • /mount1
  • /local1
  • /reload1
  • /suffix1
  • /skip1
  • /verify1
  • /else1
  • /grep1
  • /theoretical1
  • /backup1
  • /ideas1
  • /pm21
  • /favicon1
  • /metric1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

3ecfa01 · 2026-06-20 · promo-banner: auto-contrast ink (fix white-on-light-accent invisibility) + fix template-literal regex escape-collapse in parseRGB
pickInk() reads the resolved accent luminance and flips ink white<->#111 to whichever wins WCAG, with a scrim shadow on borderline accents; deferred via double-rAF so the accent stylesheet is painted first. Root-cause fix: the client script is a template literal so \( \s \) regex escapes were collapsing to bare ( s ) — corrupting parseRGB to return NaN and silently defeating the contrast pick. 17/28 fleet accents (incl 6 white + 4 light-pink sites) were rendering white-on-light and were unreadable; now all pass. Verified headless on cork(#FF4F00 5.73), vinyl(#000 21.0), silkwallcoverings(#FFF 18.88).
3a4346d · 2026-06-11 · rail-match: add optional synonyms layer + shared default synonym map
productInRail/buildRails/railFacets now accept an optional {key:[aliases]} map
so a rail fires when a product tag/aesthetic equals the rail key OR a declared
synonym. Backward compatible (synonyms arg optional). New rail-synonyms.json
ships conservative defaults (modernist->modern/minimal, brutalist->concrete,
patina->distressed, etc.) for sites whose curated rail names don't appear
verbatim in the post-PG-retag tag vocab.
c3f9ad5 · 2026-06-02 · scripts: pm2-daily-fleet.sh — daily cron wrapper for safe batched fleet restart
resurrect -> pm2-batch-restart.cjs (batched, never mass-reload) -> save. Cron-safe PATH
(node=/usr/local/bin, pm2=/usr/bin). Installed on Kamatera as a 05:00 UTC daily cron.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
11595c2 · 2026-06-02 · scripts: pm2-batch-restart.cjs — safe staged fleet restart (batches of 6, never mass-reload)
Restarts the ~187-app Kamatera pm2 fleet in small batches with sleeps so memory
settles between waves; auto-resurrects if a batch trips the God daemon. Codifies the
'never pm2 restart/reload all' rule (mass-reload OOMs the daemon -> whole-fleet 502).
Run on the fleet host: node pm2-batch-restart.cjs (BATCH/SLEEP_MS env-tunable).
Used 2026-06-02 to restart the fleet: 183/183 servers online, 4 norma-* cron jobs
correctly idle.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
66ed672 · 2026-06-01 · eyebrow scripts: apply claude-codex confirmed findings #1-#3,#5
fix-eyebrow-surgical.sh:
- #1/#2 count MATCHES not lines: eyecount/live_eyecount use grep -o 'class=
  "rail-eyebrow"' | wc -l, so a minified one-line homepage can't fake count=1
  across the eligibility/skip/verify gates.
- #2 minification-proof eyebrow-only gate: replaced the line-based diff|grep -v
  with strip_hash() — sha256 of each file with all eyebrow divs + whitespace
  stripped; abort unless orig==work (only eyebrows changed).
- #3 function replacer in the node transform: section body with $&/$1/$` or a
  price like $1.99 no longer consumed as String.replace tokens.
deploy-fleet-eyebrow.sh:
- #5 superseded: refuses to run (whole-file overwrite clobbers prod-only drift +
  curl-blip-to-clobber); ALLOW_OVERWRITE_DEPLOY=1 to override. Use surgical.
All verified: surgical dry-run clean (0 dup, 0 abort), guard refuses, syntax OK.
b456923 · 2026-06-01 · fix-eyebrow-surgical: harden per claude-codex DTD (FIX 1/2/5)
DTD verdict (Claude+Codex, high confidence) → apply 3, skip 5:
- #1 explicit failure counting: backup/push now in an if/else; a failed scp or
  ssh increments abort and prints FAIL — can never report silent success.
- #2 TOCTOU guard: sha256 re-check of prod right before overwrite; abort if it
  drifted since the pull (relevant — a background deployer was active mid-run).
- #5 set -euo pipefail, with explicit guards on the legitimately-non-zero
  commands (eyecount/live_eyecount helpers wrap grep -c; diff/grep pipeline
  guarded; transform rc captured via '|| rc=$?'; read heredoc '|| true';
  trap-based TMP cleanup).
SKIPPED (panel): #3  validation, #4 'injection' (own config, not untrusted),
  #6 regex-vs-DOM parse, #7 new Function nuances, #8 OOM — noise/theoretical on
  tooling that already ran and won't be extended. Dry-run still clean, fleet 0
  duplicates, 0 aborts.
8c0fcb3 · 2026-06-01 · fix-eyebrow-surgical: resolve prod path per site (var/www OR /root/Projects)
The fleet uses two path conventions; ffepurchasing + hospitalitywallcoverings
live at /root/Projects/<site>/ not /var/www/<domain>/. Resolve the actual path
via ssh before pull/backup/push instead of assuming. Dry-run now: would-fix=2
(ffepurchasing, retrowalls), 0 aborted.
a2dbff9 · 2026-06-01 · add fix-eyebrow-surgical.sh — in-place prod eyebrow collapse (no clobber of prod-only drift)
Pulls each prod index.html, collapses the duplicated #ideas rail-eyebrows on
THAT file, verifies the only changed lines are eyebrow lines (aborts otherwise),
then pushes back. Avoids the bidirectional-drift clobber risk of a local->prod
overwrite. Dry-run by default; --go to apply.
22d3461 · 2026-05-30 · debriefs: add gitignore for mp4s; mark session-debrief item 20 done
cncp-marathon-20260530.mp4 — 31MB / 4:58 / 1920×1080 H.264 + AAC. Built
via the session-debrief skill: 7 task cards (auto-resume daemon, Freddy
port, info@ row, P1-E session-binding, P1-F NULL race, Petition Pulse,
peer-survey), Steve avatar PIP narrating each card, wave3-radar.html as
the LEFT app pane, investor-lens value/metric/rail framing per task.

MP4 kept out of git (31MB binary) via debriefs/.gitignore. The TODO ledger
records the file path + provenance for future reference.
4ed0ea8 · 2026-05-30 · Add gitleaks pre-commit secret-scan tooling (CNCP _shared Lane B)
gitleaks 8.30.1 + custom rules for secrets that leaked in the 2026-05-30
incident: dw_admin PG pw, DWSecure2024! basic-auth, Gemini keys, inline
db-url passwords, nohup-tmp-launcher backdoor pattern. install-secret-hook.sh
wires it into any repo (or --all). Smoke-tested: blocks staged leak, passes
clean. Hook NOT yet installed into repos (awaiting Steve OK).
cb54218 · 2026-05-25 · add api-vendor-redact middleware — strips vendor names from /api/* responses
Standing rule: DW vendor names NEVER in customer-facing UI. The HTML side is
already locked down, but 6+ sister sites surfaced during the 2026-05-25 fleet
refactor sweep (ticks 013/019/020 confirmed; 014/015 had vendor renders that
got scrubbed; 018 chinois clean by accident) leak the vendor field via
/api/facets and /api/products JSON responses.

This middleware:
- Wraps res.json on /api/* paths and walks the body, replacing each `vendor`
  field with the literal 'Designer Wallcoverings' and dropping any top-level
  `vendors` facet map
- Strips ?vendor= from req.query so downstream handlers can't filter by it
  (dormant feature on most sites, no UI uses it, prevents future scraper abuse)

DTD verdict A, 3/3 unanimous (claude/codex/qwen) — fleet-wide systemic patch
beats per-site whack-a-mole. Add the require to each affected site's server.js
as the ticks pass through them; backfill 013/014/015/019/020 at sweep end.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
b31eed9 · 2026-05-25 · rebucket: add --safe flag + SITE_BASES env + slug-with-hyphen resolver
--safe refuses to overwrite a richer existing bucket value with the 'all'
fallback. Without it, rails-mismatch sites would have their existing PG
buckets clobbered by a classifier that finds no rail match. With it, only
genuine wins (existing-all → specific-rail) are applied; richer-existing
buckets are protected.

SITE_BASES (colon-separated) lets the script run on Kamatera where DW
sites live under /var/www/<slug>.com, /root/Projects/<slug>, or
/root/public-projects/<slug>. Falls back to $HOME/Projects.

Slug resolver now tries the hyphenated form (e.g. PG slug
hollywoodwallcoverings → filesystem hollywood-wallcoverings).
267170f · 2026-05-25 · add retag-aesthetics-from-pg.js — fleet-wide aesthetic backfill
Reads correct multi-bucket aesthetic tagging from dw_unified.microsite_products
and writes it INTO each DW sister-site's local data/products.json. Fixes the
"aesthetic:'all' degenerate single-bucket facet" issue surfaced by the 2026-05-25
fleet sweep (DTD verdict B, 2/3 vote — codex + qwen, dissent claude).

Behavior:
- Discovers DW sister sites by site.config.json + data/products.json
- Per-site PG query, handle/sku join, atomic JSON write, git commit
- Idempotent: skips already-matching, PG-degraded ('all'/null), no-PG sites
- Dry-run by default, --write to commit, --site=<name> for one
- Auto-commits per logical change (steve@designerwallcoverings.com)

First run: 59 sites updated, 59 per-site commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
dca05e5 · 2026-05-25 · fix(microsite-aesthetic): match hyphenated rails like art-nouveau, arts-crafts
The whole-word classifier never matched multi-token rails because a tag
like 'Art Nouveau' tokenizes to {art, nouveau, 'art nouveau'} but the rail
'art-nouveau' was looked up verbatim against that word set, missing every
form. Fix accepts either the space-joined form or all-tokens-present.

Re-bucket script applies the corrected classifier across PG (dw_unified
microsite_products) and reports per-site before/after. Initial fleet run
re-bucketed 516 rows across 6 sites (1890/1900/1920/1930swallpaper,
apartmentwallpaper, handcraftedwallpaper).
6973387 · 2026-05-12 · deploy.sh: honor RSYNC_EXTRA_EXCLUDES from project .deploy.conf
Lets projects opt-out specific paths from rsync without forking the
shared script. Critical for projects with prod-side runtime state
(JSON datastores, user uploads, generated artifacts) where the local
working copy isn't authoritative — rsync --delete was clobbering
Butlr's prod calls.json with local test fixtures. Space-separated
patterns in conf become --exclude='<pat>' flags.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
22410e1 · 2026-05-11 · add archive-guard: hard block on re-activating intentionally-archived SKUs
- archive-guard.js exports isProtected / assertNotProtected / filterProtected / addToList
- data/never-unarchive.json seeded with LEC-50650 (the regression that triggered the rule)
- scripts/sync-archive-list-from-shopify.js nightly-runnable, idempotent additions only
- ALLOW_UNARCHIVE=1 escape hatch when an unarchive is intentional

File tree

116 files tracked. Click any to browse the source at HEAD.

Other build journals

← Prod Mirror  ·  all 4 projects  ·  Stage2 Viewer →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 2ms