[object Object]

← back to Fineartamerica Price Sync

Monthly price-sync job: propose-only drift check + launchd plist (1st of month 6:15am)

daaf7c79729f72da07dabd4743a24319423bace8 · 2026-07-16 09:30:03 -0700 · Steve Abrams

Files touched

Diff

commit daaf7c79729f72da07dabd4743a24319423bace8
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 16 09:30:03 2026 -0700

    Monthly price-sync job: propose-only drift check + launchd plist (1st of month 6:15am)
---
 launchd/com.steve.fineartamerica-price-sync.plist | 18 ++++++++
 scripts/monthly-sync.sh                           | 53 +++++++++++++++++++++++
 2 files changed, 71 insertions(+)

diff --git a/launchd/com.steve.fineartamerica-price-sync.plist b/launchd/com.steve.fineartamerica-price-sync.plist
new file mode 100644
index 0000000..3fe26b4
--- /dev/null
+++ b/launchd/com.steve.fineartamerica-price-sync.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key><string>com.steve.fineartamerica-price-sync</string>
+  <key>ProgramArguments</key>
+  <array>
+    <string>/bin/bash</string><string>-lc</string>
+    <string>/Users/macstudio3/Projects/fineartamerica-price-sync/scripts/monthly-sync.sh</string>
+  </array>
+  <key>EnvironmentVariables</key>
+  <dict><key>PATH</key><string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string></dict>
+  <key>StartCalendarInterval</key>
+  <dict><key>Day</key><integer>1</integer><key>Hour</key><integer>6</integer><key>Minute</key><integer>15</integer></dict>
+  <key>StandardOutPath</key><string>/Users/macstudio3/Projects/fineartamerica-price-sync/data/launchd.out.log</string>
+  <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/fineartamerica-price-sync/data/launchd.err.log</string>
+</dict>
+</plist>
diff --git a/scripts/monthly-sync.sh b/scripts/monthly-sync.sh
new file mode 100755
index 0000000..8996ccf
--- /dev/null
+++ b/scripts/monthly-sync.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+# Monthly FAA price sync — refresh live FAA costs, detect drift, and (by default)
+# DRAFT the reprice to pending-approval so Steve approves before any live write.
+# FAA raises base/material prices over time; this catches it monthly so DW never
+# silently sells a print below fulfillment cost again.
+#
+# Propose-only by default (money = gated). To make it fully automatic (re-apply
+# on drift with no human step), set AUTO_APPLY=1 in the launchd plist env.
+set -euo pipefail
+cd "$(dirname "$0")/.."
+LOG="data/monthly-$(date +%Y%m%d).log"
+QUEUE="$HOME/.claude/yolo-queue/pending-approval"
+mkdir -p "$QUEUE"
+
+{
+  echo "== FAA monthly sync $(date) =="
+  # 1. refresh costs (free HTTP) — standard sizes then odd-aspect gap fill
+  node bin/faa-fetch-all.js || true
+  node bin/faa-fill-gaps.js || true
+  # purge any invalid (<$50) costs so a bad fetch never masquerades as cost
+  node -e "const fs=require('fs'),p='data/cost-cache.json',c=require('./'+p);for(const k of Object.keys(c))if(!(c[k]>=50))delete c[k];fs.writeFileSync(p,JSON.stringify(c,null,2));"
+
+  # 2. dry-run to see what drifted
+  node sync.js --all --round dollar | tee "$LOG.dry"
+  N=$(grep -c "REPRICE" "$LOG.dry" || true)
+  echo "drifted/needs-reprice: $N"
+
+  if [ "${AUTO_APPLY:-0}" = "1" ]; then
+    echo "AUTO_APPLY=1 → applying live"
+    APPLY_CONFIRM=YES node sync.js --all --apply --round dollar
+  elif [ "$N" -gt 0 ]; then
+    # propose-only: draft an approval memo
+    MEMO="$QUEUE/fineartamerica-monthly-reprice-$(date +%Y%m%d).md"
+    {
+      echo "# APPROVAL — FAA monthly reprice ($N variants drifted)"
+      echo ""
+      echo "Date: $(date). FAA costs refreshed; $N variants now off-target (below cost or margin)."
+      echo "Full table: ~/Projects/fineartamerica-price-sync/data/dry-run.csv"
+      echo ""
+      echo "## To apply on APPROVE"
+      echo '```'
+      echo "cd ~/Projects/fineartamerica-price-sync"
+      echo "APPLY_CONFIRM=YES node sync.js --all --apply --round dollar"
+      echo '```'
+      echo ""
+      echo "APPROVE / REVISE / BLOCK: ______"
+    } > "$MEMO"
+    echo "drafted approval memo: $MEMO"
+  else
+    echo "no drift — nothing to do."
+  fi
+  echo "== done $(date) =="
+} >> "$LOG" 2>&1

← 802216f Harden apply (retry/continue); purge invalid $0 costs; all 4  ·  back to Fineartamerica Price Sync  ·  auto-save: 2026-07-26T21:46:09 (1 files) — data/dry-run-PRE- b52f100 →