.agents/skills/north-star/SKILL.md
Plate's constitutional doctrine for reusable architecture and public API design.
Use this skill before shaping a reusable Plate surface. This is the upstream decision layer. It owns architecture law, public API shape, layering, performance/scalability selection, and anti-patterns.
Use plate-plugin-creator after the public pattern is already chosen and the work has become plugin-authoring execution.
north-star
first.north-star
first.north-star first.north-star.| Scenario | Route | Why |
|---|---|---|
| new reusable plugin public API | north-star first, then execution companion | public contract decision |
| runtime/service boundary | north-star first | architecture/runtime law |
| new builder/factory pattern | north-star first | reusable pattern decision |
| reusable naming/layering rule | north-star first | doctrine |
| wrapper/component implementation under settled doctrine | execution companion | mechanics only |
| app-local registry-kit sugar | stay local | not reusable doctrine |
| one-off docs/demo convenience | stay local | not reusable doctrine |
| package-local mechanics only | execution companion | implementation lane |
| Concern | Owner |
|---|---|
| reusable architecture doctrine | north-star |
| public API shape decisions | north-star |
| runtime/service-boundary patterns | north-star |
| layering / ownership law | north-star |
| performance/scalability law | north-star |
| anti-pattern catalog | north-star |
| plugin file placement / wrappers / typing mechanics | execution companion |
| plugin authoring execution flow | execution companion |
| app-local sugar | local app/kits |
The concrete pattern guidance lives in pattern-catalog.md.
When scanning a reusable API family, aggressively inspect repeated resolve()
and apply() bodies before inventing more package-level wrappers.
Default posture:
Pull into core when the repeated logic is mostly:
Keep local when the repeated logic is mostly:
The goal is:
Do not flatten package semantics into core just because the files look similar. Do not miss a real core primitive because the action code is loud.
resolve() / apply() shapes and separate matcher logic from
feature semantics before blessing a new public helper.Every lane that introduces or materially changes a reusable public API, runtime boundary, builder/factory pattern, or extension contract must include one of:
north-star updatednorth-star reaffirmed: <section-name>Reaffirmation is not implicit. It must name the governing section so the claim is reviewable.
Examples:
north-star reaffirmed: lawsnorth-star reaffirmed: decision-laddernorth-star reaffirmed: performance-selection-rulesnorth-star section named?If a reusable API or runtime boundary matters to future Plate work, north-star
decides the pattern. Local convenience, plugin mechanics, and documentation
follow from that. Not the other way around.