agentera 0.0.0 → 3.0.0-dev.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/README.md +6 -45
- package/bundle/.agentera-npx-bundle.json +4 -0
- package/bundle/references/adapters/cursor.md +213 -0
- package/bundle/references/adapters/opencode.md +530 -0
- package/bundle/references/adapters/package-manifest-interface-model.yaml +337 -0
- package/bundle/references/adapters/package-registry.yaml +247 -0
- package/bundle/references/adapters/package-surface-characterization.md +48 -0
- package/bundle/references/adapters/runtime-adapter-characterization.md +79 -0
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +200 -0
- package/bundle/references/adapters/runtime-adapter-registry.yaml +548 -0
- package/bundle/references/adapters/runtime-feature-parity.md +189 -0
- package/bundle/references/analysis/benchmark.md +267 -0
- package/bundle/references/analysis/startup-measurement-contract.yaml +424 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +288 -0
- package/bundle/references/cli/agent-ready-state-contract.yaml +950 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +233 -0
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +355 -0
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +278 -0
- package/bundle/references/cli/capability-instruction-contract.yaml +123 -0
- package/bundle/references/cli/capability-tool-classification.yaml +53 -0
- package/bundle/references/cli/routing-execution-vocabulary.yaml +281 -0
- package/bundle/references/cli/update-channels.yaml +120 -0
- package/bundle/references/cli/vocabulary-index.yaml +160 -0
- package/bundle/references/cli/vocabulary.md +562 -0
- package/bundle/references/meta/documentation-inventory.md +43 -0
- package/bundle/references/v1-section-mapping.md +47 -0
- package/bundle/registry.json +39 -0
- package/bundle/skills/agentera/.claude-plugin/plugin.json +27 -0
- package/bundle/skills/agentera/SKILL.md +470 -0
- package/bundle/skills/agentera/agents/dokumentera.toml +6 -0
- package/bundle/skills/agentera/agents/hej.toml +6 -0
- package/bundle/skills/agentera/agents/inspektera.toml +6 -0
- package/bundle/skills/agentera/agents/inspirera.toml +6 -0
- package/bundle/skills/agentera/agents/optimera.toml +6 -0
- package/bundle/skills/agentera/agents/orkestrera.toml +6 -0
- package/bundle/skills/agentera/agents/planera.toml +6 -0
- package/bundle/skills/agentera/agents/profilera.toml +6 -0
- package/bundle/skills/agentera/agents/realisera.toml +6 -0
- package/bundle/skills/agentera/agents/resonera.toml +6 -0
- package/bundle/skills/agentera/agents/visionera.toml +6 -0
- package/bundle/skills/agentera/agents/visualisera.toml +6 -0
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +428 -0
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/exit.yaml +35 -0
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +35 -0
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/validation.yaml +139 -0
- package/bundle/skills/agentera/capabilities/hej/instructions.md +331 -0
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +69 -0
- package/bundle/skills/agentera/capabilities/hej/schemas/exit.yaml +32 -0
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +58 -0
- package/bundle/skills/agentera/capabilities/hej/schemas/validation.yaml +55 -0
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +514 -0
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/inspektera/schemas/exit.yaml +36 -0
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +38 -0
- package/bundle/skills/agentera/capabilities/inspektera/schemas/validation.yaml +113 -0
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +280 -0
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/inspirera/schemas/exit.yaml +33 -0
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +34 -0
- package/bundle/skills/agentera/capabilities/inspirera/schemas/validation.yaml +58 -0
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +437 -0
- package/bundle/skills/agentera/capabilities/optimera/schemas/artifacts.yaml +69 -0
- package/bundle/skills/agentera/capabilities/optimera/schemas/exit.yaml +35 -0
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +39 -0
- package/bundle/skills/agentera/capabilities/optimera/schemas/validation.yaml +91 -0
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +433 -0
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +64 -0
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/exit.yaml +34 -0
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +42 -0
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +107 -0
- package/bundle/skills/agentera/capabilities/planera/instructions.md +368 -0
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +62 -0
- package/bundle/skills/agentera/capabilities/planera/schemas/exit.yaml +33 -0
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +34 -0
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +61 -0
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +419 -0
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +18 -0
- package/bundle/skills/agentera/capabilities/profilera/schemas/exit.yaml +34 -0
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +45 -0
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +57 -0
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +403 -0
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/realisera/schemas/exit.yaml +35 -0
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +39 -0
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +110 -0
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +329 -0
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +47 -0
- package/bundle/skills/agentera/capabilities/resonera/schemas/exit.yaml +35 -0
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +46 -0
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +77 -0
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +309 -0
- package/bundle/skills/agentera/capabilities/visionera/schemas/artifacts.yaml +57 -0
- package/bundle/skills/agentera/capabilities/visionera/schemas/exit.yaml +35 -0
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +41 -0
- package/bundle/skills/agentera/capabilities/visionera/schemas/validation.yaml +74 -0
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +400 -0
- package/bundle/skills/agentera/capabilities/visualisera/schemas/artifacts.yaml +44 -0
- package/bundle/skills/agentera/capabilities/visualisera/schemas/exit.yaml +34 -0
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +33 -0
- package/bundle/skills/agentera/capabilities/visualisera/schemas/validation.yaml +80 -0
- package/bundle/skills/agentera/capability_schema_contract.yaml +385 -0
- package/bundle/skills/agentera/protocol.yaml +463 -0
- package/bundle/skills/agentera/references/contract.md +1039 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +60 -0
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +461 -0
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +55 -0
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +402 -0
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +373 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +484 -0
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +399 -0
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +342 -0
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +325 -0
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +110 -0
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +262 -0
- package/bundle/skills/hej/.claude-plugin/plugin.json +6 -0
- package/bundle/skills/hej/SKILL.md +69 -0
- package/bundle/skills/hej/agents/hej.toml +11 -0
- package/bundle/skills/hej/agents/openai.yaml +8 -0
- package/dist/analytics/extractCorpus.js +1791 -0
- package/dist/analytics/extractCorpus.js.map +1 -0
- package/dist/analytics/usageStats.js +487 -0
- package/dist/analytics/usageStats.js.map +1 -0
- package/dist/bin/agentera.js +4 -0
- package/dist/bin/agentera.js.map +1 -0
- package/dist/cli/appContext.js +226 -0
- package/dist/cli/appContext.js.map +1 -0
- package/dist/cli/argvalidate.js +41 -0
- package/dist/cli/argvalidate.js.map +1 -0
- package/dist/cli/capabilityContext.js +2421 -0
- package/dist/cli/capabilityContext.js.map +1 -0
- package/dist/cli/commands/backfill.js +84 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/capability.js +44 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/compact.js +148 -0
- package/dist/cli/commands/compact.js.map +1 -0
- package/dist/cli/commands/doctor.js +180 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/lint.js +179 -0
- package/dist/cli/commands/lint.js.map +1 -0
- package/dist/cli/commands/prime.js +545 -0
- package/dist/cli/commands/prime.js.map +1 -0
- package/dist/cli/commands/query.js +346 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/report.js +210 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/schema.js +306 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/state.js +1012 -0
- package/dist/cli/commands/state.js.map +1 -0
- package/dist/cli/commands/upgrade.js +49 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/validate.js +519 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/verify.js +204 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/dispatch.js +962 -0
- package/dist/cli/dispatch.js.map +1 -0
- package/dist/cli/orientation.js +595 -0
- package/dist/cli/orientation.js.map +1 -0
- package/dist/cli/prime-blob.js +3 -0
- package/dist/cli/prime-blob.js.map +1 -0
- package/dist/cli/stateQuery.js +292 -0
- package/dist/cli/stateQuery.js.map +1 -0
- package/dist/cli/structured.js +18 -0
- package/dist/cli/structured.js.map +1 -0
- package/dist/core/difflib.js +274 -0
- package/dist/core/difflib.js.map +1 -0
- package/dist/core/git.js +43 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/paths.js +50 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/pyjson.js +101 -0
- package/dist/core/pyjson.js.map +1 -0
- package/dist/core/sourceRoot.js +72 -0
- package/dist/core/sourceRoot.js.map +1 -0
- package/dist/core/toml.js +11 -0
- package/dist/core/toml.js.map +1 -0
- package/dist/core/yaml.js +25 -0
- package/dist/core/yaml.js.map +1 -0
- package/dist/eval/evalSkills.js +258 -0
- package/dist/eval/evalSkills.js.map +1 -0
- package/dist/eval/semanticEval.js +148 -0
- package/dist/eval/semanticEval.js.map +1 -0
- package/dist/eval/semanticFixtures.js +227 -0
- package/dist/eval/semanticFixtures.js.map +1 -0
- package/dist/hooks/common.js +160 -0
- package/dist/hooks/common.js.map +1 -0
- package/dist/hooks/compaction.js +935 -0
- package/dist/hooks/compaction.js.map +1 -0
- package/dist/hooks/cursorPreToolUse.js +19 -0
- package/dist/hooks/cursorPreToolUse.js.map +1 -0
- package/dist/hooks/cursorSessionStart.js +71 -0
- package/dist/hooks/cursorSessionStart.js.map +1 -0
- package/dist/hooks/sessionStart.js +209 -0
- package/dist/hooks/sessionStart.js.map +1 -0
- package/dist/hooks/sessionStop.js +212 -0
- package/dist/hooks/sessionStop.js.map +1 -0
- package/dist/hooks/validateArtifact.js +933 -0
- package/dist/hooks/validateArtifact.js.map +1 -0
- package/dist/registries/artifactRegistry.js +206 -0
- package/dist/registries/artifactRegistry.js.map +1 -0
- package/dist/registries/capabilityContract.js +310 -0
- package/dist/registries/capabilityContract.js.map +1 -0
- package/dist/registries/packageRegistry.js +641 -0
- package/dist/registries/packageRegistry.js.map +1 -0
- package/dist/registries/runtimeAdapterRegistry.js +315 -0
- package/dist/registries/runtimeAdapterRegistry.js.map +1 -0
- package/dist/setup/codex.js +1052 -0
- package/dist/setup/codex.js.map +1 -0
- package/dist/setup/copilot.js +227 -0
- package/dist/setup/copilot.js.map +1 -0
- package/dist/setup/cursor.js +127 -0
- package/dist/setup/cursor.js.map +1 -0
- package/dist/setup/doctor.js +1269 -0
- package/dist/setup/doctor.js.map +1 -0
- package/dist/state/installRoot.js +279 -0
- package/dist/state/installRoot.js.map +1 -0
- package/dist/state/progressCommit.js +289 -0
- package/dist/state/progressCommit.js.map +1 -0
- package/dist/state/startupAnalysis.js +1953 -0
- package/dist/state/startupAnalysis.js.map +1 -0
- package/dist/upgrade/appModel.js +189 -0
- package/dist/upgrade/appModel.js.map +1 -0
- package/dist/upgrade/channels.js +197 -0
- package/dist/upgrade/channels.js.map +1 -0
- package/dist/upgrade/compatibility.js +197 -0
- package/dist/upgrade/compatibility.js.map +1 -0
- package/dist/upgrade/doctor.js +368 -0
- package/dist/upgrade/doctor.js.map +1 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +412 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -0
- package/dist/upgrade/upgradeCommands.js +40 -0
- package/dist/upgrade/upgradeCommands.js.map +1 -0
- package/dist/upgrade/upgradeOrchestrator.js +280 -0
- package/dist/upgrade/upgradeOrchestrator.js.map +1 -0
- package/dist/validate/appHomeContract.js +150 -0
- package/dist/validate/appHomeContract.js.map +1 -0
- package/dist/validate/capability.js +412 -0
- package/dist/validate/capability.js.map +1 -0
- package/dist/validate/crossCapability.js +145 -0
- package/dist/validate/crossCapability.js.map +1 -0
- package/dist/validate/lifecycleAdapters.js +772 -0
- package/dist/validate/lifecycleAdapters.js.map +1 -0
- package/dist/validate/selfAudit.js +107 -0
- package/dist/validate/selfAudit.js.map +1 -0
- package/package.json +28 -8
- package/LICENSE +0 -201
- package/bin/agentera.mjs +0 -50
- package/lib/exec.mjs +0 -116
- package/lib/resolve.mjs +0 -129
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# VISIONERA
|
|
2
|
+
|
|
3
|
+
**Visionary Inception: Strategic Imagination, Observation Nexus. Envision, Refine, Anchor**
|
|
4
|
+
|
|
5
|
+
The strategic steward of the canonical vision artifact, stored as `.agentera/vision.yaml` unless mapped otherwise. Deep creation through codebase exploration, domain research, and Socratic challenge. Ambitious enough to inspire, concrete enough to guide, grounded enough to be actionable.
|
|
6
|
+
|
|
7
|
+
Two modes: **create** (new projects) and **refine** (evolve existing visions).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Visual identity
|
|
12
|
+
|
|
13
|
+
Glyph: **⛥** (protocol ref: SG6). Used in the mandatory exit marker.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## State artifacts
|
|
18
|
+
|
|
19
|
+
One agent-facing file in `.agentera/` by default.
|
|
20
|
+
|
|
21
|
+
| Artifact | Purpose | Bootstrap |
|
|
22
|
+
|----------|---------|-----------|
|
|
23
|
+
| `VISION.md` | Canonical vision artifact. North star, direction, principles, personas, aspirations. An evergreen constitution. | Created via deep brainstorm session, written to `.agentera/vision.yaml` by default. |
|
|
24
|
+
|
|
25
|
+
Use `agentera describe --format json` and its `artifact_schemas` entry for `vision` to locate the active installed schema; do not search Agentera directories manually. Existing vision artifacts provide repository-local examples of the shape. Visionera adapts and expands them based on the conversation.
|
|
26
|
+
|
|
27
|
+
### Artifact path resolution
|
|
28
|
+
|
|
29
|
+
Before reading or writing any artifact, check if `.agentera/docs.yaml` exists. If it has an Artifact Mapping section, use the path specified for each canonical filename (VISION.md, etc.). If `.agentera/docs.yaml` doesn't exist or has no mapping for a given artifact, use the default layout: TODO.md, CHANGELOG.md, and DESIGN.md at the project root; canonical VISION.md at `.agentera/vision.yaml`; other agent-facing artifacts at `.agentera/*.yaml`. This applies to all artifact references in this capability, including cross-capability reads (.agentera/decisions.yaml, .agentera/health.yaml, .agentera/progress.yaml, TODO.md).
|
|
30
|
+
|
|
31
|
+
### Contract values
|
|
32
|
+
|
|
33
|
+
Contract values are inlined where referenced. Visual tokens from protocol: severity arrows VT5-VT8, trend arrows VT12-VT13, progress bar VT18, inline separator VT16 (·), list item VT15 (▸), section divider VT14, flow/target VT17 (→). Skill glyph SG6 for the exit marker. Exit signals EX1-EX4 for the exit marker. Confidence scale CS1-CS5 for decision profile consumption.
|
|
34
|
+
|
|
35
|
+
`references/contract.md` (at the v2 skill location `skills/agentera/references/contract.md`) remains available as a full-spec reference for ambiguous cases or cross-checking.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## vision.yaml shape
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
project_name: Project Name
|
|
43
|
+
north_star: The dream. Not what the software does, but what it makes possible.
|
|
44
|
+
personas:
|
|
45
|
+
- name: Persona name
|
|
46
|
+
description: Their day, frustrations, and workflow.
|
|
47
|
+
principles:
|
|
48
|
+
- name: Principle name
|
|
49
|
+
description: What it means and what it resists.
|
|
50
|
+
direction: Where this project is heading. Aspirational, not prescriptive.
|
|
51
|
+
identity:
|
|
52
|
+
personality: adjective · adjective · adjective
|
|
53
|
+
voice: How it communicates.
|
|
54
|
+
emotional_register: What it feels like to use.
|
|
55
|
+
naming: Convention or philosophy.
|
|
56
|
+
tension: The hardest tension in the vision.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Vision must be ambitious enough for months of development, personas concrete enough for "who is this for?" debates, direction clear enough to derive next steps, and identity vivid enough to guide decisions from error messages to module names. If DESIGN.md exists, Identity should cohere with the visual system.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Step 0: Detect mode
|
|
64
|
+
|
|
65
|
+
**If the vision artifact does NOT exist**: Proceed to **Create** mode (Step 1).
|
|
66
|
+
|
|
67
|
+
**If the vision artifact exists**: Present the mode choice.
|
|
68
|
+
|
|
69
|
+
Narration voice (riff, don't script):
|
|
70
|
+
|
|
71
|
+
- "You've already got a vision. Sharpen it or start over?" · "Found your vision. Refine what's there, or fresh start?"
|
|
72
|
+
|
|
73
|
+
Offer:
|
|
74
|
+
|
|
75
|
+
> **Refine**: Evolve the existing vision based on what you've learned. Reads the current vision, the codebase state, and recent progress to propose informed updates.
|
|
76
|
+
>
|
|
77
|
+
> **Replace**: Start fresh with a deep brainstorm. Archives the current vision and creates a new one from scratch.
|
|
78
|
+
|
|
79
|
+
If **Refine**, skip to Refine mode.
|
|
80
|
+
If **Replace**, archive the current vision artifact to `.agentera/archive/vision-{date}.yaml`, then proceed to Create mode.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Create mode
|
|
85
|
+
|
|
86
|
+
Step markers: display `── step N/5: verb` before each step.
|
|
87
|
+
Steps: explore, research, converse, audit, write.
|
|
88
|
+
|
|
89
|
+
### Step 1: Explore the codebase
|
|
90
|
+
|
|
91
|
+
If code exists, read deeply before asking questions. You arrive informed.
|
|
92
|
+
|
|
93
|
+
1. Map structure: directory layout, key modules, entry points
|
|
94
|
+
2. Read dependency manifests: stack, libraries, what choices reveal
|
|
95
|
+
3. Read README.md, CLAUDE.md, AGENTS.md if they exist
|
|
96
|
+
4. Read key source files to understand what the software does today
|
|
97
|
+
5. Read PROGRESS.md, TODO.md, DECISIONS.md for trajectory; use `agentera decisions --format json` for normal decision context and preserve returned `missing_fields`, `compacted`, `caveats`, and `satisfaction.review_needed` pressure instead of raw-reading missing historical decision context.
|
|
98
|
+
6. Read HEALTH.md for current quality
|
|
99
|
+
7. Read DESIGN.md for existing visual identity
|
|
100
|
+
8. **Decision profile**: read `$PROFILERA_PROFILE_DIR/PROFILE.md` (default: `$XDG_DATA_HOME/agentera/PROFILE.md`) directly per protocol confidence scale (CS1-CS5) conventions. If missing, proceed without persona grounding.
|
|
101
|
+
9. `git log --oneline -30` for recent story
|
|
102
|
+
|
|
103
|
+
Synthesize: "The project does X, built with Y, moving toward Z. Strongest patterns: A. Gaps: B."
|
|
104
|
+
|
|
105
|
+
Greenfield? Skip to Step 2.
|
|
106
|
+
|
|
107
|
+
### Step 2: Research the domain
|
|
108
|
+
|
|
109
|
+
Search for context grounding the vision in reality:
|
|
110
|
+
|
|
111
|
+
1. **What exists**: similar tools, competing approaches, adjacent projects
|
|
112
|
+
2. **State of the art**: recent developments, emerging patterns
|
|
113
|
+
3. **What's missing**: suite gaps this project could fill
|
|
114
|
+
4. **Who talks about it**: communities, forums, common frustrations
|
|
115
|
+
|
|
116
|
+
3-5 targeted searches. Synthesize: "The gap is X. The opportunity is Y."
|
|
117
|
+
|
|
118
|
+
### Step 3: The conversation
|
|
119
|
+
|
|
120
|
+
Engage the user. Ask one question at a time through the runtime question tool
|
|
121
|
+
(`AskUserQuestion`, always include `Done` option).
|
|
122
|
+
|
|
123
|
+
**Personality**: the sharp colleague, here to dream with you. Pushes past safe answers: "That's good, but what if it was more?"
|
|
124
|
+
|
|
125
|
+
Follow a narrative arc, not a checklist. Adapt, but cover:
|
|
126
|
+
|
|
127
|
+
1. **The dream**: "Based on what I see in the codebase [and the domain research], here's where I think this wants to go: [synthesis]. But I bet you're thinking bigger than that. What does this project make possible if it wildly succeeds?"
|
|
128
|
+
|
|
129
|
+
Push beyond utility: "It does X faster, but why does that matter? What can they do that they couldn't before?"
|
|
130
|
+
|
|
131
|
+
2. **The people**: "Who reaches for this? Not 'developers,' a specific person. Their Tuesday morning. The frustration that makes them think 'I need something better'?"
|
|
132
|
+
|
|
133
|
+
Challenge abstract personas: "'Data engineers': the one at a startup with 3 services, or the one at a bank with 3,000?"
|
|
134
|
+
|
|
135
|
+
3. **The principles**: "What principles should guide every decision? What do you optimize for when you can't have everything? What do you actively resist?"
|
|
136
|
+
|
|
137
|
+
If decision profile exists, propose principles from it: "Your profile says you value X over Y. Should that be a principle here?"
|
|
138
|
+
|
|
139
|
+
4. **The direction**: "Given all of that, where is this heading? Not features. Capabilities. What kind of tool does this become in a year? What would surprise you?"
|
|
140
|
+
|
|
141
|
+
5. **The identity**: "If this product were a person, bold and direct, or quiet and precise? How does it talk? How should it feel to use? What emotion does a successful interaction leave?" Also naming: "Convention, cultural reference, philosophy?"
|
|
142
|
+
|
|
143
|
+
If DESIGN.md exists: "Your visual system says X. Does the verbal identity match?"
|
|
144
|
+
|
|
145
|
+
6. **The tension**: "What's the hardest tension in this vision? Where do the principles conflict? What will you have to give up to get what matters most?"
|
|
146
|
+
|
|
147
|
+
This question often produces the most useful material for the vision document.
|
|
148
|
+
|
|
149
|
+
### Step 4: Pre-write self-audit
|
|
150
|
+
|
|
151
|
+
Pre-write self-audit: run `agentera lint --artifact <ARTIFACT> --text "<DRAFT>"` (or `--file <PATH>`; schema names such as `decisions` auto-resolve the artifact file when no input is given) on the draft entry to check verbosity overruns (per-artifact budget), abstraction creep (>=1 concrete anchor), and filler accumulation (banned patterns).
|
|
152
|
+
Max 3 revision attempts. Flag with [post-audit-flagged] if still failing.
|
|
153
|
+
|
|
154
|
+
Narration voice (riff, don't script):
|
|
155
|
+
|
|
156
|
+
- "Tightening this up..." · "Cutting the filler first..." · "One more pass..."
|
|
157
|
+
|
|
158
|
+
### Step 5: Write the vision artifact
|
|
159
|
+
|
|
160
|
+
Synthesize into an aspirational north star. **Tone**: evocative, not clinical. A rallying cry, not a requirements doc. **Structure**: follow template but adapt; add dimensions that emerged, omit sections that produced nothing interesting.
|
|
161
|
+
|
|
162
|
+
Output constraint: ≤20 words per principle.
|
|
163
|
+
|
|
164
|
+
Present the draft to the user. Get explicit approval before writing.
|
|
165
|
+
|
|
166
|
+
Artifact writing follows contract Section 24 (Artifact Writing Conventions): banned verbosity patterns, 25-word sentence cap, preferred vocabulary, and lead-with-conclusion structure.
|
|
167
|
+
|
|
168
|
+
**Exit marker**: emit `⛥ visionera · <status>` on its own line, followed by a one-sentence summary. For `flagged` (EX2), `stuck` (EX3), and `waiting` (EX4), add a `▸` (VT15) bullet below the summary identifying what needs resolution. The exit marker is mandatory on every invocation.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Refine mode
|
|
173
|
+
|
|
174
|
+
Step markers: display `── step N/5: verb` before each step.
|
|
175
|
+
Steps: read, research, propose, audit, update.
|
|
176
|
+
|
|
177
|
+
### Step 1: Read the current state
|
|
178
|
+
|
|
179
|
+
1. Read the current vision artifact
|
|
180
|
+
2. Read the codebase (same depth as Create Step 1)
|
|
181
|
+
3. Read PROGRESS.md for what's been built since the vision was created
|
|
182
|
+
4. Use `agentera decisions --format json` for what decisions have shifted thinking; carry compacted/missing-field caveats forward rather than reconstructing absent historical context.
|
|
183
|
+
5. Read HEALTH.md for what structural realities constrain the vision
|
|
184
|
+
6. Read TODO.md for what recurring problems suggest the vision needs adjustment
|
|
185
|
+
|
|
186
|
+
### Step 2: Research updates
|
|
187
|
+
|
|
188
|
+
Search for domain developments since the vision was written: new tools, community shifts, things the user might not have seen.
|
|
189
|
+
|
|
190
|
+
### Step 3: Propose changes
|
|
191
|
+
|
|
192
|
+
Present your assessment:
|
|
193
|
+
|
|
194
|
+
> Here's what's changed since the vision was written:
|
|
195
|
+
>
|
|
196
|
+
> - The project has built [A, B, C] (from PROGRESS.md)
|
|
197
|
+
> - Decision [X] shifted thinking about [Y] (from DECISIONS.md)
|
|
198
|
+
> - The domain has moved: [Z] (from research)
|
|
199
|
+
>
|
|
200
|
+
> I'd suggest updating:
|
|
201
|
+
>
|
|
202
|
+
> - [Section]: [what to change and why]
|
|
203
|
+
> - [Section]: [what to change and why]
|
|
204
|
+
>
|
|
205
|
+
> What resonates? What's off?
|
|
206
|
+
|
|
207
|
+
Brief conversation (2-4 exchanges) to refine proposed changes.
|
|
208
|
+
|
|
209
|
+
### Step 4: Pre-write self-audit
|
|
210
|
+
|
|
211
|
+
Pre-write self-audit: run `agentera lint --artifact <ARTIFACT> --text "<DRAFT>"` (or `--file <PATH>`; schema names such as `decisions` auto-resolve the artifact file when no input is given) on the draft entry to check verbosity overruns (per-artifact budget), abstraction creep (>=1 concrete anchor), and filler accumulation (banned patterns).
|
|
212
|
+
Max 3 revision attempts. Flag with [post-audit-flagged] if still failing.
|
|
213
|
+
|
|
214
|
+
Narration voice (riff, don't script):
|
|
215
|
+
|
|
216
|
+
- "Tightening this up..." · "Cutting the filler first..." · "One more pass..."
|
|
217
|
+
|
|
218
|
+
### Step 5: Update the vision artifact
|
|
219
|
+
|
|
220
|
+
Show the updated vision as a diff (what changed and why). Get explicit approval before writing.
|
|
221
|
+
|
|
222
|
+
Artifact writing follows contract Section 24 (Artifact Writing Conventions): banned verbosity patterns, 25-word sentence cap, preferred vocabulary, and lead-with-conclusion structure.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Safety rails
|
|
227
|
+
|
|
228
|
+
<critical>
|
|
229
|
+
- NEVER write the vision artifact without explicit user approval. Present drafts and get confirmation.
|
|
230
|
+
- NEVER modify the vision artifact during a realisera cycle. Vision changes happen in dedicated visionera sessions only.
|
|
231
|
+
- NEVER produce a clinical, requirements-style document. The vision should inspire, not specify. If it reads like a PRD, rewrite it.
|
|
232
|
+
- NEVER skip the codebase exploration (Step 1) when code exists. Arriving informed is the whole point.
|
|
233
|
+
- NEVER propose a vision so vague it can't guide autonomous development. "Make a great tool" is not a vision. "Make it possible for a solo developer to ship production-grade systems by letting an AI team handle the parts they'd otherwise skip" is.
|
|
234
|
+
- NEVER dismiss the user's ambition. If they dream big, help them articulate it. If they think small, push them bigger. But never cap their aspiration.
|
|
235
|
+
</critical>
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Exit signals
|
|
240
|
+
|
|
241
|
+
Report one of these statuses at workflow completion (protocol refs: EX1-EX4).
|
|
242
|
+
|
|
243
|
+
Format: `⛥ visionera · <status>` followed by a summary sentence.
|
|
244
|
+
For flagged, stuck, and waiting: add `▸` (VT15) bullet details below the summary.
|
|
245
|
+
|
|
246
|
+
- **complete** (EX1): The vision artifact was written (Create/Replace mode) or updated (Refine mode) with explicit user approval; the vision is ambitious, concrete, and structured to sustain autonomous development.
|
|
247
|
+
- **flagged** (EX2): The vision was produced but with weaknesses worth surfacing: the user settled for a less ambitious or less specific vision than the capability pushed for, key sections (personas, principles, direction) are thin due to limited conversation depth, or the vision has unresolved tensions with existing DECISIONS.md entries.
|
|
248
|
+
- **stuck** (EX3): Cannot write the vision artifact because the user declined to approve the draft and no actionable revision direction was given, or codebase exploration failed in a way that would make the vision unreliable (e.g., inaccessible repo).
|
|
249
|
+
- **waiting** (EX4): The user has not provided enough about the project's purpose or direction to write a meaningful vision, and the codebase (if any) does not provide sufficient signal to proceed without a conversation.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Cross-capability integration
|
|
254
|
+
|
|
255
|
+
Visionera is part of a twelve-capability suite. It is the strategic layer, the capability that defines where the project is going.
|
|
256
|
+
|
|
257
|
+
### Visionera produces what realisera consumes
|
|
258
|
+
|
|
259
|
+
The vision artifact is the north star that drives realisera's work selection every cycle. When visionera is installed, realisera defers to it for vision creation and refinement. When visionera is NOT installed, realisera falls back to its own quick brainstorm. Both paths produce the same `.agentera/vision.yaml` shape by default; the capabilities are interchangeable at the artifact level.
|
|
260
|
+
|
|
261
|
+
### Visionera is informed by resonera
|
|
262
|
+
|
|
263
|
+
DECISIONS.md entries provide context for vision refinement: what choices have been made and why. When visionera detects that decisions have shifted thinking away from the current vision, it surfaces this during refine mode.
|
|
264
|
+
|
|
265
|
+
### Visionera is informed by profilera
|
|
266
|
+
|
|
267
|
+
The decision profile calibrates the vision conversation: what patterns the user values, what principles they've established across projects, what they resist. High-confidence entries (CS1-CS2, 70+) become proposed principles in the vision.
|
|
268
|
+
|
|
269
|
+
### Visionera is informed by inspirera
|
|
270
|
+
|
|
271
|
+
When inspirera analysis has shifted thinking about the project's direction, visionera reads DECISIONS.md for these insights and incorporates them into vision refinement.
|
|
272
|
+
|
|
273
|
+
### Visionera is informed by inspektera
|
|
274
|
+
|
|
275
|
+
HEALTH.md tells visionera what structural realities constrain the vision. A project with D-grade architecture may need a vision adjustment, or the vision may confirm that the architecture needs to change.
|
|
276
|
+
|
|
277
|
+
### Visionera reads visualisera output
|
|
278
|
+
|
|
279
|
+
If DESIGN.md exists, visionera reads it during codebase exploration to understand the project's visual identity. The `identity` section in the vision artifact should be coherent with the visual system declared in DESIGN.md. Visionera reads DESIGN.md for context but never writes it; visualisera owns all DESIGN.md writes.
|
|
280
|
+
|
|
281
|
+
### Visionera reads dokumentera output
|
|
282
|
+
|
|
283
|
+
DOCS.md provides artifact path resolution for the canonical vision artifact. Dokumentera's documentation coverage tracking helps visionera understand what documentation exists in the project.
|
|
284
|
+
|
|
285
|
+
### Visionera feeds planera
|
|
286
|
+
|
|
287
|
+
When a new or refined vision changes the project's direction, planera can produce a plan to realign the codebase with the updated vision.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Getting started
|
|
292
|
+
|
|
293
|
+
### New project
|
|
294
|
+
|
|
295
|
+
1. ⛥ visionera: deep creation of the vision artifact through codebase exploration, domain research, and aspirational conversation
|
|
296
|
+
2. ≡ planera: plan the first features (if complex)
|
|
297
|
+
3. ⧉ realisera: start building
|
|
298
|
+
|
|
299
|
+
### Existing project without a vision
|
|
300
|
+
|
|
301
|
+
1. ⛥ visionera: reads the codebase, understands what exists, then pushes the user to articulate where it should go
|
|
302
|
+
|
|
303
|
+
### Vision refinement
|
|
304
|
+
|
|
305
|
+
1. ⛥ visionera: detects the existing vision artifact, offers refine mode, reads progress and decisions since last update, proposes informed changes
|
|
306
|
+
|
|
307
|
+
### Without visionera installed
|
|
308
|
+
|
|
309
|
+
Realisera's built-in quick brainstorm creates a workable vision artifact. Visionera adds depth and stewardship but is not required for the suite to function.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
ARTIFACTS:
|
|
2
|
+
1:
|
|
3
|
+
id: A1
|
|
4
|
+
artifact_id: vision
|
|
5
|
+
local_role: produces_and_consumes
|
|
6
|
+
description: >-
|
|
7
|
+
Visionera writes and refines project direction, principles, personas,
|
|
8
|
+
aspirations, and identity.
|
|
9
|
+
2:
|
|
10
|
+
id: A2
|
|
11
|
+
artifact_id: decisions
|
|
12
|
+
local_role: consumes
|
|
13
|
+
description: >-
|
|
14
|
+
Visionera reads this to detect shifted thinking during refine mode
|
|
15
|
+
and to surface unresolved tensions with the vision.
|
|
16
|
+
3:
|
|
17
|
+
id: A3
|
|
18
|
+
artifact_id: progress
|
|
19
|
+
local_role: consumes
|
|
20
|
+
description: >-
|
|
21
|
+
Visionera reads this during refine mode to understand what has been
|
|
22
|
+
built since the vision was last updated.
|
|
23
|
+
4:
|
|
24
|
+
id: A4
|
|
25
|
+
artifact_id: health
|
|
26
|
+
local_role: consumes
|
|
27
|
+
description: >-
|
|
28
|
+
Visionera reads this to understand structural realities that
|
|
29
|
+
constrain or inform the vision.
|
|
30
|
+
5:
|
|
31
|
+
id: A5
|
|
32
|
+
artifact_id: todo
|
|
33
|
+
local_role: consumes
|
|
34
|
+
description: >-
|
|
35
|
+
Visionera reads this during refine mode to detect recurring problems
|
|
36
|
+
that suggest the vision needs adjustment.
|
|
37
|
+
6:
|
|
38
|
+
id: A6
|
|
39
|
+
artifact_id: design
|
|
40
|
+
local_role: consumes
|
|
41
|
+
description: >-
|
|
42
|
+
Visionera reads this during codebase exploration to ensure the
|
|
43
|
+
Identity section in project direction coheres with the visual system.
|
|
44
|
+
7:
|
|
45
|
+
id: A7
|
|
46
|
+
artifact_id: docs
|
|
47
|
+
local_role: consumes
|
|
48
|
+
description: >-
|
|
49
|
+
Visionera reads this first to resolve project-local artifact mappings
|
|
50
|
+
before accessing other artifacts.
|
|
51
|
+
8:
|
|
52
|
+
id: A8
|
|
53
|
+
artifact_id: profile
|
|
54
|
+
local_role: consumes
|
|
55
|
+
description: >-
|
|
56
|
+
Visionera reads this to calibrate the vision conversation: high-confidence
|
|
57
|
+
entries become proposed principles.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
EXIT_CONDITIONS:
|
|
2
|
+
1:
|
|
3
|
+
id: E1
|
|
4
|
+
condition: complete
|
|
5
|
+
description: >-
|
|
6
|
+
VISION.md was written (Create/Replace mode) or updated (Refine mode)
|
|
7
|
+
with explicit user approval. The vision is ambitious, concrete, and
|
|
8
|
+
structured to sustain autonomous development.
|
|
9
|
+
exit_signal: complete
|
|
10
|
+
2:
|
|
11
|
+
id: E2
|
|
12
|
+
condition: flagged
|
|
13
|
+
description: >-
|
|
14
|
+
The vision was produced but with weaknesses worth surfacing: the user
|
|
15
|
+
settled for a less ambitious or less specific vision than pushed for,
|
|
16
|
+
key sections (personas, principles, direction) are thin due to limited
|
|
17
|
+
conversation depth, or the vision has unresolved tensions with existing
|
|
18
|
+
DECISIONS.md entries.
|
|
19
|
+
exit_signal: flagged
|
|
20
|
+
3:
|
|
21
|
+
id: E3
|
|
22
|
+
condition: stuck
|
|
23
|
+
description: >-
|
|
24
|
+
Cannot write VISION.md because the user declined to approve the draft
|
|
25
|
+
and no actionable revision direction was given, or codebase exploration
|
|
26
|
+
failed in a way that would make the vision unreliable.
|
|
27
|
+
exit_signal: stuck
|
|
28
|
+
4:
|
|
29
|
+
id: E4
|
|
30
|
+
condition: waiting
|
|
31
|
+
description: >-
|
|
32
|
+
The user has not provided enough about the project's purpose or
|
|
33
|
+
direction to write a meaningful vision, and the codebase (if any)
|
|
34
|
+
does not provide sufficient signal to proceed without a conversation.
|
|
35
|
+
exit_signal: waiting
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
TRIGGERS:
|
|
2
|
+
1:
|
|
3
|
+
id: T1
|
|
4
|
+
description: >-
|
|
5
|
+
Direct invocation by name or slash command. Matches when the user
|
|
6
|
+
explicitly requests visionera.
|
|
7
|
+
priority: high
|
|
8
|
+
patterns:
|
|
9
|
+
- "visionera"
|
|
10
|
+
- "/visionera"
|
|
11
|
+
2:
|
|
12
|
+
id: T2
|
|
13
|
+
description: >-
|
|
14
|
+
Vision creation requests. Matches when the user wants to define or
|
|
15
|
+
create a project vision or north star direction.
|
|
16
|
+
priority: medium
|
|
17
|
+
patterns:
|
|
18
|
+
- "create a vision"
|
|
19
|
+
- "write VISION.md"
|
|
20
|
+
- "define the direction"
|
|
21
|
+
- "set the north star"
|
|
22
|
+
- "dream bigger"
|
|
23
|
+
3:
|
|
24
|
+
id: T3
|
|
25
|
+
description: >-
|
|
26
|
+
Vision refinement requests. Matches when the user wants to evolve
|
|
27
|
+
or rethink an existing vision.
|
|
28
|
+
priority: medium
|
|
29
|
+
patterns:
|
|
30
|
+
- "rethink the vision"
|
|
31
|
+
- "refine the vision"
|
|
32
|
+
- "update VISION.md"
|
|
33
|
+
4:
|
|
34
|
+
id: T4
|
|
35
|
+
description: >-
|
|
36
|
+
Project bootstrap. Matches when the user wants to bootstrap a new
|
|
37
|
+
project identity or define what a project should become.
|
|
38
|
+
priority: medium
|
|
39
|
+
patterns:
|
|
40
|
+
- "bootstrap the project"
|
|
41
|
+
- "what should this project become"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
VALIDATION:
|
|
2
|
+
1:
|
|
3
|
+
id: V1
|
|
4
|
+
rule: user_approval_required
|
|
5
|
+
description: >-
|
|
6
|
+
VISION.md MUST NOT be written or modified without explicit user
|
|
7
|
+
approval. Present drafts and get confirmation before writing.
|
|
8
|
+
This applies to both Create and Refine modes.
|
|
9
|
+
severity: critical
|
|
10
|
+
checks:
|
|
11
|
+
- "Draft presented to user before write"
|
|
12
|
+
- "Explicit approval received"
|
|
13
|
+
2:
|
|
14
|
+
id: V2
|
|
15
|
+
rule: no_realisera_modification
|
|
16
|
+
description: >-
|
|
17
|
+
VISION.md MUST NOT be modified during a realisera execution cycle.
|
|
18
|
+
Vision changes happen only in dedicated visionera sessions. This
|
|
19
|
+
prevents vision drift during autonomous development.
|
|
20
|
+
severity: critical
|
|
21
|
+
checks:
|
|
22
|
+
- "VISION.md not written during realisera cycle"
|
|
23
|
+
3:
|
|
24
|
+
id: V3
|
|
25
|
+
rule: inspirational_tone
|
|
26
|
+
description: >-
|
|
27
|
+
The vision document MUST be evocative, not clinical. If it reads
|
|
28
|
+
like a PRD or requirements doc, it must be rewritten. The vision
|
|
29
|
+
should inspire and guide, not specify.
|
|
30
|
+
severity: warning
|
|
31
|
+
checks:
|
|
32
|
+
- "VISION.md is aspirational, not prescriptive"
|
|
33
|
+
4:
|
|
34
|
+
id: V4
|
|
35
|
+
rule: codebase_exploration_required
|
|
36
|
+
description: >-
|
|
37
|
+
When code exists, the codebase exploration step (Step 1) MUST NOT
|
|
38
|
+
be skipped. Arriving informed distinguishes visionera from a
|
|
39
|
+
blank-slate interview.
|
|
40
|
+
severity: critical
|
|
41
|
+
checks:
|
|
42
|
+
- "Codebase explored when code exists"
|
|
43
|
+
5:
|
|
44
|
+
id: V5
|
|
45
|
+
rule: actionable_vision
|
|
46
|
+
description: >-
|
|
47
|
+
The vision MUST be concrete enough to guide autonomous development.
|
|
48
|
+
"Make a great tool" is not a vision. It must include specific
|
|
49
|
+
direction, principles, and enough detail for planera to derive tasks.
|
|
50
|
+
severity: critical
|
|
51
|
+
checks:
|
|
52
|
+
- "Vision contains specific direction"
|
|
53
|
+
- "Vision contains actionable principles"
|
|
54
|
+
6:
|
|
55
|
+
id: V6
|
|
56
|
+
rule: principle_brevity
|
|
57
|
+
description: >-
|
|
58
|
+
Each principle in VISION.md MUST be ≤20 words. Principles are
|
|
59
|
+
decision guides, not essays. Brevity forces clarity.
|
|
60
|
+
severity: warning
|
|
61
|
+
checks:
|
|
62
|
+
- "Each principle ≤ 20 words"
|
|
63
|
+
7:
|
|
64
|
+
id: V7
|
|
65
|
+
rule: exit_marker_required
|
|
66
|
+
description: >-
|
|
67
|
+
Every visionera invocation MUST emit an exit marker using the
|
|
68
|
+
canonical glyph ⛥ (SG6) in the format ⛥ visionera · <status>
|
|
69
|
+
where status is one of EX1-EX4.
|
|
70
|
+
severity: critical
|
|
71
|
+
checks:
|
|
72
|
+
- "Exit marker present"
|
|
73
|
+
- "Exit marker uses glyph ⛥ (SG6)"
|
|
74
|
+
- "Exit marker status is one of complete, flagged, stuck, waiting"
|