@cratis/pi 7.97.2 → 7.99.0
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/package/corpus/harnesses/copilot/instructions/discoverability.instructions.md +8 -1
- package/package/corpus/rules/discoverability.md +8 -1
- package/package/corpus/skills/cratis-discoverability/SKILL.md +24 -7
- package/package/corpus/skills/cratis-discoverability/references/facts-and-adoption.md +49 -0
- package/package/corpus/skills/cratis-discoverability/references/package-metadata.md +33 -1
- package/package/corpus/skills/cratis-discoverability/references/page-checklist.md +16 -1
- package/package/corpus/skills/cratis-discoverability/references/structured-data.md +12 -2
- package/package/corpus/skills/cratis-discoverability/verification.json +27 -3
- package/package/corpus/skills/cratis-screenplay-command-surface/references/constraints-produces-concurrency.md +49 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +2 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +18 -0
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/slice-type-rules.md +4 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +3 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/named-keys.md +11 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +2 -0
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +18 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +2 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +2 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/fast-path.md +24 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +3 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/application-shell.md +7 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +8 -0
- package/package.json +1 -1
|
@@ -30,5 +30,12 @@ Readability comes first. If a change for search engines or AI assistants makes a
|
|
|
30
30
|
|
|
31
31
|
- Public pages need a canonical link, one `<h1>`, Open Graph tags, valid JSON-LD that describes visible content, a sitemap entry and a `robots.txt` that allows crawling. Add no new `HowTo` or `FAQPage` markup; keep the visible Q&A.
|
|
32
32
|
- `llms.txt` is an optional index. Never claim it improves ranking. See **cratis-llm-friendly-documentation**.
|
|
33
|
-
- Package metadata (`Description`, `PackageProjectUrl`, `PackageTags`, npm `description`, `homepage`, `keywords`) and the README opener use the same definition sentence, and the project URL points at the docs page `https://www.cratis.io/<product>/`.
|
|
33
|
+
- Package metadata uses `Cratis` for Authors and Company. Metadata (`Description`, `PackageProjectUrl`, `PackageTags`, npm `description`, `homepage`, `keywords`) and the README opener use the same definition sentence, and the project URL points at the docs page `https://www.cratis.io/<product>/`.
|
|
34
34
|
- State only facts the repository supports: versions, licenses, limits. The claim gate in `BRAND.md`, `MESSAGING.md` and `SITE.md` still applies.
|
|
35
|
+
|
|
36
|
+
## Facts and publication guardrails
|
|
37
|
+
|
|
38
|
+
- Each entity page has one sourced "at a glance" block: verifiable facts only, dated counts; never invent customers, user counts, benchmarks, certifications, prices or competitor comparisons.
|
|
39
|
+
- Adoption claims count downloads per product through entry packages only, including predecessor names for a continuation; no sub-package sums or shared-dependency double counting. Round down to a stated threshold, name the month and registries, never say "users" or "customers".
|
|
40
|
+
- Keep description and duplicate-title lint baselines at 0; never raise a baseline to pass. Preserve product names in rendered titles and enforce the site's `llms.txt` / `llms-small.txt` byte budgets.
|
|
41
|
+
- Structured data uses only public, owner-approved founder/company facts. Community member profiles are `noindex`, with no personal data or `Person` entities in markup; this overrides the public-page indexing default above. Keep shared guidance generic: no private/unannounced integration names, legal entity details or factual counts.
|
|
@@ -29,5 +29,12 @@ Readability comes first. If a change for search engines or AI assistants makes a
|
|
|
29
29
|
|
|
30
30
|
- Public pages need a canonical link, one `<h1>`, Open Graph tags, valid JSON-LD that describes visible content, a sitemap entry and a `robots.txt` that allows crawling. Add no new `HowTo` or `FAQPage` markup; keep the visible Q&A.
|
|
31
31
|
- `llms.txt` is an optional index. Never claim it improves ranking. See **cratis-llm-friendly-documentation**.
|
|
32
|
-
- Package metadata (`Description`, `PackageProjectUrl`, `PackageTags`, npm `description`, `homepage`, `keywords`) and the README opener use the same definition sentence, and the project URL points at the docs page `https://www.cratis.io/<product>/`.
|
|
32
|
+
- Package metadata uses `Cratis` for Authors and Company. Metadata (`Description`, `PackageProjectUrl`, `PackageTags`, npm `description`, `homepage`, `keywords`) and the README opener use the same definition sentence, and the project URL points at the docs page `https://www.cratis.io/<product>/`.
|
|
33
33
|
- State only facts the repository supports: versions, licenses, limits. The claim gate in `BRAND.md`, `MESSAGING.md` and `SITE.md` still applies.
|
|
34
|
+
|
|
35
|
+
## Facts and publication guardrails
|
|
36
|
+
|
|
37
|
+
- Each entity page has one sourced "at a glance" block: verifiable facts only, dated counts; never invent customers, user counts, benchmarks, certifications, prices or competitor comparisons.
|
|
38
|
+
- Adoption claims count downloads per product through entry packages only, including predecessor names for a continuation; no sub-package sums or shared-dependency double counting. Round down to a stated threshold, name the month and registries, never say "users" or "customers".
|
|
39
|
+
- Keep description and duplicate-title lint baselines at 0; never raise a baseline to pass. Preserve product names in rendered titles and enforce the site's `llms.txt` / `llms-small.txt` byte budgets.
|
|
40
|
+
- Structured data uses only public, owner-approved founder/company facts. Community member profiles are `noindex`, with no personal data or `Person` entities in markup; this overrides the public-page indexing default above. Keep shared guidance generic: no private/unannounced integration names, legal entity details or factual counts.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cratis-discoverability
|
|
3
|
-
description:
|
|
3
|
+
description: Check Cratis content before publishing for search and AI answers without sacrificing readability. Use when reviewing discoverability, SEO, AEO or GEO; writing fact blocks or download claims; editing package/repo metadata; checking docs titles, descriptions or LLM export budgets; or reviewing founder/company JSON-LD and member profile indexing. Not for page voice and structure (cratis-documentation-writing), llms.txt design (cratis-llm-friendly-documentation), distribution plans (cratis-developer-marketing) or length decisions (cratis-content-length).
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -13,13 +13,13 @@ drop the fix and say so.
|
|
|
13
13
|
|
|
14
14
|
## Procedure
|
|
15
15
|
|
|
16
|
-
1. Name the content type: docs page, blog post, landing page, README or
|
|
16
|
+
1. Name the content type: docs page, blog post, landing page, README, package/repo metadata or member profile.
|
|
17
17
|
2. Name the reader's one job and, for docs, the page type (tutorial, how-to, reference, explanation).
|
|
18
|
-
3. Apply the checks for that type below. Fix the draft; do not annotate it.
|
|
18
|
+
3. Apply the checks for that type below, including facts, adoption claims and privacy without waiting for a separate request. Fix the draft; do not annotate it.
|
|
19
19
|
4. For a built site, run the checker and fix errors; warnings are judgment calls to report.
|
|
20
20
|
5. Report what was changed, what was left alone and why.
|
|
21
21
|
|
|
22
|
-
Read `references/page-checklist.md`
|
|
22
|
+
Read `references/page-checklist.md` when checking a page, including docs lint baselines and LLM export budgets.
|
|
23
23
|
|
|
24
24
|
## Checks by content type
|
|
25
25
|
|
|
@@ -29,7 +29,9 @@ Read `references/page-checklist.md` for the full per-type checklist and the fiel
|
|
|
29
29
|
definition sentence may follow the opening scenario where it reads naturally. `writing-cratis-docs`
|
|
30
30
|
wins on voice and structure. Product index pages open with the definition sentence.
|
|
31
31
|
Reference pages stay terse: title is the exact name plus its product, no question headings, no
|
|
32
|
-
intro. Titles are unique across the site and name the product ("Chronicle projections").
|
|
32
|
+
intro. Titles are unique across the site and name the product ("Chronicle projections"). Keep
|
|
33
|
+
description and duplicate-title lint baselines at 0; never raise a baseline to pass. Check
|
|
34
|
+
rendered titles and measure `llms.txt` / `llms-small.txt` bytes against the site budgets.
|
|
33
35
|
- **Blog post.** The title states the topic in the words a reader would search. The intro gives the
|
|
34
36
|
conclusion in two sentences. Show the named author and date, add `lastUpdated` only for real
|
|
35
37
|
changes, link the owning docs pages with `https://www.cratis.io/...`, keep `description` apart
|
|
@@ -41,7 +43,19 @@ Read `references/page-checklist.md` for the full per-type checklist and the fiel
|
|
|
41
43
|
nouns, with no logo-only or metaphor opener. Links are absolute; link the docs page.
|
|
42
44
|
- **Package metadata.** One sentence naming what the package is and which Cratis product it belongs
|
|
43
45
|
to, identical to the README opener. `PackageProjectUrl` and `homepage` point at the docs page, not
|
|
44
|
-
only at GitHub. Read `references/package-metadata.md`
|
|
46
|
+
only at GitHub. Read `references/package-metadata.md` when editing package fields, GitHub About,
|
|
47
|
+
Docker Hub descriptions, analyzer help links, template messages or README footers. Check these
|
|
48
|
+
surfaces together; Authors and Company are `Cratis`.
|
|
49
|
+
|
|
50
|
+
## Fact blocks and adoption claims
|
|
51
|
+
|
|
52
|
+
For each entity page, assemble one sourced "at a glance" block from verifiable facts, with dates
|
|
53
|
+
for counts. Read `references/facts-and-adoption.md` when selecting facts or calculating downloads:
|
|
54
|
+
identify entry packages and continuation predecessors, exclude sub-packages and overlapping
|
|
55
|
+
shared dependencies, round down to a stated threshold, and publish the month and registries.
|
|
56
|
+
Downloads are never users or customers. Omit unsupported claims instead of inventing customers,
|
|
57
|
+
user counts, benchmarks, certifications, prices or competitor comparisons. Keep shared guidance
|
|
58
|
+
generic; do not copy private integration names, legal entity details or factual counts into it.
|
|
45
59
|
|
|
46
60
|
## Names
|
|
47
61
|
|
|
@@ -53,7 +67,10 @@ Do not invent a name, URL, maturity word or claim that the references do not sta
|
|
|
53
67
|
|
|
54
68
|
Describe only what is visible on the page, one `@graph` per page, stable `@id`s. Add no `HowTo` and
|
|
55
69
|
no new `FAQPage`. Read `references/structured-data.md` for the patterns and what each page type
|
|
56
|
-
gets. Do not name people in
|
|
70
|
+
gets. Use only public, owner-approved founder/company facts. Do not name other people in
|
|
71
|
+
structured data; never add personal data or `Person` entities for community members. Member
|
|
72
|
+
profiles are `noindex`; check profile and CV routes, rendered robots directives and JSON-LD.
|
|
73
|
+
Without approved public founder facts, reference the organization by `@id` instead.
|
|
57
74
|
|
|
58
75
|
## Checking a built site
|
|
59
76
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Fact blocks and adoption numbers
|
|
2
|
+
|
|
3
|
+
## At a glance
|
|
4
|
+
|
|
5
|
+
1. Identify the entity the page defines. Add one visible "at a glance" block per entity page,
|
|
6
|
+
near its definition, not repeated promotional blocks throughout the page.
|
|
7
|
+
2. Select only verifiable facts: what it is, license, public status, supported capabilities and
|
|
8
|
+
approved public company/founder facts. Attach a source to every fact; counts need both a
|
|
9
|
+
source and an as-of month. A date alone is not evidence.
|
|
10
|
+
3. Check the source supports the exact wording. Distinguish vendor claims from independent
|
|
11
|
+
measurements; repository creation is not a founding date, and contributors are not employees.
|
|
12
|
+
4. Omit anything unsupported. Never invent customers, user counts, benchmarks, certifications,
|
|
13
|
+
prices or competitor comparisons. Do not turn an unpublished term into a public promise.
|
|
14
|
+
|
|
15
|
+
A minimal block can say `License: MIT ([license](<public source URL>))` after checking that
|
|
16
|
+
source. Add a download row only after the calculation below. Keep the dated calculation and
|
|
17
|
+
source links in the owning project's evidence, with one maintained source of truth for reused
|
|
18
|
+
claims. Shared corpus guidance must not copy factual counts, legal entity details or names of
|
|
19
|
+
private/unannounced integrations from that evidence.
|
|
20
|
+
|
|
21
|
+
## Counting downloads
|
|
22
|
+
|
|
23
|
+
1. Work per product, registry and era. List the user-installed entry packages or server images,
|
|
24
|
+
their public registry sources, observation month and counter meaning. Count entry packages
|
|
25
|
+
only: exclude sub-packages, add-ons and starter/meta-packages that repeat those installs.
|
|
26
|
+
2. For a product continuation, include predecessor package names and explain the lineage from
|
|
27
|
+
public evidence. Distinct historical entry distributions may count; do not include an
|
|
28
|
+
unrelated product simply because it shares an organization or dependency.
|
|
29
|
+
3. Record registry measurements and gaps: NuGet displayed totals may be rounded, npm totals
|
|
30
|
+
need complete time ranges, Docker Hub reports pulls, and Hex reports downloads. Do not
|
|
31
|
+
silently replace missing or incomplete measurements with estimates or claim an unmeasured
|
|
32
|
+
registry. These are downloads/pulls, not unique adoption.
|
|
33
|
+
4. Sum the included entry counters once per product. Do not add shared dependencies to a
|
|
34
|
+
company headline: their downloads overlap consuming products. Avoid a cross-product total
|
|
35
|
+
unless its exclusions and overlap are documented; per-product claims are the default.
|
|
36
|
+
5. Choose a conservative threshold below the supported total and round down, never to nearest
|
|
37
|
+
or up. Publish "more than <rounded threshold> downloads as of <month year>, across <named
|
|
38
|
+
registries>, including <public predecessor names>". For Docker, explain that pulls are part
|
|
39
|
+
of the combined measure. Never relabel downloads as users, customers, teams or installations.
|
|
40
|
+
6. Recheck the calculation and source completeness before publishing. Keep one maintained
|
|
41
|
+
calculation for reuse; never change its date without refreshing the measurements. If evidence is incomplete, omit the claim and report the gap.
|
|
42
|
+
|
|
43
|
+
## Verification
|
|
44
|
+
|
|
45
|
+
A pass has one visible block per entity page, a working source for every fact, a date on every
|
|
46
|
+
count, and a reproducible download calculation listing included entries, excluded dependencies,
|
|
47
|
+
predecessors, registry coverage and rounding threshold. Compare visible wording and JSON-LD
|
|
48
|
+
with those sources. No unsupported claim or private detail should remain; report missing
|
|
49
|
+
sources rather than filling gaps.
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
- Field map
|
|
6
6
|
- Writing the description
|
|
7
|
+
- Repository and distribution surfaces
|
|
8
|
+
- Verification
|
|
7
9
|
- Pitfalls
|
|
8
10
|
|
|
9
11
|
## Field map
|
|
@@ -14,7 +16,8 @@
|
|
|
14
16
|
| Tags | `<PackageTags>`, 5-10, `cratis` plus category terms | `keywords`, the same list |
|
|
15
17
|
| Project URL | `<PackageProjectUrl>` = `https://www.cratis.io/<product>/` | `homepage`, the same |
|
|
16
18
|
| Repository | `RepositoryUrl` | `repository` |
|
|
17
|
-
| Authors |
|
|
19
|
+
| Authors | `<Authors>Cratis</Authors>` (plural) | `author` `Cratis` |
|
|
20
|
+
| Company | `<Company>Cratis</Company>` | No standard field; do not invent one |
|
|
18
21
|
| License | `PackageLicenseExpression` `MIT` | `license` `MIT` |
|
|
19
22
|
| Readme | A packed README with the same opener | `README.md` |
|
|
20
23
|
|
|
@@ -28,6 +31,35 @@ One sentence: what it is, for whom, and which Cratis product it belongs to - "<w
|
|
|
28
31
|
Cratis Chronicle, the open-source event-sourcing database"). The text equals the README opener and
|
|
29
32
|
the GitHub About text. Tags are specific ("event-sourcing", "cqrs", "dotnet"); never "utilities".
|
|
30
33
|
|
|
34
|
+
## Repository and distribution surfaces
|
|
35
|
+
|
|
36
|
+
- Set GitHub About's description to the same sentence, its website to the product docs page on
|
|
37
|
+
`https://www.cratis.io`, and topics to `cratis` plus accurate category terms.
|
|
38
|
+
- Docker Hub's short description defines the image and names the parent product. Its full
|
|
39
|
+
description explains what it runs, how to start it and where the product docs live; keep the
|
|
40
|
+
definition and links aligned with the README. Do not add unsupported adoption or performance claims.
|
|
41
|
+
- Analyzer `helpLinkUri` values link to the relevant diagnostic documentation on
|
|
42
|
+
`https://www.cratis.io`; keep the diagnostic path, not just the product homepage.
|
|
43
|
+
- Template post-action messages and README footers link to the relevant docs on
|
|
44
|
+
`https://www.cratis.io`. Check nested READMEs and image READMEs, not just the repository root.
|
|
45
|
+
- Preserve repository URLs as repository URLs. Do not rewrite schema identifiers, test fixtures,
|
|
46
|
+
negative examples or managed corpus copies while fixing user-facing links.
|
|
47
|
+
|
|
48
|
+
## Verification
|
|
49
|
+
|
|
50
|
+
Inspect effective NuGet properties on a packable project, including inherited values:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
dotnet msbuild <packable.csproj> -getProperty:Authors -getProperty:Company -getProperty:Description -getProperty:PackageProjectUrl
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
A pass shows `Cratis` for Authors and Company, a nonempty parent-product definition and the
|
|
57
|
+
existing product docs URL. Check npm `author`, `description`, `homepage` and `keywords` against the
|
|
58
|
+
field map. Request each changed www URL and require HTTP 200 at the intended destination; fix
|
|
59
|
+
broken paths rather than merely swapping hosts. Inspect GitHub About and Docker Hub metadata
|
|
60
|
+
where available. Report remote metadata that cannot be checked or needs owner approval to change;
|
|
61
|
+
a local README edit is not proof that a registry or repository setting changed.
|
|
62
|
+
|
|
31
63
|
## Pitfalls
|
|
32
64
|
|
|
33
65
|
- An empty `Description`.
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- Landing pages
|
|
10
10
|
- READMEs
|
|
11
11
|
- Before publishing a site change
|
|
12
|
+
- Docs-site guardrails
|
|
12
13
|
|
|
13
14
|
## Field targets
|
|
14
15
|
|
|
@@ -29,7 +30,7 @@ Lengths are targets, counted in characters including any site suffix.
|
|
|
29
30
|
- [ ] Description written by hand; not the title, not another page's description.
|
|
30
31
|
- [ ] The `description` answers what the page is or achieves in one self-contained sentence; the first paragraph does too on landing, index, glossary and README pages.
|
|
31
32
|
- [ ] Canonical names; first mention uses the full "Cratis X" form.
|
|
32
|
-
- [ ] Facts, numbers and comparisons carry a source
|
|
33
|
+
- [ ] Facts, numbers and comparisons carry a source, and counts also carry a date; nothing beyond the claim gate.
|
|
33
34
|
- [ ] Links have descriptive text. Root-relative inside the docs site, absolute
|
|
34
35
|
`https://www.cratis.io/...` elsewhere.
|
|
35
36
|
- [ ] Images have alt text (empty only when decorative) and sensible size.
|
|
@@ -86,3 +87,17 @@ Lengths are targets, counted in characters including any site suffix.
|
|
|
86
87
|
- [ ] The content is in the raw HTML the server returns, not only rendered by JavaScript.
|
|
87
88
|
- [ ] Internal links resolve; no apex `cratis.io` links.
|
|
88
89
|
- [ ] A real HTTP 404 for unknown URLs; redirect stubs keep a canonical and stay out of the sitemap.
|
|
90
|
+
|
|
91
|
+
## Docs-site guardrails
|
|
92
|
+
|
|
93
|
+
- Keep missing-description and duplicate-title lint baselines at 0. Never raise a baseline to pass;
|
|
94
|
+
fix authored metadata or its generator and rerun the site's lint with no new exceptions.
|
|
95
|
+
- Inspect rendered browser titles, not only frontmatter: retain the product name, add language
|
|
96
|
+
context for variants and distinguish repeated generic titles without changing page headings.
|
|
97
|
+
- Measure UTF-8 bytes of `llms.txt` and `llms-small.txt`, including product/nested-product exports,
|
|
98
|
+
against the site's configured budgets. Keep `llms.txt` an index and `llms-small.txt` curated
|
|
99
|
+
starting points with one-line summaries, not a full inventory. Trim duplication and curation,
|
|
100
|
+
not human documentation or useful code examples. Do not raise budgets to hide growth.
|
|
101
|
+
- Run the site's lint and enforced export-budget checks after its build; require exit 0 and
|
|
102
|
+
measured files within their limits. The built-site checker alone does not enforce these gates.
|
|
103
|
+
For export design, use **cratis-llm-friendly-documentation**.
|
|
@@ -13,8 +13,17 @@
|
|
|
13
13
|
- Markup describes what is visible on the page, and every date is a real one.
|
|
14
14
|
- Add no `HowTo`. Add no new `FAQPage`; keep the visible question and answer text. Use `QAPage` only
|
|
15
15
|
for real user questions and answers.
|
|
16
|
-
-
|
|
17
|
-
|
|
16
|
+
- Use only public, owner-approved founder/company facts that are visible on the page. Founder
|
|
17
|
+
`Person` nodes may be linked from the organization with stable `@id`s and public profile links;
|
|
18
|
+
do not infer roles, employment or relationships from contributor accounts. Without this approval,
|
|
19
|
+
reference the organization by `@id` instead of naming a person.
|
|
20
|
+
- Never add personal data or `Person` entities for community members, even if a profile displays
|
|
21
|
+
them. Do not serialize job titles, email, location, interests or CV details into JSON-LD.
|
|
22
|
+
Member profile and CV pages must emit `noindex`; keep them out of the sitemap. Do not apply
|
|
23
|
+
this policy to the community home or join page. Check rendered robots metadata or the
|
|
24
|
+
`X-Robots-Tag` header; blocking crawling alone does not establish `noindex`.
|
|
25
|
+
- Shared guidance stays generic: no private/unannounced integration names, legal entity details
|
|
26
|
+
or factual counts copied from source material.
|
|
18
27
|
- Do not add `offers`, an address or contact data without approval (see `SITE.md`).
|
|
19
28
|
- Validate with the schema.org validator or Google's Rich Results Test. Invalid markup is worse than
|
|
20
29
|
none. Static sites hand-write `<script type="application/ld+json">`; Astro sites generate it in
|
|
@@ -31,6 +40,7 @@
|
|
|
31
40
|
| Blog post | `BlogPosting` (`datePublished`, `dateModified`, `publisher`, `image`) |
|
|
32
41
|
| Repository or sample code | `SoftwareSourceCode` |
|
|
33
42
|
| Legal pages | `WebPage` |
|
|
43
|
+
| Member profiles and CV pages | no `Person` or personal structured data; `noindex` |
|
|
34
44
|
| 404 and app hosts | none |
|
|
35
45
|
|
|
36
46
|
## Pattern
|
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skill": "cratis-discoverability",
|
|
3
|
-
"input": "Run the pre-publish discoverability check on
|
|
3
|
+
"input": "Run the pre-publish discoverability check on entity facts and download claims, package/repo metadata, docs-site guardrails and founder/company or member profile structured data.",
|
|
4
4
|
"fixtures": [],
|
|
5
5
|
"assertions": [
|
|
6
6
|
{ "kind": "skill-contains", "value": "If a fix makes the page worse to read," },
|
|
7
7
|
{ "kind": "skill-contains", "value": "Add no `HowTo` and" },
|
|
8
|
-
{ "kind": "skill-contains", "value": "
|
|
8
|
+
{ "kind": "skill-contains", "value": "never add personal data or `Person` entities for community members." },
|
|
9
9
|
{ "kind": "skill-contains", "value": "Apex `https://cratis.io/` links: the docs host is `https://www.cratis.io`." },
|
|
10
10
|
{ "kind": "skill-contains", "value": "no logo-only or metaphor opener" },
|
|
11
|
-
{ "kind": "skill-contains", "value": "Padding to a word count: there is no minimum length" }
|
|
11
|
+
{ "kind": "skill-contains", "value": "Padding to a word count: there is no minimum length" },
|
|
12
|
+
{ "kind": "skill-contains", "value": "one sourced \"at a glance\" block" },
|
|
13
|
+
{ "kind": "skill-contains", "value": "Downloads are never users or customers." },
|
|
14
|
+
{ "kind": "skill-contains", "value": "Authors and Company are `Cratis`." },
|
|
15
|
+
{ "kind": "skill-contains", "value": "never raise a baseline to pass." },
|
|
16
|
+
{ "kind": "skill-contains", "value": "Member\nprofiles are `noindex`" },
|
|
17
|
+
{ "kind": "skill-contains", "value": "Attach a source to every fact", "file": "references/facts-and-adoption.md" },
|
|
18
|
+
{ "kind": "skill-contains", "value": "Never invent customers, user counts, benchmarks, certifications,", "file": "references/facts-and-adoption.md" },
|
|
19
|
+
{ "kind": "skill-contains", "value": "Count entry packages\n only", "file": "references/facts-and-adoption.md" },
|
|
20
|
+
{ "kind": "skill-contains", "value": "include predecessor package names", "file": "references/facts-and-adoption.md" },
|
|
21
|
+
{ "kind": "skill-contains", "value": "round down, never to nearest", "file": "references/facts-and-adoption.md" },
|
|
22
|
+
{ "kind": "skill-contains", "value": "as of <month year>, across <named\n registries>", "file": "references/facts-and-adoption.md" },
|
|
23
|
+
{ "kind": "skill-contains", "value": "Do not add shared dependencies", "file": "references/facts-and-adoption.md" },
|
|
24
|
+
{ "kind": "skill-contains", "value": "<Company>Cratis</Company>", "file": "references/package-metadata.md" },
|
|
25
|
+
{ "kind": "skill-contains", "value": "https://www.cratis.io/<product>/", "file": "references/package-metadata.md" },
|
|
26
|
+
{ "kind": "skill-contains", "value": "GitHub About", "file": "references/package-metadata.md" },
|
|
27
|
+
{ "kind": "skill-contains", "value": "Docker Hub's short description", "file": "references/package-metadata.md" },
|
|
28
|
+
{ "kind": "skill-contains", "value": "Analyzer `helpLinkUri`", "file": "references/package-metadata.md" },
|
|
29
|
+
{ "kind": "skill-contains", "value": "Template post-action messages and README footers", "file": "references/package-metadata.md" },
|
|
30
|
+
{ "kind": "skill-contains", "value": "lint baselines at 0", "file": "references/page-checklist.md" },
|
|
31
|
+
{ "kind": "skill-contains", "value": "Measure UTF-8 bytes of `llms.txt` and `llms-small.txt`", "file": "references/page-checklist.md" },
|
|
32
|
+
{ "kind": "skill-contains", "value": "retain the product name", "file": "references/page-checklist.md" },
|
|
33
|
+
{ "kind": "skill-contains", "value": "public, owner-approved founder/company facts", "file": "references/structured-data.md" },
|
|
34
|
+
{ "kind": "skill-contains", "value": "Never add personal data or `Person` entities for community members", "file": "references/structured-data.md" },
|
|
35
|
+
{ "kind": "skill-contains", "value": "no private/unannounced integration names, legal entity details", "file": "references/structured-data.md" }
|
|
12
36
|
]
|
|
13
37
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Constraints, produces mappings and concurrency
|
|
2
2
|
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- `constraint` — uniqueness at append time
|
|
6
|
+
- Refuse a command on an unknown id
|
|
7
|
+
- `concurrency`
|
|
8
|
+
- `produces`
|
|
9
|
+
|
|
3
10
|
This reference holds the detailed forms for append-time `constraint` uniqueness, `produces` mapping sources and conditions, and the `concurrency` block.
|
|
4
11
|
|
|
5
12
|
## `constraint` — uniqueness at append time
|
|
@@ -39,6 +46,48 @@ belongs in `validate`/`require`. Use a constraint when two concurrent appends mu
|
|
|
39
46
|
not both win — a `validate` rule cannot do that. Stage renders only single-text-property and
|
|
40
47
|
`unique event` constraints (`STAGE-ESM-014`; `cratis-stage-rendering-and-sandbox` `references/admission.md`).
|
|
41
48
|
|
|
49
|
+
## Refuse a command on an unknown id
|
|
50
|
+
|
|
51
|
+
Without a guard, a command naming an id that has no state is accepted and appends its event. Guard
|
|
52
|
+
existence with a protected read: after authorization and property rules, and before any `require`
|
|
53
|
+
or mapping runs, it rejects with `<ReadModel> '<key>' does not exist.` The preamble goes in the root document, the read model's key property is
|
|
54
|
+
named `id` (`STAGE-ESM-044` otherwise, found by `cratis render --check`), and the view needs a
|
|
55
|
+
`remove with` event. Complete model; it validates with `--executable`, renders with `--check`,
|
|
56
|
+
and the specification passes in `screenplay test`:
|
|
57
|
+
|
|
58
|
+
```screenplay
|
|
59
|
+
domain Tasks
|
|
60
|
+
command reads protected
|
|
61
|
+
module Work
|
|
62
|
+
feature Closing
|
|
63
|
+
slice StateView TaskStatus
|
|
64
|
+
event TaskOpened
|
|
65
|
+
title String
|
|
66
|
+
event TaskDeleted
|
|
67
|
+
readmodel Task
|
|
68
|
+
id String key
|
|
69
|
+
title String
|
|
70
|
+
projection TaskProjection => Task
|
|
71
|
+
from TaskOpened
|
|
72
|
+
remove with TaskDeleted
|
|
73
|
+
slice StateChange CloseTask
|
|
74
|
+
event TaskClosed
|
|
75
|
+
reason String
|
|
76
|
+
command CloseTask
|
|
77
|
+
taskId String identifier
|
|
78
|
+
reads Task by taskId
|
|
79
|
+
produces TaskClosed
|
|
80
|
+
for taskId
|
|
81
|
+
reason = "done"
|
|
82
|
+
specification ClosingAnUnknownTask
|
|
83
|
+
when CloseTask
|
|
84
|
+
taskId = "missing"
|
|
85
|
+
then error "Task 'missing' does not exist."
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Admission, races and refused read shapes: [protected reads](protected-reads.md). A `validate` rule or a
|
|
89
|
+
screen guard cannot check existence, and a `unique` constraint only guards duplicates.
|
|
90
|
+
|
|
42
91
|
## `concurrency`
|
|
43
92
|
|
|
44
93
|
Five dimensions, each at most once, and at most one `concurrency` block per
|
|
@@ -34,6 +34,8 @@ module Invoicing
|
|
|
34
34
|
|
|
35
35
|
## Source rules
|
|
36
36
|
|
|
37
|
+
- Member names are lowercase identifiers: `hourly`, not `Hourly`. A capitalised member is
|
|
38
|
+
PLAY0009 ("expected an identifier"); rename it, and use the same name in specifications.
|
|
37
39
|
- Number **all members or none**; there is no implicit continuation after a pin.
|
|
38
40
|
- Numbers are unique whole int32 values, from -2147483648 through 2147483647.
|
|
39
41
|
Gaps and negative numbers are allowed; aliases and flags semantics are not.
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Validation rule forms
|
|
2
2
|
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Rule vocabulary
|
|
6
|
+
- `require` message
|
|
7
|
+
- Date and DateTime comparisons
|
|
8
|
+
- `not empty` means non-blank text
|
|
9
|
+
- Rules whose logic is code
|
|
10
|
+
|
|
3
11
|
## Rule vocabulary
|
|
4
12
|
|
|
5
13
|
| Rule | Example |
|
|
@@ -24,6 +32,16 @@ modifier generates check digits but does not add validation. Check digits catch
|
|
|
24
32
|
typos, not forgery. For generated-concept proof statuses, deterministic regex
|
|
25
33
|
limits and PLAY0688 repairs, read [generated rules](generated-values-and-responses.md#generated-concept-rules-esm-v20).
|
|
26
34
|
|
|
35
|
+
## `require` message
|
|
36
|
+
|
|
37
|
+
The `message` of a whole-command `require` goes on the next, indented line, not on the `require` line:
|
|
38
|
+
|
|
39
|
+
```screenplay excerpt
|
|
40
|
+
validate
|
|
41
|
+
require to >= from
|
|
42
|
+
message "The end must not be before the start"
|
|
43
|
+
```
|
|
44
|
+
|
|
27
45
|
## Date and DateTime comparisons
|
|
28
46
|
|
|
29
47
|
Requires Screenplay 4.199.0 (ESM v26; `screenplay --version`); older binders refuse
|
package/package/corpus/skills/cratis-screenplay-event-modeling/references/slice-type-rules.md
CHANGED
|
@@ -10,3 +10,7 @@ automation: model it as one `StateChange` slice with several `produces` blocks.
|
|
|
10
10
|
|
|
11
11
|
**Translation is workflow-specific anti-corruption.** Generic infrastructure every
|
|
12
12
|
workflow needs (event persistence, message transport) is not a `Translate` slice.
|
|
13
|
+
|
|
14
|
+
**Events have no optional properties for the `cratis` target.** An event property
|
|
15
|
+
marked `optional` validates, but `cratis render --check` refuses it (`STAGE-ESM-005`).
|
|
16
|
+
Make it required, or leave it out of the event; whether the detail is a separate fact is a modeling decision.
|
|
@@ -64,6 +64,9 @@ of executing the newly selected command.
|
|
|
64
64
|
|
|
65
65
|
## Guard boundaries
|
|
66
66
|
|
|
67
|
+
A guard hides an offer; it does not make a command on an unknown id fail. Existence is refused in the
|
|
68
|
+
command: [refuse a command on an unknown id](../../cratis-screenplay-command-surface/references/constraints-produces-concurrency.md#refuse-a-command-on-an-unknown-id).
|
|
69
|
+
|
|
67
70
|
Conditions compare item paths to literals, not other paths, route/screen state,
|
|
68
71
|
`$context` or `$env`. Equality/inequality, numeric ordering, string contains/starts
|
|
69
72
|
with and grouped and/or are supported; and binds tighter than or. Collections
|
|
@@ -27,6 +27,17 @@ selection is:
|
|
|
27
27
|
candidates and requires exactly one. An admitted list query here is a collection
|
|
28
28
|
query without context-derived `by`, filters or scope.
|
|
29
29
|
|
|
30
|
+
Two `*Id` properties (`orderId`, `customerId`) with only a list query are ambiguous
|
|
31
|
+
(PLAY0268). Add one keyed query, whose `by` names the identity:
|
|
32
|
+
|
|
33
|
+
```screenplay excerpt
|
|
34
|
+
readmodel Order
|
|
35
|
+
orderId String
|
|
36
|
+
customerId String
|
|
37
|
+
query OrderById => Order optional
|
|
38
|
+
by orderId String
|
|
39
|
+
```
|
|
40
|
+
|
|
30
41
|
A projection-only/queryless read model needs an explicit `key`: a lone `*Id`
|
|
31
42
|
property alone does not infer identity. Never use the command's `identifier`
|
|
32
43
|
modifier on a read model.
|
|
@@ -37,6 +37,8 @@ The person looks at where something stands and decides what to do next.
|
|
|
37
37
|
events so far. Every field shown has a source in that read model.
|
|
38
38
|
- The available actions depend on state. A static `action` line is always offered; an action that
|
|
39
39
|
must differ by state is a guarded action (`references/guarded-actions.md`), never prose.
|
|
40
|
+
- A list the screen renders is `query <Name> => observable <ReadModel>[]`. A snapshot list renders too, but
|
|
41
|
+
it is read once and does not follow later events; `observable` keeps the table current after a command.
|
|
40
42
|
- A status screen with no incoming view is a gap; only a blank creation form is exempt.
|
|
41
43
|
|
|
42
44
|
## Error state
|
|
@@ -34,6 +34,24 @@ Requires Screenplay 4.145.0 or later (`screenplay --version`) for `run-specifica
|
|
|
34
34
|
|
|
35
35
|
Read [source notes](references/source-notes.md) for the retained inline-fact and action-syntax evidence; run the changed examples at the standalone pin.
|
|
36
36
|
|
|
37
|
+
## State every property
|
|
38
|
+
|
|
39
|
+
A `when` command and each `then` event list **every** property, including `optional`
|
|
40
|
+
ones, with a concrete value; omitting one is PLAY0524. Only a read-model property may be `null` (PLAY0350).
|
|
41
|
+
This model fails with PLAY0524 on both `when` and `then` until `note = "none"` is added:
|
|
42
|
+
|
|
43
|
+
```screenplay excerpt
|
|
44
|
+
event TaskOpened
|
|
45
|
+
note String optional
|
|
46
|
+
specification Opening
|
|
47
|
+
when OpenTask
|
|
48
|
+
taskId = "t1"
|
|
49
|
+
title = "Write"
|
|
50
|
+
then TaskOpened
|
|
51
|
+
for "t1"
|
|
52
|
+
title = "Write"
|
|
53
|
+
```
|
|
54
|
+
|
|
37
55
|
## Reference execution — what actually runs
|
|
38
56
|
|
|
39
57
|
Screenplay's reference runner executes specifications against an immutable
|
package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md
CHANGED
|
@@ -25,6 +25,8 @@ a seed is not a portable fixture.
|
|
|
25
25
|
|
|
26
26
|
## When not to
|
|
27
27
|
|
|
28
|
+
A fixture still states every command and event property with a concrete value, optional ones included (PLAY0524); a generated value does not excuse an omitted field.
|
|
29
|
+
|
|
28
30
|
Pins do not prove randomness, authorization, idempotency, storage freshness or
|
|
29
31
|
secret safety. Client-minted IDs stay inputs; gapless invoice numbering needs an
|
|
30
32
|
allocator, not a random fixture or pattern. Check digits catch typos, not forgery;
|
|
@@ -218,6 +218,8 @@ unresolved questions: the standalone tool has `--open-questions fail`; `cratis s
|
|
|
218
218
|
does through `--open-questions report|fail`. It is separate from compilation and `--warnaserror`.
|
|
219
219
|
Requires Cratis CLI 3.60.0 or later (`cratis --version`) for that option; older CLIs lack it.
|
|
220
220
|
|
|
221
|
+
Read [fast path](references/fast-path.md) for the ordered requirements-to-running-app checklist (validate, `render --check`, render, build, run).
|
|
222
|
+
|
|
221
223
|
## Route near misses
|
|
222
224
|
|
|
223
225
|
Read [references/neighbouring-skills.md](references/neighbouring-skills.md) when the work is modeling phases, MCP editing, construct depth, rendering or running systems.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Fast path: requirements to a running Cratis app
|
|
2
|
+
|
|
3
|
+
Run these in order and stop at the first failure; each step catches what the one before cannot.
|
|
4
|
+
`<root>` is the model folder, `<dir>` the render destination.
|
|
5
|
+
|
|
6
|
+
1. **Model** the requirements (`cratis-screenplay-modeling-lifecycle`). Enum members lowercase,
|
|
7
|
+
specifications state every property, no optional event property, list queries `observable`
|
|
8
|
+
(`references/traps.md` 46-47).
|
|
9
|
+
2. **Validate:** `cratis screenplay validate --executable --warnings-as-errors <root>`. Pass: exit 0 and no error.
|
|
10
|
+
It binds the model but does not run the renderer's admission.
|
|
11
|
+
3. **Admit:** `cratis render <root> --target cratis --name <App> --destination <dir> --check`.
|
|
12
|
+
It plans without writing; a refusal (for example `STAGE-ESM-005`, an optional event
|
|
13
|
+
property) lists every blocker at once. Fix and repeat until it reports no error diagnostic. Exit 6 on a
|
|
14
|
+
clean plan means only that changes are pending; nothing is published.
|
|
15
|
+
4. **Render:** the same command without `--check`. Publication succeeded when it exits 0 and the receipt shows
|
|
16
|
+
`refused: 0` and `recoveryPending: false`.
|
|
17
|
+
5. **Build:** `dotnet build <dir>/<App>.csproj` (Debug).
|
|
18
|
+
6. **Services:** `docker compose up -d` in `<dir>` (Chronicle and MongoDB).
|
|
19
|
+
7. **Backend:** `dotnet run --project <App>.csproj` in `<dir>`.
|
|
20
|
+
8. **Frontend:** in `<dir>`, `yarn` then `yarn dev` (npm: `npm install`, `npm run dev`); open the URL Vite
|
|
21
|
+
prints. It proxies API calls to the backend.
|
|
22
|
+
|
|
23
|
+
The rendered `README.md` repeats steps 6-8 for the pinned scaffold. Re-render and gap-fill rules:
|
|
24
|
+
`cratis-screenplay-render-and-gap-fill`.
|
|
@@ -18,7 +18,7 @@ Compiler syntax: `cheat-sheet.md`. Negative capability claims depend on the tool
|
|
|
18
18
|
14. AutoMap is on by default: same-named event properties fill read-model properties silently (scoped: case-insensitive, same type only; flat-bound: exact name, no type check, so a type mismatch invalidates the model). Use `no automap` for control.
|
|
19
19
|
15. `given readmodel` bypasses the projection; prove a projection with `given` events + `when append`/command + `then readmodel`/`then query`.
|
|
20
20
|
16. PLAY0285/0286/0287 are static spec checks: do not edit expectations blindly. An older bundled compiler can report PLAY0285 falsely on reaction cascades; confirm with the standalone tool before changing a `then`.
|
|
21
|
-
17. `null` in specs only for optional read-model properties (PLAY0350)
|
|
21
|
+
17. `null` in specs only for optional read-model properties (PLAY0350). A `when` command or `then` event states every property with a concrete value, optional ones too (PLAY0524); whether an optional detail is really a separate fact is a review question, not the fix for this code.
|
|
22
22
|
18. `then` events are exhaustive and ordered (use `then events in any order` for order only). From ESM v6 they include reaction cascades; after `when append` they list only what followed the append.
|
|
23
23
|
19. Under `command reads protected`, omitted `by` uses the command identifier; absent identifier is PLAY0782. Eligible reads bind v25; legacy reads and `concurrency` retain PLAY0271. Combining reads/concurrency under opt-in is PLAY0783.
|
|
24
24
|
20. Declare each event once, in its producing slice; renaming a persisted event needs `id "OldName"`; renaming a constraint discards its index.
|
|
@@ -70,3 +70,5 @@ Traps 39 to 44 are tool traps.
|
|
|
70
70
|
43. `modelRevision` is canonical semantic (line positions and descriptions do not change it; a file move only if it changes logical placement or application identity) and, without `identities.json`, changes with the root folder name; it is not comparable with a render's `semanticRevision`. Source identity for verdicts is the commit plus the digest from the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity").
|
|
71
71
|
44. `cratis render` neither builds nor tests; `--name` is required for plain source; `.cratis-render/` is control state and is never staged; rendered apps pin their own Arc and Chronicle versions (`[ProtectedDecision]` is available to gap-fill, not automatically emitted). `cratis` file mode versus folder mode (trap 6) and a stale `cratis` on `PATH` (`which -a cratis`) both silently change what a verdict means.
|
|
72
72
|
45. A reducer cannot be re-keyed: its instances follow the event-source id, so a query `by` another identity type warns PLAY0690 (`--warnaserror` fails it; editors only show it when the host supplies native findings). Aggregate by a payload value with a projection keyed on each `from`, or a join: projections [reducer identity](../../cratis-screenplay-projections/references/reducer-identity.md).
|
|
73
|
+
46. Enum members are lowercase identifiers (`hourly`, not `Hourly`; PLAY0009). A specification states every property of the command and events, optional ones too (PLAY0524). A read model with two `*Id` properties needs one keyed query, `query OrderById => Order optional` with `by orderId String` (PLAY0268 otherwise). A `require` message goes on the next indented line (trap 38). Screen list queries are `observable`.
|
|
74
|
+
47. Cratis events have no optional properties (STAGE-ESM-005), and `validate --executable` does not catch it: run `cratis render <folder> --target cratis --name <App> --destination <dir> --check` right after validate, since it runs the renderer's admission and writes nothing.
|
package/package/corpus/skills/cratis-screenplay-ui-composition/references/application-shell.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
|
+
- Default shell
|
|
5
6
|
- One complete shell
|
|
6
7
|
- Navigation regions: inherit, extend or override
|
|
7
8
|
- Toolbar buttons that invoke a State Change slice
|
|
@@ -20,6 +21,12 @@ Every construct here is authoring syntax. The executable model defers it (`PLAY0
|
|
|
20
21
|
tree, and none of it changes a backend. The Scene designer, the Stage runtime and Studio read the same lines, so the
|
|
21
22
|
Screenplay is the one place to write them.
|
|
22
23
|
|
|
24
|
+
## Default shell
|
|
25
|
+
|
|
26
|
+
Requires Stage 4.189.3 or later (the CLI that bundles it) for a rendered frontend to get a default application shell without a
|
|
27
|
+
`layout` or `ui profile`. Declare a `layout` and a `ui profile` only to customize that shell
|
|
28
|
+
(navigation, logo, templates, sample data), as below.
|
|
29
|
+
|
|
23
30
|
## One complete shell
|
|
24
31
|
|
|
25
32
|
```screenplay
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
|
+
- Probe before the first real render
|
|
5
6
|
- How a refusal arrives
|
|
6
7
|
- Event-reaction boundary
|
|
7
8
|
- Recovery, stored identity and baseline boundaries
|
|
@@ -57,6 +58,13 @@ Binding with the CLI's bundled compiler is a separate
|
|
|
57
58
|
prerequisite. The exhaustive construct table is `references/renderable-subset.md` in
|
|
58
59
|
`cratis-screenplay-toolchain`; run the real render before claiming anything is admitted.
|
|
59
60
|
|
|
61
|
+
## Probe before the first real render
|
|
62
|
+
|
|
63
|
+
`cratis screenplay validate --executable` binds the model but does not run Stage admission, so a
|
|
64
|
+
renderer refusal such as `STAGE-ESM-005` (Cratis events have no optional properties) passes it.
|
|
65
|
+
Run `cratis render <root> --target cratis --name <App> --destination <dir> --check` right after validate:
|
|
66
|
+
it runs the same admission, collects every refusal and writes nothing.
|
|
67
|
+
|
|
60
68
|
## How a refusal arrives
|
|
61
69
|
|
|
62
70
|
One blocking diagnostic fails the **whole** plan and nothing is published (exit 5).
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
5
|
- Scaffold
|
|
6
|
+
- Lists on screen
|
|
6
7
|
- Reducer layout for new applications
|
|
7
8
|
- What is managed
|
|
8
9
|
- `Customizations/` (unmanaged)
|
|
@@ -50,6 +51,13 @@ is off), but any override must be proven with a restore and build. The compose f
|
|
|
50
51
|
`35000`, keeps data in the named volumes `chronicle-data` and `chronicle-config`, and
|
|
51
52
|
`docker compose down --volumes` is the only thing that deletes them.
|
|
52
53
|
|
|
54
|
+
## Lists on screen
|
|
55
|
+
|
|
56
|
+
A `data <ReadModel>[] via query <Query>` list renders from either list-query mode, but
|
|
57
|
+
`observable` renders `Observe<T>()` and a first-result wait, while a snapshot renders a one-shot
|
|
58
|
+
`GetInstances<T>()`. Declare `query <Name> => observable <ReadModel>[]` for any list a person watches change.
|
|
59
|
+
Run `cratis render --check` first (`references/admission.md`) to catch refusals before a real render.
|
|
60
|
+
|
|
53
61
|
## Reducer layout for new applications
|
|
54
62
|
|
|
55
63
|
Requires Stage 4.128.0 for the Cratis C# self-reducing profile; older renderers emit
|