You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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:229carries 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:
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.mdrule 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-ratchetonorigin/mainat52d5a52d5: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
objectstack-pm-dispatch:648already defers to this exact section by name ("The doctrine lives inobjectstack-platformunder The App / Platform Boundary"), andobjectstack-upgrade:28carries 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