← back to Designerwallcoverings
reconcile Stroheim monthly scheduler contract
fce3887fb908034fd609f97f1293e73eac757958 · 2026-08-30 11:02:55 -0700 · Steve Abrams
Files touched
M scripts/stroheim-onboard/README.mdM scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plistM scripts/stroheim-onboard/resume.shA verification/TK-10972-e2e-proof.jsonA verification/TK-10972-schedule-contract.sh
Diff
commit fce3887fb908034fd609f97f1293e73eac757958
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun Aug 30 11:02:55 2026 -0700
reconcile Stroheim monthly scheduler contract
---
scripts/stroheim-onboard/README.md | 11 +++-
.../com.steve.stroheim-onboard-resume.plist | 20 +++-----
scripts/stroheim-onboard/resume.sh | 7 ++-
verification/TK-10972-e2e-proof.json | 59 ++++++++++++++++++++++
verification/TK-10972-schedule-contract.sh | 29 +++++++++++
5 files changed, 110 insertions(+), 16 deletions(-)
diff --git a/scripts/stroheim-onboard/README.md b/scripts/stroheim-onboard/README.md
index fab3bcd..577c4f4 100644
--- a/scripts/stroheim-onboard/README.md
+++ b/scripts/stroheim-onboard/README.md
@@ -4,7 +4,7 @@ Onboards the 782 staged Stroheim wallcovering colorways (`dw_unified.stroheim_ca
to the live DW Shopify store as DRAFTS. Models the knoll / CMO-Paris / muralsource
onboard pattern. **Prefix `DWST` (approved by Steve 2026-07-26).**
-## Status (2026-07-26)
+## Original build status (2026-07-26 snapshot)
- ✅ Staging complete: 782 rows, 100% images / width / specs, 0 "Unknown", all `net_new`,
dedup-clean (0 Stroheim products on the live store).
@@ -14,6 +14,15 @@ onboard pattern. **Prefix `DWST` (approved by Steve 2026-07-26).**
- ⛔ **BLOCKED on PRICE** — `price_retail` is 100% NULL. Steve's hard rule forbids anything
at $0/NULL. Nothing is created until price is sourced. (DTD 2026-07-26, 5/5 = HOLD.)
+### Scheduled continuation
+
+Steve explicitly approved and armed `com.steve.stroheim-onboard-resume` on 2026-07-27
+(TK-00039), then approved its reload/restart on 2026-08-25 (TK-10849). Its installed
+cadence is monthly, Day 7 at 01:20, with `STROHEIM_ALLOW_GOLIVE` absent. The scheduled
+path therefore remains drafts-only; activation is not implied. Any future install,
+reload, cadence change, paid settlement run, Shopify write, or activation requires a
+fresh approval.
+
## The ONE unblock step
Populate `stroheim_catalog.price_retail` (and optionally `price_trade`) via **either**:
diff --git a/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist b/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist
index 3eff8ee..bc00d29 100644
--- a/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist
+++ b/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist
@@ -8,20 +8,14 @@
<string>/bin/bash</string>
<string>/Users/macstudio3/Projects/designerwallcoverings/scripts/stroheim-onboard/resume.sh</string>
</array>
- <!-- Trickle the 771 settlement-OK Stroheim (DWST-810xxx) DRAFTS under the DEDICATED 'stroheim'
- variant slice (own floor ~100/day = ~50 products/day, ~16 days; NEVER 'upload'). resume.sh
- is DRAFTS-ONLY (STROHEIM_ALLOW_GOLIVE unset → go-live SKIPPED) — activation stays a
- separate Steve-gated step. 00:40 primary + 13:40 retry (offset from stout 00:30/13:30,
- muralsource 00:20/13:20, greenland 00:10/13:00 to avoid backlog contention). resume.sh is
- idempotent + settlement-gated + cap-clean and no-ops once every OK SKU is created.
- INSTALL (Steve-gated — scheduled-job install). To arm:
- cp ~/Projects/designerwallcoverings/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist ~/Library/LaunchAgents/
- launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.stroheim-onboard-resume.plist -->
+ <!-- Monthly drafts-only continuation for Stroheim (DWST-810xxx). Steve explicitly approved
+ the original install on 2026-07-27 (TK-00039) and reload/restart on 2026-08-25 (TK-10849).
+ STROHEIM_ALLOW_GOLIVE is intentionally absent, so activation remains a separate Steve gate.
+ This tracked cadence mirrors the installed job; any future install/reload/cadence change,
+ paid settlement run, Shopify write, or activation still requires fresh approval. -->
+ <key>RunAtLoad</key><false/>
<key>StartCalendarInterval</key>
- <array>
- <dict><key>Hour</key><integer>0</integer><key>Minute</key><integer>40</integer></dict>
- <dict><key>Hour</key><integer>13</integer><key>Minute</key><integer>40</integer></dict>
- </array>
+ <dict><key>Day</key><integer>7</integer><key>Hour</key><integer>1</integer><key>Minute</key><integer>20</integer></dict>
<key>StandardOutPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/stroheim-onboard/out/launchd.out</string>
<key>StandardErrorPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/stroheim-onboard/out/launchd.err</string>
</dict></plist>
diff --git a/scripts/stroheim-onboard/resume.sh b/scripts/stroheim-onboard/resume.sh
index 4eaf95b..b73e6f3 100755
--- a/scripts/stroheim-onboard/resume.sh
+++ b/scripts/stroheim-onboard/resume.sh
@@ -12,8 +12,11 @@
# 5. go-live — ONLY if STROHEIM_ALLOW_GOLIVE=1 (Steve-gated activation; channels
# except Google/YouTube). Default: SKIPPED — drafts stay drafts.
#
-# HARD BLOCK: while price_retail is NULL, steps 1-4 no-op cleanly (build emits 0). This script
-# is NOT scheduled in launchd (scheduled-job install is itself gated) — run it by hand.
+# HARD BLOCK: while price_retail is NULL, steps 1-4 no-op cleanly (build emits 0).
+# Scheduling history: Steve explicitly approved and armed the drafts-only launchd job on
+# 2026-07-27 (TK-00039), then approved its reload/restart on 2026-08-25 (TK-10849).
+# The installed cadence is monthly (Day 7 at 01:20). Any future install, reload, cadence
+# change, paid settlement run, Shopify write, or activation remains separately gated.
set -euo pipefail
cd "$(dirname "$0")" || exit 1
export PATH="/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
diff --git a/verification/TK-10972-e2e-proof.json b/verification/TK-10972-e2e-proof.json
new file mode 100644
index 0000000..4a27604
--- /dev/null
+++ b/verification/TK-10972-e2e-proof.json
@@ -0,0 +1,59 @@
+{
+ "ticket": "TK-10972",
+ "intent": "Reconcile the tracked Stroheim scheduler contract with the explicitly approved live monthly launchd contract without loading, reloading, running, or stopping the job.",
+ "risk_tier": "R1 local config and documentation",
+ "environment": "Mac2 local repository plus read-only inspection of the installed LaunchAgent",
+ "baseline_commit": "13c9e254648ccd99bd5d0b053e07cda76cfd4d0a",
+ "timestamp_utc": "2026-08-30T18:02:22Z",
+ "preconditions": {
+ "installed_job": "gui/501/com.steve.stroheim-onboard-resume",
+ "state": "not running",
+ "runs": 2,
+ "last_exit_code": 143,
+ "ticket_history": "TK-00039 explicitly approved install/arming; TK-10849 explicitly approved reload/restart"
+ },
+ "checks": [
+ {
+ "name": "shell syntax",
+ "command": "bash -n scripts/stroheim-onboard/resume.sh",
+ "verdict": "PASS"
+ },
+ {
+ "name": "tracked plist syntax",
+ "command": "plutil -lint scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist",
+ "verdict": "PASS"
+ },
+ {
+ "name": "scheduler contract boundary",
+ "command": "verification/TK-10972-schedule-contract.sh",
+ "assertions": [
+ "Label, ProgramArguments, RunAtLoad, monthly StartCalendarInterval, stdout and stderr paths match the installed plist",
+ "neither plist arms STROHEIM_ALLOW_GOLIVE",
+ "resume.sh defaults STROHEIM_ALLOW_GOLIVE to 0 and retains the go-live skipped branch"
+ ],
+ "verdict": "PASS"
+ },
+ {
+ "name": "side-effect boundary",
+ "assertions": [
+ "launchctl state remained not running with runs=2 and last exit=143",
+ "no launchctl load, bootstrap, bootout, reload, kickstart, or scheduler execution was performed",
+ "no Gemini or other paid API call was performed",
+ "no Shopify, database, publish, deploy, or activation write was performed"
+ ],
+ "verdict": "PASS"
+ },
+ {
+ "name": "diff integrity",
+ "command": "git diff --check",
+ "verdict": "PASS"
+ }
+ ],
+ "negative_checks": [
+ "A scheduler-side STROHEIM_ALLOW_GOLIVE=1 or EnvironmentVariables block fails the contract test.",
+ "Any tracked/installed drift in an operational plist field fails the contract test."
+ ],
+ "cleanup": "No runtime or external test state was created.",
+ "critical_path_skips": [],
+ "overall": "PASS"
+}
diff --git a/verification/TK-10972-schedule-contract.sh b/verification/TK-10972-schedule-contract.sh
new file mode 100755
index 0000000..2118510
--- /dev/null
+++ b/verification/TK-10972-schedule-contract.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+SOURCE="$ROOT/scripts/stroheim-onboard/com.steve.stroheim-onboard-resume.plist"
+INSTALLED="$HOME/Library/LaunchAgents/com.steve.stroheim-onboard-resume.plist"
+RESUME="$ROOT/scripts/stroheim-onboard/resume.sh"
+
+plutil -lint "$SOURCE" "$INSTALLED" >/dev/null
+
+for key in Label ProgramArguments RunAtLoad StartCalendarInterval StandardOutPath StandardErrorPath; do
+ source_value="$(plutil -extract "$key" xml1 -o - "$SOURCE")"
+ installed_value="$(plutil -extract "$key" xml1 -o - "$INSTALLED")"
+ if [[ "$source_value" != "$installed_value" ]]; then
+ echo "FAIL: tracked and installed plist differ at $key" >&2
+ exit 1
+ fi
+done
+
+if rg -q 'STROHEIM_ALLOW_GOLIVE[^<]*1|EnvironmentVariables' "$SOURCE" "$INSTALLED"; then
+ echo "FAIL: scheduler can arm go-live" >&2
+ exit 1
+fi
+
+rg -q 'STROHEIM_ALLOW_GOLIVE:-0' "$RESUME"
+rg -q 'go-live SKIPPED' "$RESUME"
+
+printf '%s\n' 'PASS: tracked plist matches installed monthly contract'
+printf '%s\n' 'PASS: scheduler does not arm go-live; resume defaults to drafts-only'
← 13c9e25 record TK-10965 full canary evidence
·
back to Designerwallcoverings
·
auto-data-snapshot: 2026-08-30T14:05:24 (1 data files) — dat d22202c →