# CoNews / SATCOM Deploy Hooks

Status: active deploy checklist
Generated: 2026-05-14
Target dashboard: `copress-dashboard`
Local repo: `/Users/Ace/Codex/apps/copress-dashboard`
Production URL: `https://copress-dashboard.vercel.app/`

## Hook Boundaries

Allowed:
- static dashboard files
- dashboard `data/conews-*` files
- Vercel dashboard deploy
- production smoke checks
- progress log updates

Forbidden:
- DNS
- Plesk
- `.env`
- secrets
- customer/subscriber data
- Sendy
- PDF pipeline
- production database mutation

## Pre-Deploy Hook

Run from `/Users/Ace/Codex/apps/copress-dashboard`:

```bash
git status --short
git diff --check
node -e "const fs=require('fs'); for (const f of ['data/conews-town-rollout.json','data/conews-shoplocal-schema.json','data/conews-next-sprint-kanban.json','data/conews-seo-pillar-templates.json','data/conews-contributor-onboarding-cta.json','data/conews-advertiser-campaign-kit.json','data/conews-weekly-edition-sample.json','data/conews-satcom-progress-monitor.json','data/satcom-agent-context.json','data/pci-annual-compliance-report-2026.json','data/conews-hermes-execution-policy.json']) JSON.parse(fs.readFileSync(f,'utf8')); console.log('json ok')"
python3 -m http.server 4177 --bind 127.0.0.1
```

In another terminal while the server is running:

```bash
curl -I --max-time 5 http://127.0.0.1:4177/network.html
for f in \
  data/conews-town-rollout.json \
  data/conews-shoplocal-schema.json \
  data/conews-shoplocal-schema.csv \
  data/conews-next-sprint-kanban.json \
  data/conews-seo-pillar-templates.json \
  data/conews-seo-pillar-templates.csv \
  data/conews-seo-pillar-templates.md \
  data/conews-contributor-onboarding-cta.json \
  data/conews-contributor-onboarding-cta.csv \
  data/conews-contributor-onboarding-cta.md \
  data/conews-advertiser-campaign-kit.json \
  data/conews-advertiser-campaign-kit.csv \
  data/conews-advertiser-campaign-kit.md \
  data/conews-weekly-edition-sample.json \
  data/conews-weekly-edition-sample.md \
  data/conews-satcom-progress-monitor.json \
  data/conews-satcom-progress-monitor.md \
  data/satcom-agent-context.json \
  data/satcom-agent-context.md \
  data/satcom-hermes-openwebui-prompt.md \
  data/pci-annual-compliance-report-2026.json \
  data/pci-annual-compliance-report-2026.md \
  data/conews-hermes-execution-policy.json \
  data/conews-hermes-execution-policy.md \
  data/conews-hermes-policy-ack.md \
  data/conews-architecture-optimization.md \
  data/conews-satcom-handoff-summary.md; do
  curl -s -o /dev/null -w "%{http_code} $f\n" --max-time 5 "http://127.0.0.1:4177/$f"
done
```

## Deploy Hook

Deploy with Vercel from `/Users/Ace/Codex/apps/copress-dashboard`:

```bash
vercel deploy --prod
```

GitHub push/PR is separate. If GitHub auth is expired, Vercel deploy may still work from local source, but the branch must be pushed later as the review/recovery record.

## Post-Deploy Hook

```bash
curl -I --max-time 10 https://copress-dashboard.vercel.app/network
for f in \
  data/conews-town-rollout.json \
  data/conews-shoplocal-schema.json \
  data/conews-shoplocal-schema.csv \
  data/conews-next-sprint-kanban.json \
  data/conews-seo-pillar-templates.json \
  data/conews-seo-pillar-templates.csv \
  data/conews-seo-pillar-templates.md \
  data/conews-contributor-onboarding-cta.json \
  data/conews-contributor-onboarding-cta.csv \
  data/conews-contributor-onboarding-cta.md \
  data/conews-advertiser-campaign-kit.json \
  data/conews-advertiser-campaign-kit.csv \
  data/conews-advertiser-campaign-kit.md \
  data/conews-weekly-edition-sample.json \
  data/conews-weekly-edition-sample.md \
  data/conews-satcom-progress-monitor.json \
  data/conews-satcom-progress-monitor.md \
  data/satcom-agent-context.json \
  data/satcom-agent-context.md \
  data/satcom-hermes-openwebui-prompt.md \
  data/pci-annual-compliance-report-2026.json \
  data/pci-annual-compliance-report-2026.md \
  data/conews-hermes-execution-policy.json \
  data/conews-hermes-execution-policy.md \
  data/conews-hermes-policy-ack.md \
  data/conews-architecture-optimization.md \
  data/conews-satcom-handoff-summary.md; do
  curl -s -o /dev/null -w "%{http_code} $f\n" --max-time 10 "https://copress-dashboard.vercel.app/$f"
done
```

Expected:
- `/network` returns 200 or Vercel 308/200 clean URL behavior.
- all `data/conews-*` files return 200.
- no GitHub/Linear/MCP auth is required for the static deploy itself.

## Progress Hook Format

Append to:
`/Users/Ace/workspace/02_Output/hermes_conews_progress.md`

```text
## YYYY-MM-DD HH:MM - Deploy Hook
- Changed:
- Decisions:
- Blockers:
- Next:
- Files proposed or created:
- Deploy URL:
- Smoke:
```
