mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-06-10 00:02:37 -06:00
IMPLEMENTATION UNITS (U1-U6):
U1: Append-only merge test coverage
- Enhanced run-discord-scrape-smoke.sh with additional test scenarios
- Created append-partial-write.json and append-concurrent-conflict.json fixtures
- Added assertions for message sorting, deduplication, and idempotency
- All 10 merge scenarios validated
U2: Error handling validation
- Created error-path-smoke.sh with 6 error scenario tests
- Added test configs for invalid paths, missing files, bad JSON
- Verified fail-closed behavior on all error paths
- No silent data loss on any failure
U3: Cron idempotency and lifecycle
- Created cron-idempotency-smoke.sh with full lifecycle testing
- Created fixture crontab with unrelated entries (preservation test)
- Verified idempotent install, update, and remove operations
- Confirmed dry-run and entry preservation
U4: Preflight and end-to-end setup
- Created end-to-end-preflight-smoke.sh with 10 validation tests
- Verified preflight is read-only and gates cron installation
- Confirmed host-retry auth flow (commit 090884f)
- Added preflight validation section to Scheduling-Linux.md
U5: Documentation completion
- Updated Readme.md with recurring-scraper link
- Created Recurring-Scrape-Setup.md (6300+ chars comprehensive guide)
- Created Recurring-Scrape-Troubleshooting.md (9200+ chars with 30+ scenarios)
- Enhanced .docs/Scheduling-Linux.md with preflight section
- All documented behavior matches implementation
U6: Production-readiness checklist
- Created docs/recurring-scrape-production-checklist.md
- Compiled all validation results (33+ scenarios across U1-U5)
- Documented test execution commands for re-validation
- Provided deployment notes and monitoring guidance
- Clear sign-off criteria established
ARTIFACTS:
- 4 new smoke test scripts (1000+ lines total)
- 4 new fixtures and test configs
- 3 new documentation files (15500+ chars)
- 2 updated documentation files
- 1 validation checklist tracking document
- All tests passing
SAFETY GUARANTEES VERIFIED:
✅ No silent data loss on any error path
✅ Fail-closed behavior throughout
✅ Archive updates are append-only and idempotent
✅ Cron installation is idempotent
✅ Unrelated cron entries preserved
✅ Preflight is read-only
✅ Token validated before operations
✅ Path traversal prevented
STATUS: Production Ready
All 6 implementation units complete and validated.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
32 lines
2.3 KiB
YAML
32 lines
2.3 KiB
YAML
# Compound Engineering -- local config
|
|
# Copy to .compound-engineering/config.local.yaml in your project root.
|
|
# All settings are optional. Invalid values fall through to defaults.
|
|
|
|
# --- Work delegation (Codex) ---
|
|
|
|
# work_delegate: codex # codex | false (default: false)
|
|
# work_delegate_consent: true # true | false (default: false)
|
|
# work_delegate_sandbox: yolo # yolo | full-auto (default: yolo)
|
|
# work_delegate_decision: auto # auto | ask (default: auto)
|
|
# work_delegate_model: gpt-5.4 # any valid codex model (omit to use ~/.codex/config.toml default)
|
|
# work_delegate_effort: high # minimal | low | medium | high | xhigh (omit to use ~/.codex/config.toml default)
|
|
|
|
# --- Product pulse ---
|
|
# Settings written by /ce-product-pulse first-run interview. Re-run the skill with
|
|
# argument `setup` or `reconfigure` to edit interactively.
|
|
|
|
# pulse_product_name: "Spiral" # used in report titles (no default)
|
|
# pulse_lookback_default: 24h # 1h | 24h | 7d | 30d (default: 24h)
|
|
# pulse_primary_event: "session_started" # the event that means "user showed up"
|
|
# pulse_value_event: "task_completed" # the event that means "user got value"
|
|
# pulse_completion_events: "onboarded,first_purchase" # comma-separated, 0-3 events
|
|
# pulse_quality_scoring: false # true | false (default: false; AI products only)
|
|
# pulse_quality_dimension: "answer accuracy" # dimension scored 1-5 when pulse_quality_scoring is true
|
|
# pulse_analytics_source: posthog # posthog | mixpanel | custom (no default)
|
|
# pulse_tracing_source: sentry # sentry | datadog | custom (no default)
|
|
# pulse_payments_source: stripe # stripe | custom (no default)
|
|
# pulse_db_enabled: false # true | false (default: false; read-only DB if true)
|
|
# pulse_metric_sources: "retention_d7=posthog,nps=delighted" # strategy-metric -> source overrides; comma-separated 'metric=source' pairs; unlisted metrics fall back to pulse_analytics_source
|
|
# pulse_pending_metrics: "retention_d7,nps" # comma-separated strategy metrics awaiting instrumentation; render as 'no data'
|
|
# pulse_excluded_metrics: "north_star" # comma-separated strategy metrics intentionally not in pulse
|