eidosmd 0.1.0 → 0.3.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 +50 -29
- package/browser/dist/assets/index-Cc3cNWHY.css +1 -0
- package/browser/dist/assets/index-DQgCQRa5.js +46 -0
- package/browser/dist/favicon.svg +5 -0
- package/browser/dist/index.html +15 -0
- package/browser/dist/mark.svg +4 -0
- package/dist/src/cli.js +7 -0
- package/dist/src/commands/agents.js +1 -1
- package/dist/src/commands/canvas.js +77 -0
- package/dist/src/commands/check.js +10 -4
- package/dist/src/commands/configure.js +201 -0
- package/dist/src/commands/framework.js +37 -7
- package/dist/src/commands/index.js +4 -4
- package/dist/src/commands/init.js +5 -0
- package/dist/src/commands/instructions.js +1 -1
- package/dist/src/commands/list.js +8 -8
- package/dist/src/commands/migrate.js +32 -0
- package/dist/src/commands/new.js +3 -3
- package/dist/src/commands/property.js +125 -0
- package/dist/src/commands/seeds.js +5 -5
- package/dist/src/commands/setup.js +131 -0
- package/dist/src/commands/version.js +44 -0
- package/dist/src/commands/whoami.js +4 -4
- package/dist/src/context.js +5 -5
- package/dist/src/core/blueprint.js +16 -11
- package/dist/src/core/canvas-schema.js +148 -0
- package/dist/src/core/canvas.js +732 -0
- package/dist/src/core/check.js +221 -70
- package/dist/src/core/convert.js +7 -6
- package/dist/src/core/edits.js +1381 -0
- package/dist/src/core/framework-markdown.js +119 -34
- package/dist/src/core/framework-model.js +62 -10
- package/dist/src/core/framework-structured.js +222 -47
- package/dist/src/core/framework.js +13 -13
- package/dist/src/core/frontmatter.js +61 -1
- package/dist/src/core/git.js +84 -0
- package/dist/src/core/index-leaf.js +2 -2
- package/dist/src/core/links.js +87 -0
- package/dist/src/core/markdown.js +16 -9
- package/dist/src/core/me.js +16 -8
- package/dist/src/core/migrate.js +319 -0
- package/dist/src/core/naming.js +1 -1
- package/dist/src/core/regions.js +117 -0
- package/dist/src/core/root.js +2 -2
- package/dist/src/core/scaffold.js +33 -27
- package/dist/src/core/seed.js +187 -71
- package/dist/src/core/server.js +1410 -53
- package/dist/src/core/settings.js +232 -0
- package/dist/src/core/store.js +315 -0
- package/dist/src/core/template.js +32 -0
- package/dist/src/core/versions.js +84 -0
- package/dist/src/output.js +4 -1
- package/dist/src/program.js +421 -41
- package/instructions/authoring.md +15 -12
- package/instructions/configuring.md +81 -34
- package/instructions/init-required.md +4 -4
- package/instructions/overview.md +21 -9
- package/instructions/validating.md +9 -6
- package/package.json +21 -12
- package/standard/EIDOS.md +142 -259
- package/standard/seeds/README.md +12 -16
- package/standard/seeds/book/Framework.yaml +61 -0
- package/standard/seeds/book/README.md +10 -5
- package/standard/seeds/book/_gitignore +9 -3
- package/standard/seeds/book/me.md +1 -1
- package/standard/seeds/book/roles/README.md +3 -3
- package/standard/seeds/book/roles/framework-owner.md +2 -2
- package/standard/seeds/book/{shapes → templates}/chapter.full.md +0 -8
- package/standard/seeds/book/{shapes → templates}/chapter.sketch.md +0 -7
- package/standard/seeds/book/{shapes → templates}/frame.market.md +0 -6
- package/standard/seeds/book/templates/frame.premise.md +17 -0
- package/standard/seeds/book/{shapes → templates}/frame.reader.md +0 -6
- package/standard/seeds/book/{shapes → templates}/frame.voice.md +0 -7
- package/standard/seeds/research/Framework.yaml +61 -0
- package/standard/seeds/research/README.md +10 -5
- package/standard/seeds/research/_gitignore +9 -3
- package/standard/seeds/research/me.md +1 -1
- package/standard/seeds/research/roles/README.md +3 -3
- package/standard/seeds/research/roles/framework-owner.md +2 -2
- package/standard/seeds/research/{shapes → templates}/frame.ethics.md +0 -6
- package/standard/seeds/research/{shapes → templates}/frame.method.md +0 -7
- package/standard/seeds/research/{shapes → templates}/frame.prior-work.md +0 -6
- package/standard/seeds/research/{shapes → templates}/frame.question.md +0 -7
- package/standard/seeds/research/{shapes → templates}/investigation.full.md +0 -8
- package/standard/seeds/research/{shapes → templates}/investigation.note.md +0 -7
- package/standard/seeds/software/Framework.yaml +62 -0
- package/standard/seeds/software/README.md +7 -6
- package/standard/seeds/software/_gitignore +9 -3
- package/standard/seeds/software/me.md +1 -1
- package/standard/seeds/software/roles/README.md +3 -3
- package/standard/seeds/software/roles/framework-owner.md +2 -2
- package/standard/seeds/software/roles/project-manager.md +2 -2
- package/standard/seeds/software/roles/stakeholder.md +1 -1
- package/standard/seeds/software/{shapes → templates}/frame.architecture.md +0 -7
- package/standard/seeds/software/{shapes → templates}/frame.audience.md +1 -8
- package/standard/seeds/software/{shapes → templates}/frame.criteria.md +0 -8
- package/standard/seeds/software/{shapes → templates}/frame.market.md +0 -8
- package/standard/seeds/software/{shapes → templates}/spec.full.md +0 -8
- package/standard/seeds/software/{shapes → templates}/spec.micro.md +0 -9
- package/browser/index.html +0 -268
- package/dist/src/commands/convert.js +0 -30
- package/dist/src/core/shape.js +0 -26
- package/standard/seeds/book/Framework.md +0 -87
- package/standard/seeds/book/shapes/frame.premise.md +0 -24
- package/standard/seeds/research/Framework.md +0 -88
- package/standard/seeds/software/Framework.md +0 -88
- /package/standard/seeds/software/{shapes → templates}/.gitkeep +0 -0
package/standard/EIDOS.md
CHANGED
|
@@ -1,324 +1,207 @@
|
|
|
1
1
|
# Eidos
|
|
2
2
|
|
|
3
|
-
**Version:**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
This file is the contract: the terms, the layout, and the rules. It names no collection,
|
|
8
|
-
|
|
9
|
-
##
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
| **root**
|
|
16
|
-
| **
|
|
17
|
-
| **collection**
|
|
18
|
-
| **blueprint**
|
|
19
|
-
| **
|
|
20
|
-
| **
|
|
21
|
-
| **
|
|
22
|
-
| **property**
|
|
23
|
-
| **
|
|
24
|
-
| **top-level doc** | A one-of-a-kind
|
|
25
|
-
| **role**
|
|
26
|
-
| **
|
|
27
|
-
| **
|
|
28
|
-
|
|
29
|
-
A
|
|
3
|
+
**Version:** 5.3.0
|
|
4
|
+
|
|
5
|
+
Eidos is a way to define a product in markdown: an app, a book, a study, anything work produces that has a shape. The structure is data in a hidden folder that a tool can check against; the product is written in markdown against that structure. One file is the complete source of truth for one unit of the product, as true of something planned as of something long shipped.
|
|
6
|
+
|
|
7
|
+
This file is the contract: the terms, the layout, and the rules. It names no collection, template, or section; those belong to a framework.
|
|
8
|
+
|
|
9
|
+
## Terms
|
|
10
|
+
|
|
11
|
+
| Term | What it is |
|
|
12
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
13
|
+
| **product** | What you are defining. |
|
|
14
|
+
| **framework** | How the files are organized: folders, templates, properties, vocabulary, roles. Lives in `.eidos/`; one framework can govern many products. |
|
|
15
|
+
| **root** | The folder it all lives in. Found by the `.eidos/` inside it, never by its name. |
|
|
16
|
+
| **folder** | A top-level folder in the root, declared with a type: `collection`, `assets`, or `other`. |
|
|
17
|
+
| **collection** | A folder of blueprints of one kind: specs, chapters, investigations. Its sub-folders, if any, are its declared groups. |
|
|
18
|
+
| **blueprint** | One markdown file in a collection, defining one unit of the product completely: properties on top, a body below. |
|
|
19
|
+
| **unit** | What one blueprint defines: a spec, a chapter, an investigation. Templates are named for it, singular. |
|
|
20
|
+
| **template** | The body a collection's blueprints follow: sections in order, under set names. Body only. One file per variant in `.eidos/templates/`. |
|
|
21
|
+
| **variant** | One of a collection's templates (`<unit>.<variant>.md`). One is the default; a blueprint on another says so in `variant`. |
|
|
22
|
+
| **property** | One frontmatter field: name, type, which collections it applies to, whether required, meaning, and options when closed. The whole table is the framework's Properties. |
|
|
23
|
+
| **vocabulary** | The framework's table of words used on purpose: what each means and what it is not. |
|
|
24
|
+
| **top-level doc** | A one-of-a-kind file at the root, listed in the framework document. No template; the body is never validated. |
|
|
25
|
+
| **role** | How an agent talks to one kind of person. `.eidos/me.md` says which role is in the seat. |
|
|
26
|
+
| **plugin** | A tool's own folder, `.eidos/plugins/<name>/`. The standard reads none of it. |
|
|
27
|
+
| **region** | A span in a markdown file that a tool owns, fenced by two HTML comments carrying its name. The standard reads none of it. |
|
|
28
|
+
|
|
29
|
+
A task describes work and dies when it ships. A blueprint describes the product and stays accurate for its whole life.
|
|
30
30
|
|
|
31
31
|
## Layout
|
|
32
32
|
|
|
33
|
-
The root is found by the hidden `_eidos/` inside it. It may be named anything; nothing points at it by path.
|
|
34
|
-
|
|
35
33
|
```txt
|
|
36
|
-
Blueprints/ # the root
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
Blueprints/ # the root; any name works, this is the default
|
|
35
|
+
.eidos/ # the framework
|
|
36
|
+
plugins/<name>/ # a tool's own folder; local.yaml inside it is personal (gitignored)
|
|
37
|
+
roles/<role>.md # response contracts; framework-owner.md is always one
|
|
38
|
+
templates/ # <unit>.<variant>.md, one per variant
|
|
39
|
+
.gitignore # ignores me.md and plugins/*/local.yaml
|
|
40
|
+
Framework.yaml # the framework document
|
|
41
|
+
me.md # who is in the seat (personal, gitignored)
|
|
42
|
+
<Assets>/ # type assets: files that are not markdown
|
|
43
|
+
<Collection>/ # type collection: blueprints
|
|
44
|
+
<Group>/ # a declared group; nothing deeper
|
|
45
45
|
<Title>.md # one blueprint per file
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Several roots in one repository nest as `Blueprints/<name>/…`, each with its own `_eidos/`.
|
|
50
|
-
|
|
51
|
-
## The framework (`_eidos/`)
|
|
52
|
-
|
|
53
|
-
Hidden the way `.git` and `.obsidian` are: present, manageable, out of the way once set. The root is plausibly an Obsidian vault, and `_eidos/` sits beside `.obsidian/`.
|
|
54
|
-
|
|
55
|
-
```txt
|
|
56
|
-
_eidos/
|
|
57
|
-
shapes/ # one file per flavor
|
|
58
|
-
<kind>.<flavor-1>.md # a collection's default flavor
|
|
59
|
-
<kind>.<flavor-2>.md # a second flavor of the same kind
|
|
60
|
-
frame.<kind>.md # the framing collection's flavors, one per kind of frame
|
|
61
|
-
roles/ # response contracts, committed and team-tunable
|
|
62
|
-
framework-owner.md # the one every seed carries
|
|
63
|
-
<role>.md # the rest are the framework's own
|
|
64
|
-
Framework.md # the framework document, for people: version, naming, Top-Level, Collections, Schema
|
|
65
|
-
# (or Framework.yaml, the same as data with the index inside it, for scripts and agents)
|
|
66
|
-
me.md # the actor (personal, gitignored)
|
|
67
|
-
.gitignore # ignores me.md — the one file here not committed
|
|
46
|
+
<Other>/ # type other: the owner's, described and left alone
|
|
47
|
+
<Doc>.md # a top-level doc, listed under top_level
|
|
68
48
|
```
|
|
69
49
|
|
|
70
|
-
|
|
50
|
+
**Everything at the root is declared.** A folder is `.eidos/` or declared under `folders`; a file is listed under `top_level`. Anything else is surfaced, and the owner declares it or moves it. Hidden entries (`.git`, `.obsidian/`) are the host's and exempt.
|
|
71
51
|
|
|
72
|
-
###
|
|
52
|
+
### Folders
|
|
73
53
|
|
|
74
|
-
|
|
54
|
+
| Type | Holds | The standard |
|
|
55
|
+
| ------------ | -------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
56
|
+
| `collection` | blueprints, optionally in declared groups | generates, validates, and indexes the markdown files; ignores any other file |
|
|
57
|
+
| `assets` | files that are not markdown | reads nothing inside; the folder's name follows `naming`, the files keep their own |
|
|
58
|
+
| `other` | whatever the description says | reads nothing inside; the folder is declared and otherwise left alone |
|
|
75
59
|
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
eidos_version: 4.5.0
|
|
79
|
-
naming: kebab-case
|
|
80
|
-
---
|
|
60
|
+
A collection is flat or grouped. Grouped, every sub-folder is a declared group, and a group holds blueprints and nothing deeper. A grouping property's value is the group's name; an unknown value warns.
|
|
81
61
|
|
|
82
|
-
|
|
62
|
+
### Plugins
|
|
83
63
|
|
|
84
|
-
|
|
85
|
-
<!-- configure: top-level index (regenerated) -->
|
|
86
|
-
- [README](../README.md) — the front door.
|
|
87
|
-
|
|
88
|
-
## Collections
|
|
89
|
-
|
|
90
|
-
### <Framing collection>
|
|
91
|
-
|
|
92
|
-
The framing docs — declared first.
|
|
93
|
-
|
|
94
|
-
- **Leaf:** [<Framing>/index.md](../<Framing>/index.md)
|
|
95
|
-
- **Flavors:**
|
|
96
|
-
- [<kind>](shapes/frame.<kind>.md) — one flavor per kind of frame (mark one default).
|
|
97
|
-
- **Canvas:** file
|
|
98
|
-
|
|
99
|
-
### <Collection>
|
|
100
|
-
|
|
101
|
-
One line on what this collection holds.
|
|
102
|
-
|
|
103
|
-
- **Leaf:** [<Collection>/index.md](../<Collection>/index.md)
|
|
104
|
-
- **Flavors:**
|
|
105
|
-
- [<flavor-1>](shapes/<kind>.<flavor-1>.md) — the fuller shape (default).
|
|
106
|
-
- [<flavor-2>](shapes/<kind>.<flavor-2>.md) — a lighter one to grow out of.
|
|
107
|
-
- **Canvas:** card from `## <Section>`
|
|
108
|
-
- **<Grouping>:**
|
|
109
|
-
- **<Group>** — one line on what falls under it.
|
|
110
|
-
|
|
111
|
-
## Schema
|
|
112
|
-
|
|
113
|
-
### Eidos Core
|
|
114
|
-
<!-- the standard's block: id, title, summary, flavor, connects_to -->
|
|
115
|
-
|
|
116
|
-
### Custom Properties
|
|
117
|
-
| Name | Type | Applies To | Meaning |
|
|
118
|
-
| ------ | ---- | ------------ | ------------------------------ |
|
|
119
|
-
| <name> | Text | all | Whatever this framework needs. |
|
|
120
|
-
| <name> | Text | <Collection> | Scoped to one collection. |
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
- **`eidos_version`** — the version this framework targets. `migrate` reads and bumps it.
|
|
124
|
-
- **`naming`** — `kebab-case` (default), `TitleCase`, or `Title Case`. See [Naming](#naming).
|
|
125
|
-
- **`## Top-Level`** — the top-level docs, `README` first. Framing docs are not here; they are a collection.
|
|
126
|
-
- **`## Collections`** — one `###` each: its **Leaf**, its **Flavors** (default marked), its **Canvas**, and its grouping.
|
|
127
|
-
- **`- **Canvas:**`** — how a canvas generator draws the collection: `file` (a full-file node, for prose read whole), `card` (a node embedding the blueprint), or `card from ## Section` (a node embedding that section). Absent means a plain card — a generator knows no collection by name and cannot guess which section is the summary.
|
|
128
|
-
- **`## Schema`** — `### Eidos Core` (the standard's, rewritten by `migrate`) and `### Custom Properties` (the framework's).
|
|
64
|
+
The top level of `.eidos/` is the standard's. A tool keeps what it needs in `.eidos/plugins/<name>/` and touches nothing else. The name is one identifier everywhere the tool appears (its folder, its Properties block, its regions): lowercase letters, digits, hyphens, unique in the root; `eidos` is reserved. A check never faults a plugin folder and a migration carries it across untouched. `local.yaml` inside it is one person's settings and is never committed.
|
|
129
65
|
|
|
130
66
|
### `Framework.yaml`
|
|
131
67
|
|
|
132
|
-
|
|
68
|
+
One per root, `Framework.yaml` or `.yml`, snake_case, comments welcome. Every path is relative to `.eidos/`.
|
|
133
69
|
|
|
134
70
|
```yaml
|
|
135
|
-
eidos_version:
|
|
136
|
-
naming: kebab-case #
|
|
137
|
-
top_level:
|
|
138
|
-
- title:
|
|
139
|
-
|
|
140
|
-
description: the front door.
|
|
141
|
-
collections: # the first is the framing collection
|
|
142
|
-
- name: <Framing>
|
|
143
|
-
description: The framing docs.
|
|
144
|
-
canvas: file
|
|
145
|
-
flavors:
|
|
146
|
-
- name: <kind>
|
|
147
|
-
shape: shapes/frame.<kind>.md
|
|
148
|
-
description: one flavor per kind of frame
|
|
149
|
-
default: true
|
|
71
|
+
eidos_version: 5.3.0
|
|
72
|
+
naming: kebab-case # kebab-case (default) | TitleCase | Title Case
|
|
73
|
+
top_level:
|
|
74
|
+
- { title: <Title>, path: ../<Doc>.md, description: one line }
|
|
75
|
+
folders:
|
|
150
76
|
- name: <Collection>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- { name: <
|
|
155
|
-
- { name: <flavor-2>, shape: shapes/<kind>.<flavor-2>.md, description: a lighter one to grow out of }
|
|
77
|
+
type: collection
|
|
78
|
+
description: one line
|
|
79
|
+
variants:
|
|
80
|
+
- { name: <variant>, template: templates/<unit>.<variant>.md, description: one line, default: true }
|
|
156
81
|
grouping:
|
|
157
82
|
label: <Grouping>
|
|
158
83
|
property: <name> # the custom property carrying the group, if one does
|
|
159
84
|
groups:
|
|
160
|
-
- { name: <Group>, description: one line
|
|
161
|
-
|
|
162
|
-
|
|
85
|
+
- { name: <Group>, description: one line }
|
|
86
|
+
- { name: <Assets>, type: assets, description: one line }
|
|
87
|
+
properties:
|
|
88
|
+
core: [] # the standard's; empty = the core for this eidos_version
|
|
163
89
|
custom:
|
|
164
|
-
- { name: <name>, type: Text, applies_to: all,
|
|
165
|
-
- { name: <name>, type: Text, applies_to: [<Collection>],
|
|
166
|
-
|
|
90
|
+
- { name: <name>, type: Text, applies_to: all, required: true, meaning: one line }
|
|
91
|
+
- { name: <name>, type: Text, applies_to: [<Collection>], options: [<Value>, <Value>], meaning: one line }
|
|
92
|
+
tools:
|
|
93
|
+
<tool>:
|
|
94
|
+
- { name: <name>, type: Text, applies_to: all, meaning: one line }
|
|
95
|
+
vocabulary:
|
|
96
|
+
- { term: <Term>, means: one line, not: ["<near-miss>, and why"], see: ../<Collection>/<Title>.md }
|
|
97
|
+
index: # generated; never hand-edited
|
|
167
98
|
<Collection>:
|
|
168
|
-
- { id: <id>, title: <Title>, summary: <
|
|
99
|
+
- { id: <id>, title: <Title>, summary: <summary>, path: <Group>/<Title>.md, group: <Group> }
|
|
169
100
|
```
|
|
170
101
|
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
|
|
175
|
-
|
|
102
|
+
- **`top_level`**: every file at the root, each a `title`, `path`, and `description`.
|
|
103
|
+
- **`folders`**: every folder at the root, each a `name`, `type`, and `description`. A `collection` also carries `variants` (`default` marks one; absent, the first is) and `grouping`. An unknown type is a fault.
|
|
104
|
+
- **`properties`**: one block per owner. `core` is the standard's, rewritten by a migration. `custom` is the owner's. `tools.<tool>` is that tool's alone. The six keys the standard names are the standard's; any other key on an entry is a tool's.
|
|
105
|
+
- **`vocabulary`**: the root's own terms. Starts empty.
|
|
106
|
+
- **`index`**: every collection's blueprints, rebuilt wholesale by whatever indexes the root, which touches no other key.
|
|
176
107
|
|
|
177
|
-
|
|
108
|
+
### Templates
|
|
178
109
|
|
|
179
|
-
|
|
110
|
+
A template is body only: sections in order, under set names, with guidance. Frontmatter in a template is a fault. The file is `<unit>.<variant>.md`, lowercase. A blueprint is validated against the variant it names; a lighter variant is never faulted for sections only a fuller one has.
|
|
180
111
|
|
|
181
|
-
###
|
|
112
|
+
### Properties
|
|
182
113
|
|
|
183
|
-
Each
|
|
114
|
+
Each entry: `name`, `type`, `applies_to`, `required`, `meaning`, and `options` when the value is one of a closed set.
|
|
184
115
|
|
|
185
|
-
|
|
116
|
+
- **type** is one of Text, List, Number, Checkbox, Date, Date & time.
|
|
117
|
+
- **applies_to** is `all` or a list of collections.
|
|
118
|
+
- **required** (absent = `false`): a required property is generated into every new blueprint and surfaced when missing. An optional one is written when it has a value; its absence is never a gap.
|
|
119
|
+
- **options**: an ordered, non-empty list of allowed values, compared exactly. An off-list value is surfaced, never refused. An empty list is a fault. No default rides with it. `variant` and a grouping property take their sets from the structure and never carry `options`.
|
|
186
120
|
|
|
187
|
-
|
|
121
|
+
The block a property sits in owns it, and only the owner writes there. The core:
|
|
188
122
|
|
|
189
|
-
| Name
|
|
190
|
-
|
|
|
191
|
-
| `id`
|
|
192
|
-
| `title`
|
|
193
|
-
| `summary` | Text | One
|
|
194
|
-
| `
|
|
195
|
-
| `connects_to` | List | Blueprints this one connects to on the canvas, each a link, drawn as a directed edge. |
|
|
123
|
+
| Name | Type | Required | Meaning |
|
|
124
|
+
| --------- | ---- | -------- | ---------------------------------------------------------------------------- |
|
|
125
|
+
| `id` | Text | yes | Stable, unique identity, in any form. Assigned once, never changed. |
|
|
126
|
+
| `title` | Text | yes | Human-readable name. Rename freely; `id` holds still. |
|
|
127
|
+
| `summary` | Text | no | One line: what this blueprint is. Feeds the index; absent, the index flags it. |
|
|
128
|
+
| `variant` | Text | no | Which variant this blueprint follows. Absent = the collection's default. |
|
|
196
129
|
|
|
197
|
-
|
|
130
|
+
Eidos defines no custom properties. Status, dates, grouping, dependencies: all the framework's choice.
|
|
198
131
|
|
|
199
|
-
###
|
|
132
|
+
### Vocabulary
|
|
200
133
|
|
|
201
|
-
|
|
134
|
+
Each entry: `term`, `means`, `not` (the near-misses and why each differs), and `see` when a blueprint defines it in full. Eidos declares none of a root's terms. Where a term is declared, blueprints use it; a near-miss is flagged with the term beside it, never swapped in silently.
|
|
202
135
|
|
|
203
|
-
|
|
204
|
-
- **`_eidos/me.md`** — personal and gitignored, one per person. Names the actor's role and calibrates it on three axes: **ownership**, **experience with the scope**, and **technical capacity**. Set it with `whoami`. Blank is fine.
|
|
136
|
+
### Roles
|
|
205
137
|
|
|
206
|
-
|
|
138
|
+
`.eidos/roles/<role>.md` says how an agent responds to one kind of person: depth, what to surface, who decides. Every framework has a Framework Owner, who holds intent, scope, and decisions. `.eidos/me.md` names your role and calibrates it on ownership, experience with the scope, and technical capacity. Blank is fine.
|
|
207
139
|
|
|
208
140
|
## Writing
|
|
209
141
|
|
|
210
|
-
### `README.md`
|
|
211
|
-
|
|
212
|
-
A visible front door at the root: what the thing is, and pointers into it — the top-level docs, the collections and their indexes, and the framework document for the full index. Thin, orientation and links, edited in place.
|
|
213
|
-
|
|
214
142
|
### Naming
|
|
215
143
|
|
|
216
|
-
Everything a human reads in the tree
|
|
144
|
+
Everything a human reads in the tree follows `naming`. Absent means `kebab-case`.
|
|
217
145
|
|
|
218
|
-
| Convention
|
|
219
|
-
|
|
|
220
|
-
| **kebab-case** (default) | `blueprint-title-here.md` | `group-name/`
|
|
221
|
-
| **TitleCase**
|
|
222
|
-
| **Title Case**
|
|
146
|
+
| Convention | A blueprint file | A group folder | Trade |
|
|
147
|
+
| ------------------------ | ------------------------- | -------------- | -------------------------------------- |
|
|
148
|
+
| **kebab-case** (default) | `blueprint-title-here.md` | `group-name/` | readable everywhere, no `%20` |
|
|
149
|
+
| **TitleCase** | `BlueprintTitleHere.md` | `GroupName/` | space-free, capitalized |
|
|
150
|
+
| **Title Case** | `Blueprint Title Here.md` | `Group Name/` | reads like prose, `%20` in every link |
|
|
223
151
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
One convention governs the whole folder, and changing it later means renaming files, so it is settled at init. Whichever you pick: `_eidos/` is always lowercase; `README.md` keeps the name every tool already looks for; the `id` is always kebab-case; a grouping property's value matches its folder exactly; and fields meant for tools are not names in the tree.
|
|
152
|
+
Exceptions: `.eidos/` is lowercase, `README.md` keeps its name, a grouping value matches its folder exactly, and nothing inside an `assets` or `other` folder is held to the convention.
|
|
227
153
|
|
|
228
154
|
### Linking
|
|
229
155
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
```yaml
|
|
233
|
-
depends_on:
|
|
234
|
-
- "[Some Blueprint](../some-group/some-blueprint.md)"
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
If a target has no blueprint yet, name it plainly rather than fabricating a link.
|
|
238
|
-
|
|
239
|
-
### Blueprint bodies
|
|
240
|
-
|
|
241
|
-
The body follows its flavor's shape. Keep the shape's order and names; leave a section out when it genuinely doesn't apply rather than leaving it empty. Within and beneath those sections, write it like a person would read it — sub-headings, tables, lists, small diagrams wherever they make the meaning clearer. Keep checkable statements short and observable, labeled the way the shape asks, with supporting detail pushed into a table or sub-section they point at.
|
|
242
|
-
|
|
243
|
-
The sections themselves are documented in the shape file, not here.
|
|
244
|
-
|
|
245
|
-
### Frames and top-level docs
|
|
246
|
-
|
|
247
|
-
Both are loose prose: record what is true now, revise when it changes. They differ in one way. A **frame** is a blueprint — it follows a shape, carries the frontmatter contract, and is validated. A **top-level doc** is one-of-a-kind, filled in once and edited in place, so it needs no shared shape and gets none. A shape earns its keep by being stamped again; a document written once doesn't need a cookie-cutter.
|
|
248
|
-
|
|
249
|
-
For a top-level doc you've already drafted, `format` organizes it into the house style without adding anything of its own.
|
|
156
|
+
A standard markdown link, path relative to the file it sits in, text the human title, `#heading` for a section. Properties that point outward hold links too, quoted in YAML. Files that are not blueprints are linked or embedded the same way (``): no wikilinks, no absolute paths, no resolution by filename. A check verifies the path resolves. If a target has no blueprint yet, name it plainly.
|
|
250
157
|
|
|
251
|
-
|
|
158
|
+
### Bodies
|
|
252
159
|
|
|
253
|
-
|
|
160
|
+
A blueprint's body follows its variant's template: keep the order and names, leave out a section that doesn't apply rather than leaving it empty, and write it like a person would read it. A top-level doc is loose prose, revised in place, with no template.
|
|
254
161
|
|
|
255
|
-
|
|
162
|
+
### Regions
|
|
256
163
|
|
|
257
|
-
|
|
164
|
+
A tool keeps what it needs inside a markdown file between `<!-- <tool>:<region> <args> -->` and `<!-- /<tool>:<region> -->`, each alone on its line. `<args>` is optional `key=value` pairs. Inside is the tool's, rewritten wholesale; outside is the person's. A region closes at the first matching closer (`-->` or `--!>`); a marker inside a fenced code block is text. An opener with no closer is faulted; a region for an unknown tool never is. Frontmatter holds no regions.
|
|
258
165
|
|
|
259
|
-
|
|
260
|
-
# <Collection>
|
|
166
|
+
## The index
|
|
261
167
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
## <Group>
|
|
265
|
-
- [<Title>](<Group>/<Title>.md) — the blueprint's one-line `summary`, verbatim.
|
|
266
|
-
- [<Title>](<Group>/<Title>.md) — one bullet per blueprint, in file order.
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
**The canvas.** The spatial counterpart: an Obsidian `.canvas` map. Each collection draws the way it declares itself, is its own group, and nests a group per sub-folder; each blueprint's `connects_to` links become directed edges (with `depends_on` optionally overlaid in another color). The generated `.canvas` is itself a top-level doc — register it in `## Top-Level`. The standard ships no generator; the declarations are there for whichever tool draws one.
|
|
168
|
+
The one derived view the standard defines. Every collection's blueprints, under `index`: `id`, `title`, `summary` (null when absent, never invented), `path` relative to the collection, and `group`. Grouped by group when the collection has them, in file order. Any other view is a tool's, written as a top-level doc.
|
|
270
169
|
|
|
271
170
|
## Rules
|
|
272
171
|
|
|
273
|
-
The
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
172
|
+
1. **The frontmatter is the agreement; the body is guidance.** Properties are checked. Sections are recommended.
|
|
173
|
+
2. **The root owns its framework.** A tool reads the framework from the root it is in, never from a copy of its own.
|
|
174
|
+
3. **Validation is framework-defined.** A check enforces that framework's Properties table, nothing hardcoded.
|
|
175
|
+
4. **Surface, never refuse.** A missing required property is added with a note; a missing section is offered. Never refuse the file.
|
|
176
|
+
5. **Write it like a human would read it.** If it reads like filled-in boilerplate, reshape it.
|
|
177
|
+
6. **Reference blueprints with links, not bare names,** in prose and properties alike. `id` sits behind the link.
|
|
178
|
+
7. **One template family per collection, as variants.** What flexes is which sections appear; never their order or names.
|
|
179
|
+
8. **Every property has a type, a meaning, and an owner.** Frontmatter is generated from the required ones, so a new blueprint is born conforming.
|
|
180
|
+
9. **Soft labels are views, not structure.** A category property drives filtering, never structure. `variant` carries the structural choice.
|
|
181
|
+
10. **A collection's grouping is its own.** Every sub-folder is a declared group; a group holds blueprints and nothing deeper.
|
|
182
|
+
11. **A template names its own stable part.** If the stable part changes substantially, ask whether this is a different blueprint.
|
|
183
|
+
12. **Non-goals carry the most weight.** Where a template has a section for what a blueprint will not do, that section is its strongest.
|
|
184
|
+
13. **A template documents its own conventions.** The standard governs folders, templates, variants, and properties; never a section.
|
|
185
|
+
14. **No work-tracking fields.** No sprint, estimate, or assignee; bridge to a tracker with a link. Intent, never progress.
|
|
186
|
+
15. **The Eidos version is a framework fact,** in `eidos_version`, never on a blueprint.
|
|
187
|
+
16. **Loose prose is revised in place.** That is revision, not work status.
|
|
188
|
+
17. **The human authors; the agent facilitates.** Intent, scope, and decisions stay with the person.
|
|
189
|
+
18. **Read `me.md` before acting,** then the role it names. Blank means full facilitation.
|
|
190
|
+
19. **A declared term is the word.** A near-miss is flagged, never swapped silently.
|
|
191
|
+
20. **A region is a tool's, by name.** Inside is the tool's; outside is the person's.
|
|
192
|
+
21. **Everything at the root is declared.** Every folder has a type, every file an entry, and nothing is declared that isn't there.
|
|
294
193
|
|
|
295
194
|
## Versioning
|
|
296
195
|
|
|
297
|
-
Semantic Versioning
|
|
298
|
-
|
|
299
|
-
This file holds the version of **the standard** — right now, **4.5.0** — and it moves only when the text of this file moves. A framework records the version it targets as `eidos_version` in its framework document; `migrate` reads and bumps it there. At tag time this file is copied as-is into `versions/` under its full semver name, so any two releases, even non-adjacent, can be diffed to migrate between them. Worked hops are in `versions/MIGRATIONS.md`. Tools may reject an unsupported version.
|
|
300
|
-
|
|
301
|
-
**The plugin that ships this standard versions separately.** The skills and seeds change far more often than the standard does, so a release that fixes a skill bumps the plugin and leaves this file — and every framework's `eidos_version` — untouched. When you need to know what a framework conforms to, read this version; the plugin's is in `.claude-plugin/plugin.json`, and `CHANGELOG.md` records which standard each plugin release carried.
|
|
196
|
+
Semantic Versioning. This file's version moves only when its text moves; a framework records the version it targets as `eidos_version`. Each release is frozen in `versions/` and the worked hops are in `versions/MIGRATIONS.md`. Tools ship their own version and may reject an unsupported standard.
|
|
302
197
|
|
|
303
198
|
## For an agent
|
|
304
199
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
**
|
|
308
|
-
|
|
309
|
-
**
|
|
310
|
-
|
|
311
|
-
**
|
|
312
|
-
|
|
313
|
-
**Navigate by the leaves.** `README.md` for orientation, the framework document (`_eidos/Framework.md` or `.yaml`) for the full index, each collection's `index.md` for its blueprints (or the document's `index`, in a YAML root). Read these instead of scraping the tree; regenerate them when stale.
|
|
314
|
-
|
|
315
|
-
**Authoring a blueprint:**
|
|
316
|
-
|
|
317
|
-
1. From the framework document, take the Schema, the naming convention, and the target collection's flavors. Pick a flavor (the default unless the owner chooses another) and read its shape for the body. Name the file for its title in the convention; put a permanent kebab-case `id` inside.
|
|
318
|
-
2. Generate frontmatter from the properties that apply to that collection. Fill values from what the owner tells you; leave a property blank rather than guessing it.
|
|
319
|
-
3. Lead with the shape's opening sections and press hardest on its non-goals section. Read those names off the shape rather than assuming them, and follow whatever labeling it asks for. Omit a section that doesn't apply; keep the order and names of the ones that do.
|
|
320
|
-
4. Where the owner is vague, ask. Don't fill the gap with plausible prose.
|
|
321
|
-
|
|
322
|
-
**Validating a blueprint:** check frontmatter against the framework's Schema (`id` kebab-case, dates as `YYYY-MM-DD`, custom properties scoped to the collection). Report missing body sections against *the blueprint's flavor shape*, flagging an absent non-goals section first, and note anything skipping the labeling that shape asks for. Confirm no work-tracking fields crept in. Surface, don't block — the output is a review a human acts on.
|
|
323
|
-
|
|
324
|
-
**Facilitate, don't author.** Format and structure what the owner gives you, supplement, ask, and press on scope. Never invent a blueprint's purpose, decide direction, or hand back a finished blueprint to rubber-stamp. When unsure, ask.
|
|
200
|
+
- **Use the CLI when you have a shell.** Run `eidos instructions`. Without one, the Eidos skills stand in.
|
|
201
|
+
- **Find the root by `.eidos/`,** never by name. Read that framework; never assume a folder, section, or property name. Check `eidos_version` once per session; a gap is one line and an offer, never a block.
|
|
202
|
+
- **Read `me.md` first,** then the role file. Speak the root's declared terms.
|
|
203
|
+
- **Leave plugins and regions to their owners.** Carry them across as found; fault only an opener with no closer.
|
|
204
|
+
- **Navigate by the framework document,** not the tree: `top_level`, `folders`, `index`. Check the root against it and surface what is missing on either side; never invent a description, never delete a file.
|
|
205
|
+
- **Authoring:** take the Properties table, Vocabulary, naming, and the collection's variants; generate frontmatter from the required properties; follow the template's sections, pressing hardest on non-goals; where the owner is vague, ask.
|
|
206
|
+
- **Validating:** frontmatter against every block of the Properties table; body against the blueprint's variant; links resolve; no work-tracking fields; near-misses flagged. Surface, don't block.
|
|
207
|
+
- **Facilitate, don't author.** Never invent a blueprint's purpose or hand back a finished one to rubber-stamp.
|
package/standard/seeds/README.md
CHANGED
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
# Seeds
|
|
2
2
|
|
|
3
|
-
The starting
|
|
3
|
+
The starting frameworks Eidos ships. A seed is a complete `.eidos/` (templates, roles, `Framework.yaml`, `me.md`, `.gitignore`) plus a root `README.md`; `eidos init` installs the one you pick. Reshape it from there.
|
|
4
4
|
|
|
5
|
-
| Seed | For |
|
|
5
|
+
| Seed | For | Folders |
|
|
6
6
|
| --- | --- | --- |
|
|
7
|
-
| [`software/`](software) | a product, service, or system being built | `Frames` (architecture, audience, criteria, market) · `Specs` by domain |
|
|
8
|
-
| [`book/`](book) | a book, long-form argument, or course | `Frames` (premise, reader, voice, market) · `Chapters` by part |
|
|
9
|
-
| [`research/`](research) | a question, a study, or a programme of inquiry | `Frames` (question, prior work, method, ethics) · `Investigations` by strand |
|
|
10
|
-
|
|
11
|
-
Every seed carries the same pieces, so the skills work identically across them:
|
|
7
|
+
| [`software/`](software) | a product, service, or system being built | `Frames` (architecture, audience, criteria, market) · `Specs` by domain · `assets` |
|
|
8
|
+
| [`book/`](book) | a book, long-form argument, or course | `Frames` (premise, reader, voice, market) · `Chapters` by part · `assets` |
|
|
9
|
+
| [`research/`](research) | a question, a study, or a programme of inquiry | `Frames` (question, prior work, method, ethics) · `Investigations` by strand · `assets` |
|
|
12
10
|
|
|
13
11
|
```txt
|
|
14
12
|
<seed>/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.
|
|
20
|
-
README.md
|
|
13
|
+
roles/ # response contracts, one per role
|
|
14
|
+
templates/ # body templates, <unit>.<variant>.md
|
|
15
|
+
.gitignore # keeps me.md and plugins/*/local.yaml out of version control
|
|
16
|
+
Framework.yaml # the framework document
|
|
17
|
+
me.md # blank; who is in the seat (personal)
|
|
18
|
+
README.md # the {{Product}} front door, installed at the root
|
|
21
19
|
```
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
**None of these fit?** Start from the nearest and reshape it, or scaffold your own collections with `configure`.
|
|
21
|
+
Nothing in Eidos knows a folder by name: `software` is the default, and the other two run the same machinery under different words. None fit? Start from the nearest and reshape it with the `eidos` CLI.
|