Skip to content

Add ts-config CLI design spec#724

Draft
prk-Jr wants to merge 1 commit into
server-side-ad-templates-implfrom
ts-config-cli-spec
Draft

Add ts-config CLI design spec#724
prk-Jr wants to merge 1 commit into
server-side-ad-templates-implfrom
ts-config-cli-spec

Conversation

@prk-Jr
Copy link
Copy Markdown
Collaborator

@prk-Jr prk-Jr commented May 20, 2026

Summary

  • Spec for ts-config, a standalone CLI that validates, matches, lints, and checks creative-opportunities.toml without requiring a Rust toolchain — directly addressing the JS auditor onboarding gap raised in Build a standalone validation tool for creative-opportunities.toml #701
  • Defines a two-tool architecture: Rust binary (validate/match/lint/check, mirrors runtime glob and slot-ID logic) and Node.js tool (generates slot config from live publisher pages via Playwright)
  • Covers all design decisions, edge cases, error type scaffold, JSON output contracts, and concrete test shapes for both Phase 1A (Rust) and Phase 1B (Node.js)

Changes

File Change
docs/superpowers/specs/2026-05-19-ts-config-cli-design.md New: full design spec for ts-config CLI (1440 lines)

Closes

Closes #701

Test plan

  • cargo test --workspace
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo fmt --all -- --check
  • JS tests: cd crates/js/lib && npx vitest run
  • JS format: cd crates/js/lib && npm run format
  • Docs format: cd docs && npm run format
  • WASM build: cargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1
  • Manual testing via fastly compute serve

Spec-only PR — no production code changed. WASM build and manual testing not applicable.

Checklist

  • Changes follow CLAUDE.md conventions
  • No unwrap() in production code — use expect("should ...")
  • Uses tracing macros (not println!)
  • New code has tests
  • No secrets or credentials committed

Defines the `ts-config` CLI tool for validating, matching, linting, and
checking `creative-opportunities.toml` without a Rust toolchain. Also covers
the Node.js `ts-config-generate` browser-automation tool for generating slot
configs from live publisher pages.

Key decisions:
- Rust binary for validate/match/lint/check (mirrors runtime glob + slot ID logic)
- Node.js/Playwright for generate (browser automation, reuses js-asset-auditor stack)
- Phase 1A (Rust) ships independently; Phase 1B (Node.js) waits on feature/js-asset-auditor
- Layer 1 init script uses addInitScript function form to scope settle correctly
- googletag.cmd.push interception closes race with deferred GPT setup pattern
- EmptySlotId variant distinct from InvalidSlotId in ValidateError enum
- Concrete test shapes for both Rust unit/integration and Node.js unit/integration
@prk-Jr prk-Jr self-assigned this May 20, 2026
@prk-Jr prk-Jr marked this pull request as draft May 20, 2026 12:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant