@wairon/cli 5.1.1-dev.16 → 5.1.1-dev.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +138 -85
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +125 -24
- package/dist/index.js.map +1 -1
- package/dist/templates/variants/logic-shapes.yaml +59 -0
- package/dist/templates/variants/portal-shapes.yaml +13 -0
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# wairon's built-in logic shapes — named, base-anchored kinds of Orchestrator.
|
|
2
|
+
# Each states the dependencyClass the shape takes (pure | read) and the
|
|
3
|
+
# discipline an implementer reuses across every component of the kind. A global
|
|
4
|
+
# (~/.wairon/variants) or project (.wai/variants/) variant with the same id
|
|
5
|
+
# overrides one of these. Registered as variants, not stereotypes: a variant
|
|
6
|
+
# carries identity + implementation guidance at zero rule-matrix cost.
|
|
7
|
+
# PROMOTION CRITERION: a variant earns first-class stereotype status when
|
|
8
|
+
# independent projects/packs keep re-registering it, or when its edge rules
|
|
9
|
+
# exceed what guidance (or a future variant-scoped assertion) can express.
|
|
10
|
+
- id: arbiter
|
|
11
|
+
base: Orchestrator
|
|
12
|
+
guidance: >-
|
|
13
|
+
A stateless ruling authority, declared dependencyClass: pure. Given a
|
|
14
|
+
subject/candidate plus an EXPLICITLY SUPPLIED world of facts, compute a
|
|
15
|
+
deterministic verdict (permit/deny, visible/hidden, pass/warn/fail)
|
|
16
|
+
together with the deciding reason. The arbiter performs NO I/O and holds
|
|
17
|
+
NO dependencies on stores, registries, repositories, indexes, or adapters
|
|
18
|
+
— only on other pure Orchestrators — so the caller gathers the world and
|
|
19
|
+
passes it in (the canonical companion shape: a read Orchestrator or a
|
|
20
|
+
workflow assembles the facts, the arbiter rules). Same inputs MUST always
|
|
21
|
+
yield the same verdict: no clock reads, no randomness — take timestamps as
|
|
22
|
+
parameters. Declare `idempotent` on verdict methods where it holds. This
|
|
23
|
+
purity is what keeps rulings replayable, testable, and auditable; if you
|
|
24
|
+
feel the need to fetch something, that fetch belongs in the caller.
|
|
25
|
+
- id: projector
|
|
26
|
+
base: Orchestrator
|
|
27
|
+
guidance: >-
|
|
28
|
+
A stateless derivation of a self-contained view — a snapshot, graph model,
|
|
29
|
+
document tree, rendered artifact, or digest — computed on demand from a
|
|
30
|
+
source model. Handed its source as parameters, it is dependencyClass:
|
|
31
|
+
pure; loading the source itself through AT MOST ONE read facade (a
|
|
32
|
+
Repository, or a read-only adapter of the owning subsystem), it is
|
|
33
|
+
dependencyClass: read. The same source must always yield the same view.
|
|
34
|
+
Own nothing, write nothing: the caller persists or serves the result.
|
|
35
|
+
Distinct from an Index: an Index is a MAINTAINED read model over a Store
|
|
36
|
+
it shares references with; a projector is RECOMPUTED per call and owns no
|
|
37
|
+
state. If the derivation starts coordinating multiple facades or deciding
|
|
38
|
+
what to do with its output, it is drifting toward a workflow — split it.
|
|
39
|
+
- id: composer
|
|
40
|
+
base: Orchestrator
|
|
41
|
+
guidance: >-
|
|
42
|
+
Renders authored text or file sets — scaffolds, briefings, composed
|
|
43
|
+
documents — from embedded templates plus supplied values, for a human or
|
|
44
|
+
connecting-agent audience. Handed its values, it is dependencyClass: pure;
|
|
45
|
+
loading its own source through a read facade, it is dependencyClass: read.
|
|
46
|
+
Return the composed content (e.g. an in-memory file map or markdown
|
|
47
|
+
string); NEVER write it to disk or execute it — the caller owns
|
|
48
|
+
persistence and delivery. Degrade gracefully when optional inputs are
|
|
49
|
+
missing (an absent block composes to nothing, not an error), so
|
|
50
|
+
composition never takes down the surface that serves it.
|
|
51
|
+
- id: codec
|
|
52
|
+
base: Orchestrator
|
|
53
|
+
guidance: >-
|
|
54
|
+
A pure bidirectional translator, declared dependencyClass: pure, between
|
|
55
|
+
two formats (native model ↔ wire or archive format), with validation and
|
|
56
|
+
safety checking on the inbound half (schema conformance, integrity,
|
|
57
|
+
resource-abuse guards). Whole values in, whole values out; no I/O — the
|
|
58
|
+
bytes and the clock arrive as parameters. Keep BOTH directions in one
|
|
59
|
+
component so the round-trip stays testable as a single property.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# wairon's built-in Portal shapes — named, base-anchored kinds of Portal. A
|
|
2
|
+
# global (~/.wairon/variants) or project (.wai/variants/) variant with the same
|
|
3
|
+
# id overrides one of these.
|
|
4
|
+
- id: gateway
|
|
5
|
+
base: Portal
|
|
6
|
+
guidance: >-
|
|
7
|
+
A Portal that authenticates, authorizes, validates or rate-limits inbound
|
|
8
|
+
requests before dispatching them. Declare its inbound authentication in
|
|
9
|
+
`auth`, and hold NO verification logic in its own steps: CALL that logic —
|
|
10
|
+
read or pure Orchestrators, or one ingress Orchestrator when the admission
|
|
11
|
+
sequence carries its own policy — and return early on a rejection, before
|
|
12
|
+
anything is dispatched. Once a request is admitted, dispatch it as any
|
|
13
|
+
Portal does.
|