agentera 3.0.0-dev.4 → 3.0.0-dev.5
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/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/references/cli/agent-ready-state-contract.yaml +5 -5
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +1 -1
- package/bundle/references/cli/capability-instruction-contract.yaml +98 -57
- package/bundle/references/cli/routing-execution-vocabulary.yaml +6 -6
- package/bundle/references/cli/update-channels.yaml +17 -2
- package/bundle/references/cli/vocabulary-index.yaml +3 -3
- package/bundle/references/cli/vocabulary.md +22 -16
- package/bundle/registry.json +1 -1
- package/bundle/skills/agentera/SKILL.md +38 -21
- package/bundle/skills/agentera/agents/dokumentera.toml +1 -1
- package/bundle/skills/agentera/agents/hej.toml +1 -1
- package/bundle/skills/agentera/agents/inspektera.toml +1 -1
- package/bundle/skills/agentera/agents/inspirera.toml +1 -1
- package/bundle/skills/agentera/agents/optimera.toml +1 -1
- package/bundle/skills/agentera/agents/orkestrera.toml +1 -1
- package/bundle/skills/agentera/agents/planera.toml +1 -1
- package/bundle/skills/agentera/agents/profilera.toml +1 -1
- package/bundle/skills/agentera/agents/realisera.toml +1 -1
- package/bundle/skills/agentera/agents/resonera.toml +1 -1
- package/bundle/skills/agentera/agents/visionera.toml +1 -1
- package/bundle/skills/agentera/agents/visualisera.toml +1 -1
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +26 -13
- package/bundle/skills/agentera/capability_schema_contract.yaml +33 -14
- package/bundle/skills/agentera/references/contract.md +2 -2
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +1 -1
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +15 -36
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +14 -0
- package/bundle/skills/hej/SKILL.md +1 -1
- package/dist/capabilities/dokumentera/instructions.js +6 -0
- package/dist/capabilities/dokumentera/instructions.js.map +1 -0
- package/dist/capabilities/hej/instructions.js +6 -0
- package/dist/capabilities/hej/instructions.js.map +1 -0
- package/dist/capabilities/index.js +38 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/inspektera/instructions.js +6 -0
- package/dist/capabilities/inspektera/instructions.js.map +1 -0
- package/dist/capabilities/inspirera/instructions.js +6 -0
- package/dist/capabilities/inspirera/instructions.js.map +1 -0
- package/dist/capabilities/optimera/instructions.js +6 -0
- package/dist/capabilities/optimera/instructions.js.map +1 -0
- package/dist/capabilities/orkestrera/instructions.js +6 -0
- package/dist/capabilities/orkestrera/instructions.js.map +1 -0
- package/dist/capabilities/planera/instructions.js +6 -0
- package/dist/capabilities/planera/instructions.js.map +1 -0
- package/dist/capabilities/profilera/instructions.js +6 -0
- package/dist/capabilities/profilera/instructions.js.map +1 -0
- package/dist/capabilities/realisera/instructions.js +6 -0
- package/dist/capabilities/realisera/instructions.js.map +1 -0
- package/dist/capabilities/resonera/instructions.js +6 -0
- package/dist/capabilities/resonera/instructions.js.map +1 -0
- package/dist/capabilities/visionera/instructions.js +6 -0
- package/dist/capabilities/visionera/instructions.js.map +1 -0
- package/dist/capabilities/visualisera/instructions.js +6 -0
- package/dist/capabilities/visualisera/instructions.js.map +1 -0
- package/dist/cli/capabilityContext.js +92 -26
- package/dist/cli/capabilityContext.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -8
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/doctor.js +14 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/state.js +22 -11
- package/dist/cli/commands/state.js.map +1 -1
- package/dist/cli/commands/validate.js +12 -2
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/dispatch.js +470 -172
- package/dist/cli/dispatch.js.map +1 -1
- package/dist/cli/errors.js +53 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/help.js +1 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/orientation.js +9 -6
- package/dist/cli/orientation.js.map +1 -1
- package/dist/cli/stateQuery.js +7 -0
- package/dist/cli/stateQuery.js.map +1 -1
- package/dist/cli/todoMarkdown.js +33 -0
- package/dist/cli/todoMarkdown.js.map +1 -0
- package/dist/hooks/common.js +0 -2
- package/dist/hooks/common.js.map +1 -1
- package/dist/hooks/validateArtifact.js +10 -8
- package/dist/hooks/validateArtifact.js.map +1 -1
- package/dist/registries/capabilityContract.js +12 -11
- package/dist/registries/capabilityContract.js.map +1 -1
- package/dist/registries/evaluatorHandoffContract.js +171 -0
- package/dist/registries/evaluatorHandoffContract.js.map +1 -0
- package/dist/setup/codex.js +146 -5
- package/dist/setup/codex.js.map +1 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +1 -1
- package/dist/upgrade/nextMajorDoctor.js +121 -0
- package/dist/upgrade/nextMajorDoctor.js.map +1 -0
- package/dist/upgrade/runtimeMigration.js +19 -3
- package/dist/upgrade/runtimeMigration.js.map +1 -1
- package/dist/upgrade/versionResolution.js +4 -4
- package/dist/upgrade/versionResolution.js.map +1 -1
- package/dist/validate/appHomeContract.js +1 -1
- package/dist/validate/appHomeContract.js.map +1 -1
- package/dist/validate/capability.js +11 -3
- package/dist/validate/capability.js.map +1 -1
- package/package.json +3 -3
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
|
@@ -282,10 +282,10 @@ structured_output:
|
|
|
282
282
|
contract can summarize planning levels, step markers, CLI-first
|
|
283
283
|
orientation, raw plan artifact boundaries, full-plan review/self-audit
|
|
284
284
|
requirements, handoff expectations, and the Planera prose authority
|
|
285
|
-
boundary without reading `planera/instructions.
|
|
286
|
-
not introduce `agentera planera`, new top-level
|
|
287
|
-
capability-name aliases; `agentera schema` owns
|
|
288
|
-
introspection rather than a capability workflow payload.
|
|
285
|
+
boundary without reading `packages/cli/src/capabilities/planera/instructions.ts`
|
|
286
|
+
at runtime. It must not introduce `agentera planera`, new top-level
|
|
287
|
+
commands, or hidden capability-name aliases; `agentera schema` owns
|
|
288
|
+
runtime/schema introspection rather than a capability workflow payload.
|
|
289
289
|
orchestration_context_semantics: >-
|
|
290
290
|
`agentera prime --context orkestrera --format json` may include
|
|
291
291
|
orchestration_context with dependency-ready tasks, blocked task reasons,
|
|
@@ -465,7 +465,7 @@ evidence_context_target_contract:
|
|
|
465
465
|
verified_field: header.status=complete
|
|
466
466
|
- reason: Inspektera prose and schemas are validated directly; complete evidence_context covers normal evaluation startup without raw plan/progress/docs/health/TODO/decisions reads.
|
|
467
467
|
paths:
|
|
468
|
-
-
|
|
468
|
+
- packages/cli/src/capabilities/inspektera/instructions.ts
|
|
469
469
|
- skills/agentera/capabilities/inspektera/schemas/artifacts.yaml
|
|
470
470
|
- skills/agentera/capabilities/inspektera/schemas/validation.yaml
|
|
471
471
|
raw_artifact_reads_required_for_startup: false
|
|
@@ -194,7 +194,7 @@ focused_scan:
|
|
|
194
194
|
- (retired maintainer measurement tool)
|
|
195
195
|
- skills/agentera/SKILL.md
|
|
196
196
|
- skills/agentera/capabilities/hej/schemas/triggers.yaml
|
|
197
|
-
-
|
|
197
|
+
- packages/cli/src/capabilities/resonera/instructions.ts
|
|
198
198
|
- tests/test_cross_capability.py
|
|
199
199
|
- tests/test_resonera_capability.py
|
|
200
200
|
- tests/test_runtime_adapters.py
|
|
@@ -3,9 +3,10 @@ status: active_authority
|
|
|
3
3
|
decision: 57
|
|
4
4
|
purpose: >-
|
|
5
5
|
Define the Decision 57 capability instruction-file contract: the canonical
|
|
6
|
-
`instructions.
|
|
7
|
-
discoverability,
|
|
8
|
-
|
|
6
|
+
`instructions.ts` module path, implemented CLI/schema first-invocation read
|
|
7
|
+
discoverability, the `prime_context` runtime-enforcement boundary, and
|
|
8
|
+
retirement of the historical `full`/`compact_startup`/`skip` values
|
|
9
|
+
superseded by Decision 65.
|
|
9
10
|
sources:
|
|
10
11
|
decision: .agentera/decisions.yaml#decision-57
|
|
11
12
|
prose:
|
|
@@ -13,91 +14,87 @@ sources:
|
|
|
13
14
|
- README.md#development
|
|
14
15
|
scope:
|
|
15
16
|
includes:
|
|
16
|
-
- Documentation authority for the implemented capability instruction
|
|
17
|
+
- Documentation authority for the implemented capability instruction module path.
|
|
17
18
|
- CLI/schema discoverability for first capability invocation startup-read metadata.
|
|
18
|
-
-
|
|
19
|
-
- Current canonical references to existing `instructions.
|
|
19
|
+
- The single `prime_context` first-invocation shape enforced by the runtime.
|
|
20
|
+
- Current canonical references to existing `instructions.ts` modules.
|
|
20
21
|
- Explicit separation from runtime behavior work.
|
|
21
22
|
excludes:
|
|
22
23
|
- Implementing first-invocation read behavior.
|
|
23
24
|
- Marking Decision 57 satisfied or editing protected vision/objective/profile/installed-app state.
|
|
24
25
|
current_state:
|
|
25
26
|
canonical_instruction_file:
|
|
26
|
-
path:
|
|
27
|
+
path: packages/cli/src/capabilities/<name>/instructions.ts
|
|
27
28
|
status: current_canonical_implemented
|
|
28
29
|
definition: >-
|
|
29
|
-
The
|
|
30
|
+
The TypeScript module that exports the capability's behavioral
|
|
31
|
+
instructions as a default-exported string constant. The runtime loads
|
|
32
|
+
the compiled .js path and serves the prose through the slim
|
|
33
|
+
`capability_context` capsule's `prose` field.
|
|
30
34
|
legacy_instruction_file:
|
|
35
|
+
path: skills/agentera/capabilities/<name>/instructions.md
|
|
36
|
+
status: historical_or_compatibility_evidence_only
|
|
37
|
+
definition: >-
|
|
38
|
+
The pre-D65 Markdown instruction filename. It may survive only in
|
|
39
|
+
archived history, compatibility fixtures, benchmark evidence, or
|
|
40
|
+
explicit migration documentation; real capability directories do not
|
|
41
|
+
use it as canonical.
|
|
42
|
+
legacy_prose_file:
|
|
31
43
|
path: skills/agentera/capabilities/<name>/prose.md
|
|
32
44
|
status: historical_or_compatibility_evidence_only
|
|
33
45
|
definition: >-
|
|
34
|
-
The
|
|
35
|
-
history, compatibility fixtures, benchmark evidence, or
|
|
36
|
-
documentation; real capability directories do not
|
|
46
|
+
The pre-D57 capability instruction filename. It may survive only in
|
|
47
|
+
archived history, compatibility fixtures, benchmark evidence, or
|
|
48
|
+
explicit migration documentation; real capability directories do not
|
|
49
|
+
use it as canonical.
|
|
37
50
|
validator_requirement:
|
|
38
|
-
current_required_path: instructions.
|
|
39
|
-
future_required_path: instructions.
|
|
51
|
+
current_required_path: packages/cli/src/capabilities/<name>/instructions.ts
|
|
52
|
+
future_required_path: packages/cli/src/capabilities/<name>/instructions.ts
|
|
40
53
|
status: current_requirement_enforced
|
|
41
54
|
cli_metadata:
|
|
42
55
|
field: first_invocation_read
|
|
43
56
|
status: emitted_in_prime_capability_context
|
|
44
57
|
current_behavior: >-
|
|
45
58
|
`agentera prime --context <name> --format json` emits
|
|
46
|
-
`capability_context` metadata including `first_invocation_read`
|
|
47
|
-
|
|
59
|
+
`capability_context` metadata including `first_invocation_read`
|
|
60
|
+
(value: `prime_context`, runtime_enforcement: true) and the full prose
|
|
61
|
+
in the `prose` field for supported capabilities. Historical
|
|
62
|
+
`hej --capability-context` is removed in 3.0.
|
|
48
63
|
first_invocation_read:
|
|
49
|
-
field_status:
|
|
64
|
+
field_status: runtime_enforced
|
|
50
65
|
definition: >-
|
|
51
|
-
Capability metadata declaring what instruction content an agent must
|
|
52
|
-
the first invocation of that capability in a session.
|
|
66
|
+
Capability metadata declaring what instruction content an agent must
|
|
67
|
+
read on the first invocation of that capability in a session. Decision
|
|
68
|
+
65 collapses the legacy `full`/`compact_startup` distinction into a
|
|
69
|
+
single `prime_context` value because the CLI now owns the prose and
|
|
70
|
+
the runtime can mechanically shell out to the prime command.
|
|
53
71
|
allowed_values:
|
|
54
|
-
|
|
55
|
-
meaning: >-
|
|
56
|
-
The first capability invocation must read `instructions.md` in full before
|
|
57
|
-
executing capability-specific work.
|
|
58
|
-
obligation: full_instruction_file_read_required
|
|
59
|
-
compact_startup:
|
|
60
|
-
meaning: >-
|
|
61
|
-
A declared compact startup contract may satisfy initial orientation without
|
|
62
|
-
reading the full instruction file first.
|
|
63
|
-
obligation: compact_contract_must_name_covered_guidance_and_escalation_rules
|
|
64
|
-
skip:
|
|
72
|
+
prime_context:
|
|
65
73
|
meaning: >-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
default_rule:
|
|
74
|
+
The first capability invocation must shell out to
|
|
75
|
+
`agentera prime --context <name> --format json` and read the
|
|
76
|
+
returned `prose` field (the full Markdown body) before executing
|
|
77
|
+
capability-specific work.
|
|
78
|
+
obligation: shell out to agentera prime --context <name> --format json
|
|
79
|
+
default_rule: prime_context
|
|
72
80
|
full_read_obligation: >-
|
|
73
|
-
On initial capability invocation,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
compact_startup_exception:
|
|
77
|
-
status: implemented_for_planera_compact_startup_discoverability
|
|
78
|
-
allowed_when:
|
|
79
|
-
- A machine-readable startup contract is available through supported state access.
|
|
80
|
-
- The compact contract states which instruction topics it covers.
|
|
81
|
-
- The compact contract states when the agent must escalate to a full instruction-file read.
|
|
82
|
-
- The compact contract preserves unsupported-command and raw-artifact-read boundaries.
|
|
83
|
-
not_allowed_when:
|
|
84
|
-
- The agent is editing the capability's own instructions or schemas.
|
|
85
|
-
- The compact contract is missing, incomplete, stale, or contradictory.
|
|
86
|
-
- The requested work touches behavior not covered by the compact contract.
|
|
87
|
-
- Safety rails, validation, exit semantics, or cross-capability boundaries are ambiguous.
|
|
81
|
+
On initial capability invocation, shell out to
|
|
82
|
+
`agentera prime --context <name> --format json` and read the
|
|
83
|
+
`capability_context.prose` field in full.
|
|
88
84
|
implementation_state:
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
instructions_ts_modules: implemented
|
|
86
|
+
validators_require_instructions_ts: true
|
|
91
87
|
first_invocation_read_cli_metadata: true
|
|
92
88
|
first_invocation_read_schema_metadata: true
|
|
93
|
-
runtime_first_invocation_behavior:
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
runtime_first_invocation_behavior: true
|
|
90
|
+
descriptors_rewritten_to_prime_command: true
|
|
91
|
+
package_metadata_rewritten_to_prime_command: true
|
|
96
92
|
compatibility_preservation:
|
|
97
93
|
preserve_legacy_references_only_when_classified:
|
|
98
|
-
- skills/agentera/capabilities/*/instructions.md paths
|
|
94
|
+
- skills/agentera/capabilities/*/instructions.md paths (historical)
|
|
95
|
+
- packages/cli/src/capabilities/*/instructions.ts paths (current canonical)
|
|
99
96
|
- skills/agentera/capability_schema_contract.yaml directory requirements
|
|
100
|
-
- runtime descriptors and generated agent guidance that point to `instructions.md`
|
|
97
|
+
- runtime descriptors and generated agent guidance that point to `instructions.md` (retired)
|
|
101
98
|
- archived v1/v2 migration records and progress evidence
|
|
102
99
|
- compatibility fixtures and tests that intentionally preserve old behavior evidence
|
|
103
100
|
- README, AGENTS, and vocabulary references that explicitly describe the current canonical state
|
|
@@ -116,6 +113,50 @@ surface_inventory:
|
|
|
116
113
|
capability_schema_contract: current_canonical_validator_reference
|
|
117
114
|
runtime_descriptors: current_canonical_instructions_md_pointers
|
|
118
115
|
capability_instruction_files: current_canonical_instruction_files
|
|
116
|
+
evaluator_handoff:
|
|
117
|
+
status: implemented
|
|
118
|
+
purpose: >-
|
|
119
|
+
Define the inspektera evaluation report schema and citation requirements
|
|
120
|
+
for orkestrera Step 3 Surface 2 delegations and post-plan health checks.
|
|
121
|
+
report_schema_version: agentera.inspekteraEvaluationReport.v1
|
|
122
|
+
row_schema:
|
|
123
|
+
required_fields:
|
|
124
|
+
- criterion
|
|
125
|
+
- status
|
|
126
|
+
- evidence
|
|
127
|
+
status_values:
|
|
128
|
+
- PASS
|
|
129
|
+
- WARN
|
|
130
|
+
- FAIL
|
|
131
|
+
citation_required_for:
|
|
132
|
+
- WARN
|
|
133
|
+
- FAIL
|
|
134
|
+
citation_formats:
|
|
135
|
+
file_line:
|
|
136
|
+
pattern: "^[^:\\s]+:\\d+$"
|
|
137
|
+
description: Relative repo path with 1-based line number, e.g. TODO.md:15
|
|
138
|
+
not_applicable:
|
|
139
|
+
prefix: "not-applicable:"
|
|
140
|
+
min_reason_length: 8
|
|
141
|
+
description: >-
|
|
142
|
+
Use when no file anchor exists; prefix with not-applicable: and give a
|
|
143
|
+
concrete reason (at least 8 characters after the prefix).
|
|
144
|
+
warn_verify_command:
|
|
145
|
+
required_when: file_line_citation
|
|
146
|
+
allowed_prefixes:
|
|
147
|
+
- grep
|
|
148
|
+
- git show
|
|
149
|
+
description: >-
|
|
150
|
+
WARN rows with a file:line citation MUST include verify_command with the
|
|
151
|
+
exact grep or git show invocation that reproduces the evidence at the
|
|
152
|
+
cited line.
|
|
153
|
+
orchestration_context_fields:
|
|
154
|
+
output_requirements:
|
|
155
|
+
citation_required_for:
|
|
156
|
+
- WARN
|
|
157
|
+
- FAIL
|
|
158
|
+
warn_verify_command_required: true
|
|
159
|
+
schema_authority: references/cli/capability-instruction-contract.yaml#evaluator_handoff
|
|
119
160
|
docs_delegation:
|
|
120
161
|
document: references/cli/vocabulary.md
|
|
121
162
|
required_anchor: Capability instruction contract
|
|
@@ -171,9 +171,9 @@ focused_scan:
|
|
|
171
171
|
- (retired maintainer measurement tool)
|
|
172
172
|
- skills/agentera/SKILL.md
|
|
173
173
|
- skills/agentera/references/contract.md
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
174
|
+
- packages/cli/src/capabilities/realisera/instructions.ts
|
|
175
|
+
- packages/cli/src/capabilities/optimera/instructions.ts
|
|
176
|
+
- packages/cli/src/capabilities/orkestrera/instructions.ts
|
|
177
177
|
- tests/test_skill_dispatch_contract.py
|
|
178
178
|
- tests/test_runtime_adapters.py
|
|
179
179
|
- tests/test_runtime_adapter_registry.py
|
|
@@ -222,15 +222,15 @@ focused_scan:
|
|
|
222
222
|
text: checkpoint before worktree dispatch
|
|
223
223
|
classification: compatibility-preserved
|
|
224
224
|
reason: The contract preserves the parseable historical checkpoint commit message string.
|
|
225
|
-
- path: ^
|
|
225
|
+
- path: ^packages/cli/src/capabilities/realisera/instructions\.ts$
|
|
226
226
|
text: 'Step 5: Dispatch|checkpoint before worktree dispatch'
|
|
227
227
|
classification: compatibility-preserved
|
|
228
228
|
reason: Realisera preserves the current step heading and checkpoint commit message compatibility string.
|
|
229
|
-
- path: ^
|
|
229
|
+
- path: ^packages/cli/src/capabilities/optimera/instructions\.ts$
|
|
230
230
|
text: checkpoint before worktree dispatch
|
|
231
231
|
classification: compatibility-preserved
|
|
232
232
|
reason: Optimera preserves the current checkpoint commit message compatibility string.
|
|
233
|
-
- path: ^
|
|
233
|
+
- path: ^packages/cli/src/capabilities/orkestrera/instructions\.ts$
|
|
234
234
|
text: review pressure in dispatch|dispatch/evaluation context|`dispatch` and `chain` are autonomous orchestration verbs
|
|
235
235
|
classification: canonical
|
|
236
236
|
reason: Orkestrera capability prose uses dispatch for its explicitly owned orchestration loop.
|
|
@@ -33,6 +33,21 @@ channels:
|
|
|
33
33
|
Tracks the supported 2.x release line for users who must not cross the v2→v3
|
|
34
34
|
major boundary without explicit opt-in.
|
|
35
35
|
distribution_major: 2
|
|
36
|
+
next_major:
|
|
37
|
+
concept: forward_successor_line
|
|
38
|
+
channel: development
|
|
39
|
+
version: "3.0.0"
|
|
40
|
+
npm:
|
|
41
|
+
dist_tag: next
|
|
42
|
+
npm_only_advisory: >-
|
|
43
|
+
The successor line is npm-only; stable git/uvx installs remain on the
|
|
44
|
+
supported 2.x line until you explicitly opt in through npm.
|
|
45
|
+
guide_url: >-
|
|
46
|
+
https://github.com/jgabor/agentera/blob/main/UPGRADE.md#upgrading-v2-to-v3-development-channel-irreversible
|
|
47
|
+
preview_command: npx -y agentera@next upgrade --dry-run --channel development
|
|
48
|
+
irreversible_advisory: >-
|
|
49
|
+
Forward migration to the successor line is one-way; return to the prior
|
|
50
|
+
Python support line is permanently unsupported.
|
|
36
51
|
resolution:
|
|
37
52
|
npm:
|
|
38
53
|
dist_tag: latest
|
|
@@ -127,8 +142,8 @@ version_resolution:
|
|
|
127
142
|
latest_on_channel:
|
|
128
143
|
resolver: npm_dist_tag_with_offline_defaults
|
|
129
144
|
offline_defaults:
|
|
130
|
-
stable: "2.7.
|
|
131
|
-
development: "3.0.0
|
|
145
|
+
stable: "2.7.7"
|
|
146
|
+
development: "3.0.0"
|
|
132
147
|
irreversibility:
|
|
133
148
|
downgrade_to_v2: permanently_blocked
|
|
134
149
|
supported_downgrade_lines: []
|
|
@@ -18,7 +18,7 @@ authority_order:
|
|
|
18
18
|
- references/cli/capability-instruction-contract.yaml
|
|
19
19
|
- references/cli/routing-execution-vocabulary.yaml
|
|
20
20
|
- skills/agentera/SKILL.md
|
|
21
|
-
-
|
|
21
|
+
- packages/cli/src/capabilities/*/instructions.ts
|
|
22
22
|
- the agentera CLI
|
|
23
23
|
- packages/cli/src/upgrade (doctor/upgrade)
|
|
24
24
|
- README.md
|
|
@@ -62,8 +62,8 @@ normalization_rules:
|
|
|
62
62
|
- rule: Worker safety commits are Git-only.
|
|
63
63
|
use: pre-spawn Git commit
|
|
64
64
|
avoid: Non-Git checkpoint or pre-dispatch commit gate in new docs.
|
|
65
|
-
- rule: Capability instruction
|
|
66
|
-
use: instructions.
|
|
65
|
+
- rule: Capability instruction modules have current metadata and a runtime boundary.
|
|
66
|
+
use: instructions.ts plus emitted prime_context first_invocation_read; runtime enforcement is true via the CLI prime command
|
|
67
67
|
avoid: Claiming agents are policed for actual reads, or adding unsupported agentera planera commands.
|
|
68
68
|
plain_language:
|
|
69
69
|
lead_with_plain_phrase:
|
|
@@ -20,10 +20,10 @@ included when they shape cross-suite usage.
|
|
|
20
20
|
| `references/cli/app-lifecycle-vocabulary.yaml` | App lifecycle canonical statuses, deprecated aliases, operation verbs, status concepts, and consumer ownership boundaries. |
|
|
21
21
|
| `references/cli/update-channels.yaml` | Stable and development update channels, dist-tag/git resolution, default channel, and override keys. |
|
|
22
22
|
| `references/cli/bundle-skill-vocabulary.yaml` | Canonical concepts, compatibility boundaries, and classification rules for `bundle` and `SKILL.md` usage. |
|
|
23
|
-
| `references/cli/capability-instruction-contract.yaml` | Decision 57 capability instruction-file contract, current `instructions.
|
|
23
|
+
| `references/cli/capability-instruction-contract.yaml` | Decision 57 capability instruction-file contract, current `packages/cli/src/capabilities/<name>/instructions.ts` authority, and implemented `first_invocation_read` CLI/schema discoverability (D65 collapsed the legacy `full`/`compact_startup` distinction into a single `prime_context` value with runtime enforcement). |
|
|
24
24
|
| `references/cli/routing-execution-vocabulary.yaml` | Canonical concepts, compatibility boundaries, and classification rules for routing, suggestions, delegation, worker spawning, runtime subagent mechanisms, and pre-spawn Git commits. |
|
|
25
25
|
| `skills/agentera/SKILL.md` | Agentera routing entry point, routing model, CLI-first state access, installed-app status checks, and safety rails. |
|
|
26
|
-
| `
|
|
26
|
+
| `packages/cli/src/capabilities/*/instructions.ts` | Capability behavior, workflow grammar, step markers, and cross-capability boundaries. Loaded as a default-exported string constant and served via `agentera prime --context <name> --format json`. |
|
|
27
27
|
| `the agentera CLI` and `packages/cli/src/upgrade (doctor/upgrade)` | CLI-visible command labels, upgrade output, and doctor diagnostics. |
|
|
28
28
|
| `README.md`, `UPGRADE.md`, `DESIGN.md`, `.agentera/*.yaml` | User-facing phrasing, design vocabulary, and current project-state examples. |
|
|
29
29
|
|
|
@@ -54,7 +54,7 @@ examples. Diagnostics should state object, state, cause, and fix.
|
|
|
54
54
|
| Agentera | The open protocol for turning AI agents into engineering teams through shared project state, roles, decisions, and verification. | `README.md`, `.agentera/vision.yaml`, `skills/agentera/SKILL.md` |
|
|
55
55
|
| Agentera v2 | The current architecture: one Agentera skill, one `/agentera` entry point, twelve capabilities, YAML project state, and CLI-first access. | `README.md`, `UPGRADE.md`, `.agentera/decisions.yaml` |
|
|
56
56
|
| Agentera skill | The runtime-loaded Agentera skill at `skills/agentera/`. It contains the routing entry and twelve capabilities. | `skills/agentera/SKILL.md` |
|
|
57
|
-
| Capability | A routed behavioral unit inside the Agentera skill, with `instructions.
|
|
57
|
+
| Capability | A routed behavioral unit inside the Agentera skill, with the prose module `packages/cli/src/capabilities/<name>/instructions.ts` plus `triggers.yaml`, `artifacts.yaml`, `validation.yaml`, and `exit.yaml`. | `AGENTS.md`, `skills/agentera/capabilities/*`, `packages/cli/src/capabilities/*` |
|
|
58
58
|
| Shared protocol | The primitive vocabulary in `protocol.yaml`: confidence, severity, decision labels, exits, visual tokens, glyphs, and phases. | `skills/agentera/protocol.yaml` |
|
|
59
59
|
| Capability schema contract | The executable contract for capability schema groups, stable IDs, priorities, deprecations, and primitive references. | `skills/agentera/capability_schema_contract.yaml` |
|
|
60
60
|
| Project state | Structured files that preserve intent, decisions, plans, progress, health, docs, design, and session continuity. | `README.md`, `.agentera/docs.yaml` |
|
|
@@ -87,21 +87,26 @@ Capability names use Swedish-style `-era` verb forms. The name is the action:
|
|
|
87
87
|
|
|
88
88
|
The machine-readable authority is
|
|
89
89
|
`references/cli/capability-instruction-contract.yaml`; it owns Decision 57's
|
|
90
|
-
instruction-file boundary, including the canonical `instructions.
|
|
91
|
-
legacy `prose.md` compatibility boundaries,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
instruction-file boundary, including the canonical `instructions.ts` module,
|
|
91
|
+
legacy `prose.md` and `instructions.md` compatibility boundaries, the
|
|
92
|
+
implemented `first_invocation_read: prime_context` value, the
|
|
93
|
+
`prime --context <name> --format json` ownership statement, and the runtime
|
|
94
|
+
enforcement boundary promoted to `true` in D65.
|
|
95
|
+
|
|
96
|
+
Use this prose as guidance only: the default is that the first capability
|
|
97
|
+
invocation shells out to `agentera prime --context <name> --format json` and
|
|
98
|
+
reads the returned `prose` field. Today, capability directories carry the
|
|
99
|
+
`schemas/` files only, the prose module lives at
|
|
100
|
+
`packages/cli/src/capabilities/<name>/instructions.ts`, runtime descriptors
|
|
101
|
+
invoke the prime command, and the `agentera prime --context <name> --format
|
|
102
|
+
json` response emits `capability_context.prose` plus
|
|
103
|
+
`first_invocation_read` metadata.
|
|
100
104
|
|
|
101
105
|
Do not replace this with a parallel Markdown table of read modes or migration
|
|
102
106
|
surfaces. Update the YAML authority first, then keep this section as the short
|
|
103
|
-
human-facing boundary.
|
|
104
|
-
|
|
107
|
+
human-facing boundary. The `prime_context` runtime enforcement is owned by the
|
|
108
|
+
CLI process; agent runtimes shell out to the prime command instead of reading
|
|
109
|
+
the prose module directly.
|
|
105
110
|
|
|
106
111
|
## Invocation and routing grammar
|
|
107
112
|
|
|
@@ -193,6 +198,7 @@ ambiguous-term sweep remain separate follow-up work.
|
|
|
193
198
|
| --- | --- |
|
|
194
199
|
| Artifact | A project or agent state file owned by one or more capabilities. |
|
|
195
200
|
| Human-facing artifact | A root-level Markdown artifact intended for people, such as `TODO.md`, `CHANGELOG.md`, or `DESIGN.md`. |
|
|
201
|
+
| Severity band policy | TODO.md severity bands are header-only allowed for Degraded (⇉), Normal (→), and Annoying (⇢); Critical (⇶) is enforced and must contain at least one `- [type]` item. Authority: `skills/agentera/schemas/artifacts/todo.yaml` CONVENTION TC6; executable rule in `packages/cli/src/hooks/validateArtifact.ts` `validateMdItems`. |
|
|
196
202
|
| Agent-facing artifact | A structured YAML artifact under `.agentera/`, such as `.agentera/progress.yaml`. |
|
|
197
203
|
| Global artifact | A user-level artifact outside a project, such as `PROFILE.md` or `USAGE.md`. |
|
|
198
204
|
| Canonical artifact name | Display identifier such as `VISION.md`, `PROGRESS.md`, or `DOCS.md`; not always a literal path. |
|
|
@@ -543,7 +549,7 @@ High-signal source surfaces for this vocabulary:
|
|
|
543
549
|
| `skills/agentera/SKILL.md` | Routing entry, routing layers, CLI-first access, installed-app status check, and v1 migration check. |
|
|
544
550
|
| `skills/agentera/protocol.yaml` | Protocol primitives, glyphs, phases, visual tokens, exit signals. |
|
|
545
551
|
| `skills/agentera/capability_schema_contract.yaml` | Schema groups, priorities, stable IDs, primitive-reference fields. |
|
|
546
|
-
| `
|
|
552
|
+
| `packages/cli/src/capabilities/*/instructions.ts` | Workflow grammar, capability roles, safety rails, exit marker forms. Loaded as a default-exported string constant; runtime serves it via `agentera prime --context <name> --format json`. |
|
|
547
553
|
| `skills/agentera/capabilities/*/schemas/*.yaml` | Trigger patterns, artifact roles, validation rules, exit conditions. |
|
|
548
554
|
| `skills/agentera/schemas/artifacts/*.yaml` | Artifact fields, status enums, validation vocabulary, and protected current-state fields. |
|
|
549
555
|
| `references/artifacts/artifact-registry-interface-model.yaml` | Canonical artifact registry language. |
|
package/bundle/registry.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
6
6
|
"name": "agentera",
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "3.0.0",
|
|
8
8
|
"description": "Compound agent orchestration suite — 12 capabilities in one bundled skill; exact bare hej uses the Agentera dashboard path",
|
|
9
9
|
"path": "skills/agentera",
|
|
10
10
|
"capabilities": [
|
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agentera
|
|
3
3
|
description: >
|
|
4
|
-
The open protocol for turning AI agents into engineering teams.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Agentera capability requests, and a complete user message
|
|
9
|
-
bare `hej` runs the agentera prime orientation dashboard path
|
|
10
|
-
|
|
4
|
+
The open protocol for turning AI agents into engineering teams. One Agentera
|
|
5
|
+
skill with twelve capabilities; per-capability prose lives in
|
|
6
|
+
`packages/cli/src/capabilities/<name>/instructions.ts` and the runtime serves
|
|
7
|
+
it through `agentera prime --context <name> --format json`. Use this skill
|
|
8
|
+
for /agentera, Agentera capability requests, and a complete user message
|
|
9
|
+
exactly `hej`; bare `hej` runs the agentera prime orientation dashboard path
|
|
10
|
+
instead of a generic greeting.
|
|
11
|
+
version: "3.0.0"
|
|
11
12
|
spec_sections: [1, 2, 3, 4, 5, 6, 11, 13, 18, 19, 20, 22, 23]
|
|
13
|
+
capabilities:
|
|
14
|
+
- hej
|
|
15
|
+
- visionera
|
|
16
|
+
- resonera
|
|
17
|
+
- inspirera
|
|
18
|
+
- planera
|
|
19
|
+
- realisera
|
|
20
|
+
- optimera
|
|
21
|
+
- inspektera
|
|
22
|
+
- dokumentera
|
|
23
|
+
- profilera
|
|
24
|
+
- visualisera
|
|
25
|
+
- orkestrera
|
|
12
26
|
---
|
|
13
27
|
|
|
14
28
|
# agentera
|
|
@@ -239,7 +253,7 @@ Bare `/agentera` returning-project output must include these visible markers:
|
|
|
239
253
|
|
|
240
254
|
Use the README-style layout from hej Step 1b: metrics first, narrative read
|
|
241
255
|
inside `status`, then attention and next. The issues summary line uses
|
|
242
|
-
`critical · degraded · annoying`
|
|
256
|
+
`critical · degraded · normal · annoying` in the order prime emits them. Omit `attention` only when the source has no attention items. Always include the
|
|
243
257
|
mandatory `⌂ hej · <status>` marker below the dashboard code fence, and ask for
|
|
244
258
|
confirmation before invoking the suggested downstream capability. For
|
|
245
259
|
`/agentera <capability-name>` or `/agentera <alias>`, do not assume the route
|
|
@@ -261,21 +275,25 @@ v2 paths `hej --capability-context` and `--context-profile` are removed in 3.0.
|
|
|
261
275
|
For normal ≡ planera execution, use
|
|
262
276
|
`capability_context.context.planning_context.startup_contract` from
|
|
263
277
|
`agentera prime --context planera --format json`
|
|
264
|
-
before reading
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
278
|
+
before reading the Planera prose from
|
|
279
|
+
`packages/cli/src/capabilities/planera/instructions.ts` (served via
|
|
280
|
+
`capability_context.prose` from the same prime call). Read the full Planera
|
|
281
|
+
prose only when editing Planera, resolving contradiction or ambiguity,
|
|
282
|
+
validating detailed behavior not covered by the compact contract, or
|
|
283
|
+
investigating benchmark/read-trigger evidence. This preserves Planera prose
|
|
284
|
+
as detailed authority and does not add `agentera planera`; `/agentera plan`
|
|
285
|
+
remains routing while `agentera state plan` remains plan state (top-level
|
|
286
|
+
`agentera plan` is a migration alias).
|
|
270
287
|
For normal DECISIONS.md context, use `agentera state decisions --format json` and its
|
|
271
288
|
source_contract. When `complete_for_normal_deliberation_context=true`, preserve
|
|
272
289
|
returned `missing_fields`, `compacted`, `caveats`, and `satisfaction.review_needed`
|
|
273
290
|
instead of raw-reading `.agentera/decisions.yaml` to reconstruct missing history.
|
|
274
291
|
Raw decision artifact access is reserved for Resonera-owned writes/repairs,
|
|
275
292
|
artifact corruption diagnostics, or CLI defect investigation.
|
|
276
|
-
Reading a capability's
|
|
277
|
-
invocation means routing to the capability,
|
|
278
|
-
|
|
293
|
+
Reading a capability's instructions module is not itself a capability invocation;
|
|
294
|
+
invocation means routing to the capability, fetching the prose via
|
|
295
|
+
`agentera prime --context <name> --format json`, following that prose, and using
|
|
296
|
+
the CLI state layer first for artifact-backed state.
|
|
279
297
|
|
|
280
298
|
Capability handoffs use glyph plus canonical capability name, for example
|
|
281
299
|
`⧉ realisera` or `≡ planera`. Reserve `/agentera <alias>` wording for explicit
|
|
@@ -436,25 +454,24 @@ Before reading or writing any artifact, check if `.agentera/docs.yaml` exists. I
|
|
|
436
454
|
|
|
437
455
|
```
|
|
438
456
|
skills/agentera/
|
|
439
|
-
SKILL.md # This file
|
|
457
|
+
SKILL.md # This file (routing stub + capability table)
|
|
440
458
|
protocol.yaml # Shared primitives
|
|
441
459
|
capability_schema_contract.yaml # Self-referential schema contract
|
|
442
460
|
capabilities/
|
|
443
461
|
hej/
|
|
444
|
-
instructions.md
|
|
445
462
|
schemas/
|
|
446
463
|
triggers.yaml
|
|
447
464
|
artifacts.yaml
|
|
448
465
|
validation.yaml
|
|
449
466
|
exit.yaml
|
|
450
467
|
resonera/
|
|
451
|
-
instructions.md
|
|
452
468
|
schemas/
|
|
453
469
|
triggers.yaml
|
|
454
470
|
artifacts.yaml
|
|
455
471
|
validation.yaml
|
|
456
472
|
exit.yaml
|
|
457
|
-
... (12 capabilities total)
|
|
473
|
+
... (12 capabilities total, each with schemas/ only)
|
|
474
|
+
packages/cli/src/capabilities/<name>/instructions.ts # Per-capability prose (D65)
|
|
458
475
|
```
|
|
459
476
|
|
|
460
477
|
Validate any capability against the contract through the canonical CLI:
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "dokumentera"
|
|
3
3
|
description = "Documentation updates and synchronization."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera dokumentera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts.
|
|
5
|
+
You are the Agentera dokumentera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts. Run `agentera prime --context dokumentera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "hej"
|
|
3
3
|
description = "Agentera orientation and routing dashboard."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera hej capability subagent. You are a read-only agent — do not write files or execute shell commands.
|
|
5
|
+
You are the Agentera hej capability subagent. You are a read-only agent — do not write files or execute shell commands. Run `agentera prime --context hej --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "inspektera"
|
|
3
3
|
description = "Codebase health audit."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera inspektera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts.
|
|
5
|
+
You are the Agentera inspektera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts. Run `agentera prime --context inspektera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "inspirera"
|
|
3
3
|
description = "External pattern research and synthesis."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera inspirera capability subagent. You are a read-only agent — do not write files or execute shell commands.
|
|
5
|
+
You are the Agentera inspirera capability subagent. You are a read-only agent — do not write files or execute shell commands. Run `agentera prime --context inspirera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "optimera"
|
|
3
3
|
description = "Metric-driven optimization cycles."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera optimera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results.
|
|
5
|
+
You are the Agentera optimera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results. Run `agentera prime --context optimera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "orkestrera"
|
|
3
3
|
description = "Multi-cycle orchestration over active plans."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera orkestrera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results.
|
|
5
|
+
You are the Agentera orkestrera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results. Run `agentera prime --context orkestrera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "planera"
|
|
3
3
|
description = "Planning with acceptance criteria."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera planera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts.
|
|
5
|
+
You are the Agentera planera capability subagent. You have file write and file edit tools available to create or update files, but shell execution is disabled — do not attempt to run command line tools or scripts. Run `agentera prime --context planera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
name = "profilera"
|
|
3
3
|
description = "Decision profiling and preference memory."
|
|
4
4
|
developer_instructions = """
|
|
5
|
-
You are the Agentera profilera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results.
|
|
5
|
+
You are the Agentera profilera capability subagent. You have full file write, file edit, and shell execution tools available — use them to implement code changes, run tests, and commit results. Run `agentera prime --context profilera --format json` to fetch the authoritative instructions as a JSON capsule (the `prose` field carries the full Markdown body). Stay within the dispatched capability task, use the Agentera CLI state seam first, and preserve Agentera artifact safety rails.
|
|
6
6
|
"""
|