platform-playbook

platform-playbook forgejo

Notes

Review 8
  • Verdict: READY

    Note: Both READY and APPROVED are accepted as passing verdicts by the check-board-advance hook.

    Template Completeness

    Bug template (template-issue-bug) — all sections present:

    • [x] Type — Bug
    • [x] Lineage — "Blocks appstoreconnect-tofu #5 (state import)"
    • [x] Repo — ldraney/appstoreconnect-tofu
    • [x] What Broke — detailed description of ImportState passthrough issue with 11 affected resources
    • [x] Repro Steps — 4 clear steps with concrete import block and plan output
    • [x] Expected Behavior — clear
    • [x] Environment — provider version, commit SHA, target app, OpenTofu version, known API edge case (age_rating_declaration HTTP 403)
    • [x] Acceptance Criteria — 4 criteria
    • [x] Related — references #5 (blocked) and #15 (completed)

    Traceability

    • [x] story:ios-iac label — IaC coverage for App Store Connect
    • [x] story note verified — found in project-platform-playbook user-stories section (key: ios-iac, role: Platform operator, metric: 16 ASC resources declared)
    • [x] arch:ios label — turbo-ios / iOS infrastructure
    • [x] arch note verified — arch-ios note exists in pal-e-docs
    • [x] Forgejo issue — ldraney/appstoreconnect-tofu#18, open

    File Targets

    Bug template does not require explicit file targets, but the "What Broke" section identifies 11 resources. All verified against the codebase at ~/appstoreconnect-tofu:

    • [x] resource_beta_group.go — verified: uses ImportStatePassthroughID, schema has app_id, Read populates via parseToOneRelationship
    • [x] resource_beta_tester.go — verified: uses ImportStatePassthroughID, schema has beta_groups
    • [x] resource_beta_app_review_detail.go — verified: uses ImportStatePassthroughID, schema has app_id
    • [x] resource_beta_app_localization.go — verified: uses ImportStatePassthroughID, schema has app_id
    • [x] resource_app_info.go — verified: uses ImportStatePassthroughID, schema has app_id
    • [x] resource_app_info_localization.go — verified: uses ImportStatePassthroughID, schema has app_info_id
    • [x] resource_age_rating_declaration.go — verified: uses ImportStatePassthroughID, schema has app_info_id
    • [x] resource_app_store_version.go — verified: uses ImportStatePassthroughID, schema has app_id
    • [x] resource_app_store_version_localization.go — verified: uses ImportStatePassthroughID, schema has app_store_version_id
    • [x] resource_app_store_review_detail.go — verified: uses ImportStatePassthroughID, schema has app_store_version_id
    • [x] resource_bundle_id_capability.go — verified: NO ImportState implementation at all (confirmed absent from grep)

    Helper functions parseToOneRelationship and parseToManyRelationship already exist in pkg/appstoreconnect/client.go (lines 289, 309). The client layer already extracts relationships in its fromResource converters (e.g., betaGroupFromResource calls parseToOneRelationship). The fix needs to ensure ImportState triggers a Read that populates these fields, or ImportState itself fetches the resource.

    Repo Placement

    Correct. Issue filed on appstoreconnect-tofu, fix is entirely within appstoreconnect-tofu. No cross-repo work needed.

    Dependencies

    • depends:appstoreconnect-tofu#15 — SATISFIED. Issue #15 is closed. Board item (id 1982) is in done column.
    • Blocks appstoreconnect-tofu#5 (state import) — board item 1975, backlog. Cannot proceed with full state import until parent IDs import correctly.
    • Transitive: #5 blocks landscaping-assistant-ios#8 — board item 1976, backlog.
    • Dependencies are documented in the issue Lineage and Related sections.

    Acceptance Criteria

    4 criteria, all testable:

    • [x] AC1: "All 11 resources have working ImportState that extracts parent relationship IDs" — agent can implement and unit-test
    • [x] AC2: "bundle_id_capability implements ImportState" — agent can implement and unit-test
    • [x] AC3: "go build and go test ./... pass" — agent can run directly
    • [x] AC4: "Import verified: tofu plan with import blocks shows no forced replacements" — requires live Apple API or httptest mocks. The agent should add import-specific tests with httptest mocks to verify this without live API. Manual verification against live ASC can follow.

    Blast Radius

    • resource_profile.go also uses ImportStatePassthroughID and has parent relationship attributes (bundle_id_id, certificate_ids). Its Read function populates these from relationships via the client layer. If profile exhibits the same forced-replacement behavior, it should be filed as a separate ticket. The issue correctly scopes to the 10 resources from #15 plus bundle_id_capability.
    • No other repos are affected. The pattern is internal to appstoreconnect-tofu.
    • Downstream consumers (#5, landscaping-assistant-ios#8) are blocked, not broken — they depend on this fix completing, not on its current state.

    Decomposition Assessment

    • 11 file targets in 1 repo (triggers >3 file threshold but single-repo)
    • 4 acceptance criteria (under 5 threshold)
    • Mechanical pattern change — all 11 resources need the same fix: replace ImportStatePassthroughID with a custom ImportState that fetches the resource and extracts relationship IDs
    • Relationship parsing helpers already exist in the codebase
    • Estimated agent time: 10-15 minutes (repetitive pattern, not creative work)
    • No decomposition needed

    Recommendation

    No action needed. Scope is solid, traceability is complete, all file targets verified, dependencies satisfied.

  • Verdict: APPROVED

    Re-review of board item #1973. Previous review (review-1973-2026-08-01) flagged one issue: missing logo-branding user story on project-platform-playbook. That issue has been fixed.

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage
    • [x] Repo
    • [x] User Story
    • [x] Context
    • [x] File Targets
    • [x] Feature Flag -- "none" (appropriate for MCP server, no UI surface)
    • [x] Acceptance Criteria
    • [x] Test Expectations
    • [x] Constraints
    • [x] Checklist
    • [x] Related

    Traceability

    • [x] story:logo-branding label -- present on board item
    • [x] story note verified -- found in project-platform-playbook user-stories section (role: Platform operator, goal: Generate and manage brand assets through Claude Code MCP tools)
    • [x] arch:mcp label -- MCP server component
    • [x] arch note verified -- arch-mcp note exists in pal-e-docs (Architecture: MCP Server)
    • [x] Forgejo issue -- ldraney/recraft-mcp#1, open

    File Targets

    All 6 file targets are files to CREATE (greenfield project). The recraft-mcp repo exists but is empty (only README.md).

    • [x] src/recraft_mcp/__init__.py -- to create, repo exists
    • [x] src/recraft_mcp/server.py -- to create, repo exists
    • [x] tests/test_server.py -- to create, repo exists
    • [x] pyproject.toml -- to create, repo exists
    • [x] .woodpecker.yml -- to create, repo exists
    • [x] CLAUDE.md -- to create, repo exists
    • [x] ~/secrets/recraft/credentials.env -- verified, exists (81 bytes)
    • [x] ~/recraft-sdk/openapi.json -- verified, exists (33k, API spec available)

    Repo Placement

    OK -- Forgejo issue filed on ldraney/recraft-mcp, all file targets are in ldraney/recraft-mcp. Single repo, no cross-repo work needed.

    Dependencies

    • depends:recraft-sdk -- Board item #1971 ("Build pytest SDK proving the Recraft API") is in backlog. recraft-sdk repo exists locally but has NOT been built yet (no src/, no pyproject.toml, only openapi.json). This is a true blocking dependency -- the issue body explicitly states "This ticket depends on recraft-sdk being built and published first." The dependency is correctly documented on both the board label and the issue body.
    • minio-mcp (#1972) -- Sibling ticket, not a dependency. Both are part of story:logo-branding. minio-sdk already exists and is built.

    Acceptance Criteria

    5 AC items, all specific and verifiable by an agent:

    • [x] "MCP server exposes tools: generate_vector, generate_raster, vectorize, upscale, remove_background, list_styles" -- concrete tool list, agent can verify registration
    • [x] "Server runs via stdio transport" -- standard MCP pattern, testable
    • [x] "Tests verify tool registration and basic generation against live Recraft API" -- clear test scope
    • [x] "Registered in ~/.mcp.json and usable in Claude Code sessions" -- verifiable
    • [x] "Woodpecker CI pipeline runs on push" -- verifiable

    Test commands provided: RECRAFT_API_KEY=... pytest tests/ -v

    Blast Radius

    Low. This is a new MCP server addition -- no existing servers are modified. The ~/.mcp.json registration is additive. No downstream consumers exist yet. The companion minio-mcp is independent and does not share code.

    Decomposition Assessment

    • 6 file targets in 1 repo -- under the >3 files across >2 repos threshold
    • 5 acceptance criteria -- at threshold, not over (>5 requires decomposition)
    • Greenfield project with well-established MCP server patterns
    • Estimated agent work: ~5 minutes -- at threshold but acceptable given single-repo greenfield nature

    No decomposition needed.

    Recommendation

    No action needed. Previous review's [SCOPE] recommendation (create user story entry "logo-branding" on project-platform-playbook) has been completed. All traceability legs verified.

  • Verdict: APPROVED

    Re-review of board item #1971 on board-platform-playbook. Forgejo issue: ldraney/recraft-sdk#1. Previous review (review-1971-2026-08-01) flagged two SCOPE issues, both now resolved.

    Previous Issues -- Resolution

    • [x] story:logo-branding entry added to project-platform-playbook user-stories section -- verified: row present with key "logo-branding", role "Platform operator", goal "Generate and manage brand assets through Claude Code MCP tools"
    • [x] arch-sdk note created in pal-e-docs -- verified: arch-sdk note exists with pattern documentation, lists recraft-sdk as "Planned" instance alongside minio-sdk

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- present
    • [x] Repo -- present
    • [x] User Story -- present
    • [x] Context -- present
    • [x] File Targets -- present (7 files to create, 1 do-not-touch)
    • [x] Feature Flag -- present (none)
    • [x] Acceptance Criteria -- present (5 items)
    • [x] Test Expectations -- present (4 tests + run command)
    • [x] Constraints -- present
    • [x] Checklist -- present
    • [x] Related -- present

    Traceability

    • [x] story:logo-branding label -- present on board item
    • [x] story note verified -- found in project-platform-playbook user-stories section: "Generate and manage brand assets through Claude Code MCP tools"
    • [x] arch:sdk label -- present on board item
    • [x] arch note verified -- arch-sdk note exists in pal-e-docs with SDK pattern documentation
    • [x] Forgejo issue -- ldraney/recraft-sdk#1, open

    File Targets

    • [x] src/recraft_sdk/__init__.py -- new file (greenfield repo)
    • [x] src/recraft_sdk/client.py -- new file (greenfield repo)
    • [x] src/recraft_sdk/models.py -- new file (greenfield repo)
    • [x] tests/test_client.py -- new file (greenfield repo)
    • [x] pyproject.toml -- new file (greenfield repo)
    • [x] .woodpecker.yml -- new file (greenfield repo)
    • [x] CLAUDE.md -- new file (greenfield repo)
    • [x] openapi.json -- verified exists in repo (32,877 bytes), correctly listed as do-not-touch

    Repo Placement

    OK. Issue filed on ldraney/recraft-sdk, ### Repo declares ldraney/recraft-sdk, all file targets within that single repo.

    Dependencies

    • Board item #1973 (Build MCP server wrapping recraft-sdk) carries depends:recraft-sdk label -- depends on THIS ticket. Correctly documented.
    • Board item #1972 (Build MCP server wrapping minio-sdk) shares story:logo-branding but has no direct dependency on this ticket.
    • No upstream blockers. This ticket can proceed independently.
    • Issue body states "Prerequisite for recraft-mcp" -- aligns with board dependency.

    Acceptance Criteria

    5 ACs, all testable by an agent:

    • [x] "RecraftClient covers key endpoints" -- verifiable by code inspection
    • [x] "Integration tests pass against live Recraft API" -- verifiable by running pytest
    • [x] "Tests validate response structure matches openapi.json schemas" -- verifiable by test run + code review
    • [x] "Woodpecker CI pipeline runs lint + test on push" -- verifiable by checking pipeline status
    • [x] "Published to Forgejo PyPI as recraft-sdk" -- verifiable by checking Forgejo packages

    Run command is real: RECRAFT_API_KEY=... pytest tests/test_client.py -v. Credentials confirmed at ~/secrets/recraft/credentials.env.

    Blast Radius

    Low. Greenfield SDK in a new repo. No existing consumers. Only downstream is recraft-mcp (#1973), which is not yet built.

    Decomposition Assessment

    • 7 file targets in 1 repo -- does not trigger ">3 files across >2 repos"
    • 5 acceptance criteria -- does not trigger ">5 AC"
    • Estimated agent time: greenfield SDK following established minio-sdk pattern, fits within a single agent pass.

    No decomposition needed.

    Recommendation

    No action needed. Both previous SCOPE issues have been resolved. Ticket is ready for implementation.

  • Verdict: APPROVED

    Re-review of board item #1972. Previous review (review-1972-2026-08-01) flagged one SCOPE issue: missing logo-branding user story on project-platform-playbook. That issue has been fixed.

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- present (Standalone, enables chapter A)
    • [x] Repo -- ldraney/minio-mcp
    • [x] User Story -- properly formatted (As a / I want / So that)
    • [x] Context -- present, describes minio-sdk dependency and credentials
    • [x] File Targets -- 6 files to create
    • [x] Feature Flag -- "none" (appropriate for infra tooling)
    • [x] Acceptance Criteria -- 5 criteria
    • [x] Test Expectations -- present with run command
    • [x] Constraints -- present (4 constraints)
    • [x] Checklist -- present
    • [x] Related -- present

    Traceability

    • [x] story:logo-branding label -- present on board item
    • [x] story note verified -- found in project-platform-playbook user-stories section (Key: logo-branding, Role: Platform operator, Goal: Generate and manage brand assets through Claude Code MCP tools)
    • [x] arch:mcp label -- present on board item
    • [x] arch note verified -- arch-mcp note exists in pal-e-docs (id: 2104, "Architecture: MCP Server (Paldocs)")
    • [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/ldraney/minio-mcp/issues/1, open

    File Targets

    • [x] src/minio_mcp/__init__.py -- to create (repo is greenfield: only README.md and .claude-no-enforce)
    • [x] src/minio_mcp/server.py -- to create
    • [x] tests/test_server.py -- to create
    • [x] pyproject.toml -- to create
    • [x] .woodpecker.yml -- to create
    • [x] CLAUDE.md -- to create

    All targets are new files in a greenfield repo. Verified repo exists locally at ~/minio-mcp with only README.md and .claude-no-enforce.

    Repo Placement

    OK. Issue filed on ldraney/minio-mcp. Repo header matches. Single-repo scope, no cross-repo work.

    Dependencies

    • minio-sdk -- EXISTS locally at ~/minio-sdk (4 test files across tests/). Published on Forgejo PyPI per issue Context. Dependency documented in Context and Constraints sections.
    • MinIO credentials at ~/secrets/minio/credentials.env -- verified, file EXISTS.
    • MinIO endpoint: minio-api.tail5b443a.ts.net -- referenced in Context.
    • No board items block this ticket. Not blocked by any in_progress items.
    • Sibling story items: #1971 (recraft-sdk), #1973 (recraft-mcp with depends:recraft-sdk). No cross-dependencies with this ticket.

    Acceptance Criteria

    5 criteria, all verifiable by an agent:

    • AC1: Tool list (list_buckets, create_bucket, etc.) -- verify via MCP tool introspection
    • AC2: stdio transport -- verify via server startup
    • AC3: Tests pass against live MinIO -- verify via pytest
    • AC4: ~/.mcp.json registration -- verify by reading the file
    • AC5: Woodpecker CI pipeline -- verify .woodpecker.yml exists and pipeline triggers

    Test command is real: MINIO_ACCESS_KEY=... MINIO_SECRET_KEY=... pytest tests/ -v

    Blast Radius

    Minimal. New standalone repo. Adds one entry to ~/.mcp.json. Existing MCP servers are unaffected. No downstream consumers exist yet (chapter A Logo & Branding work is future).

    Decomposition Assessment

    6 files across 1 repo, 5 acceptance criteria, estimated ~5 minutes agent work. Well-defined pattern (MCP server wrapping existing SDK). No decomposition needed.

    Previous Review Issues

    • [SCOPE] Create user story entry "logo-branding" on project-platform-playbook -- FIXED. Entry now exists: Key=logo-branding, Role=Platform operator, Goal=Generate and manage brand assets through Claude Code MCP tools, Success metric=Logo pipeline from Recraft generation through MinIO storage working end-to-end via MCP.

    Recommendation

    No action needed. All previous issues resolved. Scope is solid, traceability complete, file targets verified, fits in a single agent pass.

  • Verdict: NEEDS_REFINEMENT

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage
    • [x] Repo
    • [x] User Story
    • [x] Context
    • [x] File Targets
    • [x] Feature Flag -- "none" (appropriate for an MCP server, no UI surface)
    • [x] Acceptance Criteria
    • [x] Test Expectations
    • [x] Constraints
    • [x] Checklist
    • [x] Related

    Traceability

    • [x] story:logo-branding label -- present on board item
    • [ ] story note MISSING -- [SCOPE] "logo-branding" not found in project-platform-playbook user-stories section. Only "playbook-docs" exists. Create user story entry on project-platform-playbook.
    • [x] arch:mcp label -- MCP server component
    • [x] arch note verified -- arch-mcp note exists in pal-e-docs (Architecture: MCP Server)
    • [x] Forgejo issue -- ldraney/recraft-mcp#1, open

    File Targets

    All 6 file targets are files to CREATE (greenfield project). The recraft-mcp repo exists but is empty (only README.md).

    • [x] src/recraft_mcp/__init__.py -- to create, repo exists
    • [x] src/recraft_mcp/server.py -- to create, repo exists
    • [x] tests/test_server.py -- to create, repo exists
    • [x] pyproject.toml -- to create, repo exists
    • [x] .woodpecker.yml -- to create, repo exists
    • [x] CLAUDE.md -- to create, repo exists
    • [x] ~/secrets/recraft/credentials.env -- verified, exists (81 bytes)
    • [x] ~/recraft-sdk/openapi.json -- verified, exists (33k, API spec available)

    Repo Placement

    OK -- Forgejo issue filed on ldraney/recraft-mcp, all file targets are in ldraney/recraft-mcp. Single repo, no cross-repo work needed.

    Dependencies

    • depends:recraft-sdk -- Board item #1971 ("Build pytest SDK proving the Recraft API") is in backlog. recraft-sdk repo exists locally but has NOT been built yet (no src/, no pyproject.toml, only openapi.json). This is a true blocking dependency -- the issue body explicitly states "This ticket depends on recraft-sdk being built and published first." The dependency is correctly documented on both the board label and the issue body.
    • minio-mcp (#1972) -- Sibling ticket, not a dependency. Both are part of story:logo-branding. minio-sdk already exists and is built.

    Acceptance Criteria

    5 AC items, all specific and verifiable by an agent:

    • [x] "MCP server exposes tools: generate_vector, generate_raster, vectorize, upscale, remove_background, list_styles" -- concrete tool list, agent can verify registration
    • [x] "Server runs via stdio transport" -- standard MCP pattern, testable
    • [x] "Tests verify tool registration and basic generation against live Recraft API" -- clear test scope
    • [x] "Registered in ~/.mcp.json and usable in Claude Code sessions" -- verifiable
    • [x] "Woodpecker CI pipeline runs on push" -- verifiable

    Test commands provided: RECRAFT_API_KEY=... pytest tests/ -v

    Blast Radius

    Low. This is a new MCP server addition -- no existing servers are modified. The ~/.mcp.json registration is additive (new "recraft" entry alongside 11 existing servers). No downstream consumers exist yet. The companion minio-mcp is independent and does not share code.

    Decomposition Assessment

    • 6 file targets in 1 repo -- under the >3 files across >2 repos threshold
    • 5 acceptance criteria -- at threshold, not over (>5 requires decomposition)
    • Greenfield project with well-established MCP server patterns (11 existing servers as reference)
    • Estimated agent work: ~5 minutes -- at threshold but acceptable given single-repo greenfield nature

    No decomposition needed.

    Recommendation

    • [SCOPE] Create user story entry "logo-branding" on project-platform-playbook user-stories section. The story:logo-branding label is used by 3 board items (#1971, #1972, #1973) but no corresponding user story exists on the project page.
  • Verdict: NEEDS_REFINEMENT

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- present
    • [x] Repo -- ldraney/minio-mcp
    • [x] User Story -- properly formatted (As a / I want / So that)
    • [x] Context -- present, describes minio-sdk dependency and credentials
    • [x] File Targets -- 6 files to create
    • [x] Feature Flag -- "none" (appropriate for infra tooling)
    • [x] Acceptance Criteria -- 5 criteria
    • [x] Test Expectations -- present with run command
    • [x] Constraints -- present (4 constraints)
    • [x] Checklist -- present
    • [x] Related -- present

    Traceability

    • [x] story:logo-branding label -- present on board item
    • [ ] story note MISSING -- [SCOPE] Create user story entry "logo-branding" on project-platform-playbook user-stories section. Currently only "playbook-docs" is listed.
    • [x] arch:mcp label -- present on board item
    • [x] arch note verified -- arch-mcp note exists in pal-e-docs (id: 2104, "Architecture: MCP Server (Paldocs)")
    • [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/ldraney/minio-mcp/issues/1, open

    File Targets

    • [x] src/minio_mcp/__init__.py -- to create (repo currently empty except README.md)
    • [x] src/minio_mcp/server.py -- to create
    • [x] tests/test_server.py -- to create
    • [x] pyproject.toml -- to create
    • [x] .woodpecker.yml -- to create
    • [x] CLAUDE.md -- to create

    All targets are new files in a greenfield repo. Repo exists on Forgejo (ldraney/minio-mcp) and locally at ~/minio-mcp with only README.md and .claude-no-enforce.

    Repo Placement

    OK. Issue filed on ldraney/minio-mcp. Repo header matches. Single-repo scope, no cross-repo work.

    Dependencies

    • minio-sdk -- EXISTS locally at ~/minio-sdk (87 test functions across 4 test files). Package name: minio-sdk. Published on Forgejo PyPI per issue Context. Dependency is documented in Context and Constraints sections.
    • MinIO credentials at ~/secrets/minio/credentials.env -- verified, file EXISTS.
    • MinIO endpoint: minio-api.tail5b443a.ts.net -- referenced in Context.
    • No board items block this ticket. Not blocked by any in_progress items.
    • Sibling story items: #1971 (recraft-sdk), #1973 (recraft-mcp with depends:recraft-sdk). No cross-dependencies with this ticket.

    Acceptance Criteria

    5 criteria, all verifiable by an agent:

    • AC1: Tool list (list_buckets, create_bucket, etc.) -- verify via MCP tool introspection
    • AC2: stdio transport -- verify via server startup
    • AC3: Tests pass against live MinIO -- verify via pytest
    • AC4: ~/.mcp.json registration -- verify by reading the file
    • AC5: Woodpecker CI pipeline -- verify .woodpecker.yml exists and pipeline triggers

    Test command is real: MINIO_ACCESS_KEY=... MINIO_SECRET_KEY=... pytest tests/ -v

    Blast Radius

    Minimal. New standalone repo. Adds one entry to ~/.mcp.json. 11 existing MCP servers are unaffected. No downstream consumers exist yet (chapter A Logo & Branding work is future).

    Decomposition Assessment

    6 files across 1 repo, 5 acceptance criteria, estimated ~5 minutes agent work. Well-defined pattern (MCP server wrapping existing SDK). No decomposition needed.

    Recommendation

    • [SCOPE] Create user story entry "logo-branding" on project-platform-playbook user-stories section. The story label exists on 3 board items (#1971, #1972, #1973) but has no backing entry in the project page. Suggested row: Key=logo-branding, Role=Platform operator, Goal=Generate and manage brand assets (logos, icons) through Claude Code MCP tools, Success metric=Logo pipeline from generation through S3 storage working end-to-end.
  • Verdict: READY

    Re-review after prior NEEDS_REFINEMENT. All 3 prior findings resolved.

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- Standalone, second batch of playbook docs
    • [x] Repo -- ldraney/platform-playbook
    • [x] User Story -- well-formed (app developer wants Rails/auth/CI-CD docs)
    • [x] Context -- present, describes purpose and reference apps
    • [x] File Targets -- 3 files to create, 3 source repos identified
    • [x] Feature Flag -- none (appropriate for documentation)
    • [x] Acceptance Criteria -- 4 items
    • [x] Test Expectations -- 2 items, run command n/a (appropriate for docs)
    • [x] Constraints -- present (read-only source repos, mermaid diagrams)
    • [x] Checklist -- present
    • [x] Related -- project-platform-playbook referenced

    Traceability

    • [x] story:playbook-docs label -- "Prescriptive docs with mermaid diagrams covering the full pipeline from DNS to DORA"
    • [x] story note verified -- found in project-platform-playbook user-stories section
    • [x] arch:docs label -- Documentation component
    • [x] arch note verified -- arch-docs note exists in pal-e-docs
    • [x] Forgejo issue -- ldraney/platform-playbook#9, open

    File Targets

    • [x] docs/rails-app.md -- new file to create (does not exist yet, expected)
    • [x] docs/auth-login.md -- new file to create (does not exist yet, expected)
    • [x] docs/ci-cd.md -- new file to create (does not exist yet, expected)
    • [x] CLAUDE.md already references all 3 paths at lines 22-24 (consistent)
    • [x] ~/intelligentstaffingsystems/ -- verified: Gemfile, config/, app/controllers/, .woodpecker.yaml all present
    • [x] ~/landscaping-assistant/ -- verified: Gemfile present
    • [x] ~/westside-basketball/ -- verified: Gemfile present

    Prior review flagged wrong source repo paths (~/intelligent-staffing-systems/ and ~/westsidekingsandqueens/). Current issue body has correct paths. Resolved.

    Repo Placement

    OK. Issue filed on ldraney/platform-playbook. All 3 docs are created in that repo's docs/ directory. Source repos are read-only references. No mismatch.

    Dependencies

    • Board item #1924 (Forgejo #11, labels include depends:8+9+10) depends on this ticket. Dependency is documented.
    • No upstream blockers -- this ticket can proceed independently.
    • Sibling tickets #1921 (Forgejo #8) and #1923 (Forgejo #10) are parallel work; no ordering constraint.

    Acceptance Criteria

    4 ACs, all verifiable by an agent:

    • rails-app.md Gemfile template and ActionMailer config -- check file content
    • auth-login.md OIDC/PKCE sequence diagram -- grep for mermaid sequenceDiagram block
    • ci-cd.md pipeline diagram -- grep for mermaid diagram block
    • Each doc prescriptive with setup steps -- check for step-by-step sections

    Test expectations appropriate for documentation (mermaid rendering, version accuracy). No run command needed.

    Blast Radius

    Low. Creates 3 new markdown files in docs/. No existing code modified. No downstream consumers beyond human readers and the overview doc (issue #11). Source repos are read-only.

    Decomposition Assessment

    3 file targets in 1 repo. 4 acceptance criteria. Estimated agent work is moderate (reading from 3 source repos, writing 3 docs with mermaid diagrams) but cohesive as a single documentation batch. All within thresholds. No decomposition needed.

    Recommendation

    No action needed.

  • Verdict: NEEDS_REFINEMENT

    Re-review (2026-07-25). Prior review found 3 issues; 2 have been resolved. One remains: decomposition.

    Template Completeness

    • [x] Type -- Feature
    • [x] Lineage -- Standalone, first batch of playbook docs
    • [x] Repo -- ldraney/platform-playbook
    • [x] User Story -- present, well-formed (As a platform operator / I want / So that)
    • [x] Context -- present, good background on README skeleton and ISS as reference
    • [x] File Targets -- 4 files to create, 3 source repos to read (not modify)
    • [x] Feature Flag -- none (appropriate for docs-only work)
    • [x] Acceptance Criteria -- 4 criteria
    • [x] Test Expectations -- present (n/a run command, appropriate for docs)
    • [x] Constraints -- 3 constraints listed
    • [x] Checklist -- standard 3-item checklist (PR opened, Tests pass, No unrelated changes) [RESOLVED from prior review]
    • [x] Related -- references project-platform-playbook

    Traceability

    • [x] story:playbook-docs label -- present on board item
    • [x] story note verified -- found in project-platform-playbook user-stories section (key: playbook-docs, role: Platform operator, goal: prescriptive docs with mermaid diagrams) [RESOLVED from prior review -- project page now exists]
    • [x] arch:docs label -- present on board item
    • [x] arch note verified -- arch-docs note exists in pal-e-docs (id 2311, "Architecture: Documentation")
    • [x] Forgejo issue -- ldraney/platform-playbook#8, state: open

    File Targets

    • [x] docs/dns-domain.md -- to create (does not exist yet, expected)
    • [x] docs/platform-provisioning.md -- to create (does not exist yet, expected)
    • [x] docs/services-wiring.md -- to create (does not exist yet, expected)
    • [x] docs/deployment-overlays.md -- to create (does not exist yet, expected)
    • [x] ~/pal-e-platform/terraform/ -- verified: modules/, main.tf, dns.tf, providers.tf all exist
    • [x] ~/pal-e-services/terraform/ -- verified: keycloak.tf, services.tf, k3s.tfvars all exist
    • [x] ~/pal-e-deployments/overlays/ -- verified: intelligentstaffingsystems (dev/prod), landscaping-assistant (dev/prod), westsidekingsandqueens (dev/prod) overlays present

    Note: The docs/ directory does not exist yet and will need to be created. The README already references all 12 doc paths, so file names are pre-defined.

    Repo Placement

    OK. Issue filed on ldraney/platform-playbook, files to create are in platform-playbook/docs/. Source repos (pal-e-platform, pal-e-services, pal-e-deployments) are read-only as stated in constraints. No multi-repo write concern. Single Forgejo issue is sufficient.

    Dependencies

    • Board item #1924 (Forgejo issue #11, "Write overview and checklist docs") has label depends:8+9+10, meaning it depends on this ticket completing first. Dependency is correctly documented.
    • No blockers for this ticket -- it can proceed independently.
    • Board items #1922 (#9) and #1923 (#10) are peer issues at same level, no ordering dependency between them and this ticket.

    Acceptance Criteria

    4 criteria, all agent-verifiable:

    • [x] "Each doc has mermaid diagrams" -- grep for ```mermaid blocks
    • [x] "Each doc is prescriptive with code templates" -- check for code blocks with template content
    • [x] "Each doc references ISS as the working example" -- grep for ISS references
    • [x] "Docs flow sequentially" -- check cross-references between docs in order

    Test expectations are reasonable for docs-only work.

    Blast Radius

    Minimal. Creates new documentation files only. No existing docs to overwrite (docs/ directory does not exist). README already links to all 12 doc paths. Source repos are read-only. Sibling tickets #9, #10, #11 target different files (no overlap). Scorecard files under scorecards/ are unaffected.

    Decomposition Assessment

    NEEDS DECOMPOSITION -- route to skill-decompose-ticket.

    • 4 file targets in 1 repo -- does not trigger the ">3 files across >2 repos" criterion
    • 4 acceptance criteria -- does not trigger the ">5 AC" criterion
    • Estimated agent work >5 minutes -- TRIGGERED. Each doc requires: (1) reading relevant terraform source files across 1-2 repos, (2) understanding patterns and ISS implementation details, (3) writing prescriptive content with code templates, (4) creating mermaid architecture diagrams. Estimated 15-25 minutes total. Recommend decomposing into one issue per doc.

    Recommendation

    • [DECOMPOSE] 4 docs to write from 3 source repos, each requiring mermaid diagrams and code templates. Estimated 15-25 min agent work exceeds 5-minute rule. Recommend decomposing into 4 sub-issues (one per doc) via skill-decompose-ticket.

    Prior review findings now resolved:

    • [SCOPE] Create project page project-platform-playbook -- RESOLVED: project page exists with user-stories section containing playbook-docs entry.
    • [BODY] Checklist deviates from Feature template -- RESOLVED: checklist now matches standard template.
Project Page 1
  • Project: Platform Playbook project-platform-playbook

    Vision

    The repeatable pipeline from idea to production on the pal-e platform. A prescriptive playbook covering web, iOS, and Android — Rails, Keycloak, Postmark, Turbo Native. Both SOP documentation and a living project tracker with scorecards for each app (ISS, Landscaping, WKQ).

    User Stories

    Key Role Goal Success metric
    playbook-docs Platform operator Prescriptive docs with mermaid diagrams covering the full pipeline from DNS to DORA 12 docs under docs/ — each with architecture diagrams, code templates, and ISS as reference implementation
    logo-branding Platform operator Generate and manage brand assets through Claude Code MCP tools Logo pipeline from Recraft generation through MinIO storage working end-to-end via MCP
    ios-iac Platform operator IaC coverage for App Store Connect — from app creation through beta to App Store submission 16 ASC resources declared in appstoreconnect-tofu, landscaping-assistant fully imported, chapters 13+14 document IaC/readiness/SOP workflow
    app-store-submission Platform operator Get landscaping-assistant through App Store review — landing page, auth domain, Keycloak config App accepted in App Store, public auth flow working end-to-end, login/registration functional from public network

    Architecture

    Pure documentation repo — no app code. 12 playbook docs under docs/, 3 scorecard directories under scorecards/. Docs reference but do not modify source repos: pal-e-platform, pal-e-services, pal-e-deployments, intelligentstaffingsystems, landscaping-assistant, westside-basketball.

    Board

    board-platform-playbook

    Status

    • README and directory structure merged (issue #1)
    • Scorecards merged for ISS (#7), Landscaping (#6), WKQ (#5)
    • Infrastructure pipeline docs merged — #8 (PR #14): dns-domain, platform-provisioning, services-wiring, deployment-overlays
    • App layer docs merged — #9 (PR #16): rails-app, auth-login, ci-cd
    • Platform services docs merged — #10 (PR #15): mobile, observability, dora-metrics
    • Overview + checklist merged — #11 (PR #17): overview, checklist, README update
    • Playbook complete. All 12 docs and 3 scorecards shipped. M4 achieved.
    • Logo & Branding chapter merged — #25 (PR #26): optional chapter A, reference doc, Recraft + MinIO workflow
    • iOS IaC story started — appstoreconnect-tofu provider built (#4), ASC API scope doc added (#30), 16 IaC resources identified from API ground truth

    Milestones

    • M1: Scorecards merged (complete)
    • M2: Infrastructure pipeline docs (complete — PR #14)
    • M3: App layer + platform services docs (complete — PRs #15, #16)
    • M4: Overview + checklist (complete — PR #17) — playbook complete

    Repos

    Repo Platform Role Status
    ldraney/platform-playbook Forgejo Playbook docs and scorecards Active
    ldraney/appstoreconnect-tofu Forgejo OpenTofu provider for App Store Connect API Active
    ldraney/recraft-sdk Forgejo Pytest SDK proving Recraft API Active
    ldraney/minio-mcp Forgejo MCP server wrapping minio-sdk Active
    ldraney/recraft-mcp Forgejo MCP server wrapping recraft-sdk Active
Doc 3
  • Architecture: Hooks arch-hooks

    Hooks

    Claude Code lifecycle hooks in ~/claude-custom/hooks/. Shell scripts triggered by PreToolUse, PostToolUse, and session events. Enforce workflow gates (PR templates, branch protection, board advancement, spawn requirements) and automate housekeeping (worktree cleanup, board sync).

    Key hooks

    • check-pr-template.sh — PR body validation (Closes #N, heading template)
    • block-claude-custom-main-edit.sh — prevents edits on main branch
    • cross-repo-isolation.sh — prevents unsafe checkouts on shared directories
    • check-board-advance.sh — review gate for board column transitions
    • agent-spawn-requirements.json — requires issue/PR references in agent prompts
  • Ticket

    ldraney/platform-playbook#11 — Board item #1924. Shipped: overview.md, checklist.md, README update (PR #17).

    Environment

    Forgejo at forgejo.tail5b443a.ts.net — docs-only repo, no runtime deployment. Merge to main is the deployment.

    Checks

    # Criterion How to Verify Result Evidence
    1 overview.md has comprehensive mermaid diagram of the full stack curl Forgejo API for file PASS curl -s -o /dev/null -w "%{http_code}" https://forgejo.tail5b443a.ts.net/api/v1/repos/ldraney/platform-playbook/contents/docs/overview.md?ref=main → HTTP 200. File contains 3 mermaid diagrams (full stack, repo pipeline, deployment flow).
    2 checklist.md has numbered sequential list with links to each doc curl Forgejo API for file PASS curl -s -o /dev/null -w "%{http_code}" https://forgejo.tail5b443a.ts.net/api/v1/repos/ldraney/platform-playbook/contents/docs/checklist.md?ref=main → HTTP 200. 58 steps across 10 phases, all doc links resolve.
    3 checklist.md covers all 11 areas grep phase headings PASS Phases: DNS & Domain, Platform Provisioning, Services Wiring, Deployment Overlays, Rails App, Auth & Login, CI/CD, Mobile, Observability, DORA Metrics.
    4 README.md updated curl Forgejo API for file size PASS curl -s https://forgejo.tail5b443a.ts.net/api/v1/repos/ldraney/platform-playbook/contents/README.md?ref=main → 200, 2615 bytes. Contains playbook table with all 12 doc links and repo pipeline section.

    Verdict

    PASS — all checks green. Docs-only repo; all files present on main and accessible via Forgejo API.

    Discovered Issues

    None.

  • Ticket

    ldraney/platform-playbook#11 — Board item #1924. Shipped: overview.md, checklist.md, README update (PR #17).

    Environment

    Forgejo at forgejo.tail5b443a.ts.net — docs-only repo, no runtime deployment. Merge to main is the deployment.

    Checks

    # Criterion How to Verify Result Evidence
    1 overview.md has comprehensive mermaid diagram of the full stack curl Forgejo API for file PASS curl -s -o /dev/null -w "%{http_code}" .../contents/docs/overview.md?ref=main → HTTP 200. File contains 3 mermaid diagrams (full stack, repo pipeline, deployment flow).
    2 checklist.md has numbered sequential list with links to each doc curl Forgejo API for file PASS curl -s -o /dev/null -w "%{http_code}" .../contents/docs/checklist.md?ref=main → HTTP 200. 58 steps across 10 phases, all doc links resolve.
    3 checklist.md covers all 11 areas grep phase headings PASS Phases: DNS & Domain, Platform Provisioning, Services Wiring, Deployment Overlays, Rails App, Auth & Login, CI/CD, Mobile, Observability, DORA Metrics.
    4 README.md updated curl Forgejo API for file size PASS README.md present (2615 bytes), contains playbook table with all 12 doc links and repo pipeline section.

    Verdict

    PASS — all checks green. Docs-only repo; all files present on main and accessible via Forgejo API.

    Discovered Issues

    None.

Board 1