Skip to content

objectstack-platform's App/Platform Boundary states which side owns what, but not how to tell — the deciding question is missing #15428

Description

@hotlong

Filed unassigned while writing the repo-internal boundary rule into AGENTS.md (PR #15427). Not folded into that PR: skills/** is a separate governed, customer-visible surface with its own budget, and it deserves its own review.

The gap

skills/objectstack-platform/SKILL.md:229 carries a section titled "The App / Platform Boundary". It already states the conclusion well, and it already carries the hand-copying anti-pattern nearly verbatim:

  • :236"Business features belong in the app; capability belongs in the platform."
  • :240"no defensive coding, no shape tolerance, no hand-written predicate re-implementing a platform rule"

What it does not carry is the discriminator — how an app author decides which side a given piece of work falls on, before they have an opinion. "Business feature" versus "capability" is a restatement of the answer, not a test that produces it.

The test that produced all three of 2026-09-04's rulings is one question:

Could this be written by something that has only the metadata, and no knowledge of this company?

  • No — it encodes the company's own judgement (a discount ceiling, who a case is assigned to, how won/lost is booked) ⇒ the metadata app.
  • Yes — it only asks whether the metadata is self-consistent (reference integrity, translation coverage, view rosters, sharing-rule coverage, CRUD round-trips, RLS probes per declared position) ⇒ the platform.

That second row is the one an app author acts on, and it is the row the current text cannot help them find. It is the difference between "we hand-wrote 69k lines of test" and "most of that is derivable".

Why this half, and only this half

The AGENTS.md rule has a second question — would a second app copy the implementation? — that decides what a package in this monorepo publishes. ⛔ That half must not ship to customers: an app author cannot act on it, and it would be pure noise in a published skill. Only the deciding question is app-facing.

Budget — measured, it fits

check:skills-token-ratchet on origin/main at 52d5a52d5:

✓ check-skills-token-ratchet: skills/objectstack-platform/SKILL.md is 12868 tokens (ceiling 12984; headroom 116).

116 tokens of headroom against a three-line amendment — no ceiling raise needed. Worth confirming at the time of the change, since the headroom is small.

Scope notes

  • ⛔ Do not add the boundary doctrine to any other published skill. objectstack-pm-dispatch:648 already defers to this exact section by name ("The doctrine lives in objectstack-platform under The App / Platform Boundary"), and objectstack-upgrade:28 carries its own differently-scoped boundary (the conversion chain versus hand edits). Single-owner is already the arrangement; a second copy is a drift site.
  • skills/** is human-merge-only under Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14. ⛔ No auto-merge.

Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions