@geml/geml 1.7.6 → 1.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skill/SKILL.md +33 -30
- package/skill/references/authoring.geml +22 -0
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -53,6 +53,23 @@ file stay what it is.
|
|
|
53
53
|
If `geml --version` does not answer, none of this is available. Read and edit
|
|
54
54
|
the ordinary way, and do not tell anyone to install anything.
|
|
55
55
|
|
|
56
|
+
## A project moving TO GEML
|
|
57
|
+
|
|
58
|
+
"This project's documents are GEML now" means new documents are authored as
|
|
59
|
+
`.geml` — notes, plans, findings, reports — in one directory (`docs/geml/`
|
|
60
|
+
unless the project says otherwise), one file per topic, with an `index.geml`
|
|
61
|
+
saying what is there and why. It does not mean converting what is already
|
|
62
|
+
written, and nobody has to say "leave the existing files alone" for that to
|
|
63
|
+
hold.
|
|
64
|
+
|
|
65
|
+
**Add, never replace.** Writing a `.geml` version of a document is not licence
|
|
66
|
+
to delete the Markdown it was drawn from — however completely the content was
|
|
67
|
+
carried across, and whatever a "one home per topic" convention seems to imply.
|
|
68
|
+
Deleting a file is a request a person makes, never an inference from a
|
|
69
|
+
convention. When both exist, say in each what it is for and name one of them as
|
|
70
|
+
the place a given fact is maintained: two documents describing a project is
|
|
71
|
+
fine, two documents maintaining the same fact is what drifts.
|
|
72
|
+
|
|
56
73
|
## A GEML document — get the syntax right
|
|
57
74
|
|
|
58
75
|
GEML expresses **every** kind of structured content — code, tables, diagrams,
|
|
@@ -75,9 +92,12 @@ GEML file is correct only when `geml check` reports **no error diagnostics**
|
|
|
75
92
|
`---` breaks, no YAML frontmatter — metadata is a `=== meta` block, and the
|
|
76
93
|
document TITLE lives there (`title = "…"`), not in an H1. A heading may
|
|
77
94
|
carry a stable explicit id: `## Title {#sec}`.
|
|
78
|
-
4. **
|
|
79
|
-
|
|
80
|
-
`other.geml#id`. An
|
|
95
|
+
4. **Give every section a stable `{#id}`** — `## Findings {#findings}` — then
|
|
96
|
+
keep ids unique per document, with **every reference resolving**:
|
|
97
|
+
`[t](#id)`, `[[#id]]`, `[^id]`, `src=`, `data=`, `other.geml#id`. An
|
|
98
|
+
unresolved reference is a build **error**. Naming them is the part that pays
|
|
99
|
+
later: a document with no ids costs what Markdown costs, because there is
|
|
100
|
+
nothing for `geml get` to read or `geml set` to replace short of the file.
|
|
81
101
|
5. **No raw HTML.** Notes → `=== note`, comments → `%%` lines, hidden content
|
|
82
102
|
→ `{hidden}`, addressable prose → `=== text`, verified data → `=== data`
|
|
83
103
|
(json/jsonl; `code` shows text, `data` IS data).
|
|
@@ -108,38 +128,21 @@ geml find "text" file|dir # search block CONTENT -> file<TAB>address
|
|
|
108
128
|
# a directory walks *.geml only
|
|
109
129
|
geml get file.geml '#id' # read ONE block (a heading id = its whole section)
|
|
110
130
|
geml set file.geml '#id' --in f # replace ONE block (re-parsed; never writes a broken doc)
|
|
111
|
-
geml replace file.geml OLD NEW # EXPERIMENTAL literal swap; --within '#id' to narrow
|
|
112
131
|
geml history save file.geml -m "…" # snapshot to .gemlhistory after each meaningful edit
|
|
113
132
|
geml revert file.geml '#id' # roll ONE block back (--rev -2 | changed | <rev-id>)
|
|
114
133
|
```
|
|
115
134
|
|
|
116
135
|
Address a block, never a line range: `#id` · `'## Heading'` (its whole section)
|
|
117
|
-
· `
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
empty one writes an opening where the section had none.
|
|
128
|
-
|
|
129
|
-
When the exact old text is already known and nothing needs reading — a version
|
|
130
|
-
string in six places, a renamed term — `geml replace` is the cheap path, and the
|
|
131
|
-
one to prefer over dropping to `sed`: same two short strings, but the result is
|
|
132
|
-
re-parsed before it lands, the blocks it touched are named back to you, and it
|
|
133
|
-
is in `.gemlhistory` to revert. It swaps a LITERAL, never a pattern, and refuses
|
|
134
|
-
a swap that would rename an id (use `geml rename`, which fixes the references
|
|
135
|
-
too). **It is EXPERIMENTAL and may be withdrawn** — reach for it, but do not
|
|
136
|
-
build anything on it that cannot change.
|
|
137
|
-
|
|
138
|
-
A write is refused when it would break the document, never merely because it
|
|
139
|
-
removes something: a replacement that drops blocks is carried out and NAMED on
|
|
140
|
-
stderr — unnamed blocks included — with `geml revert` as the way back. Read,
|
|
141
|
-
edit, write back, and nothing is dropped, because `get` handed those blocks to
|
|
142
|
-
you. Send content that omits them only when removing them is the point.
|
|
136
|
+
· `L27-58` (the smallest block holding those lines — how a line number from an
|
|
137
|
+
editor, a linter or a diff hunk becomes an address). `list` and `find` print
|
|
138
|
+
addresses that paste straight into the others, so neither `grep` nor a line
|
|
139
|
+
count is needed to locate anything.
|
|
140
|
+
|
|
141
|
+
The rest is one `geml get` away in the reference below, and stays there because
|
|
142
|
+
it is needed rarely and this page is read every time: the remaining address
|
|
143
|
+
forms in `#cli`, and in `#editing` the three ways to cut a section
|
|
144
|
+
(`--head`/`--intro`/`--body`), the experimental `replace`, and what a write that
|
|
145
|
+
drops blocks does.
|
|
143
146
|
|
|
144
147
|
## Full reference — pull ONE section, not the whole file
|
|
145
148
|
|
|
@@ -293,6 +293,28 @@ geml revert file.geml '#intro' --rev changed # …the block's last ACTUAL chang
|
|
|
293
293
|
block) and `history`/`revert` (version and rewind it) let an agent revise a
|
|
294
294
|
document incrementally and undo any single section.
|
|
295
295
|
|
|
296
|
+
**A section can be cut three ways**, on `get` and `set` alike: `--head` (the
|
|
297
|
+
heading line), `--intro` (what it says before its first subheading — empty when
|
|
298
|
+
one follows immediately, the whole body when none does), `--body` (everything
|
|
299
|
+
under it, so it always contains the intro). `--intro` is how you edit a
|
|
300
|
+
section's opening without pulling its subsections into context, and setting an
|
|
301
|
+
empty one writes an opening where the section had none.
|
|
302
|
+
|
|
303
|
+
**When the exact old text is already known** and nothing needs reading — a
|
|
304
|
+
version string in six places, a renamed term — `geml replace` is the cheap path,
|
|
305
|
+
and the one to prefer over dropping to `sed`: the same two short strings, but
|
|
306
|
+
the result is re-parsed before it lands, the blocks it touched are named back to
|
|
307
|
+
you, and it is in `.gemlhistory` to revert. It swaps a LITERAL, never a pattern,
|
|
308
|
+
and refuses a swap that would rename an id (use `geml rename`, which fixes the
|
|
309
|
+
references too). **It is EXPERIMENTAL and may be withdrawn** — reach for it, but
|
|
310
|
+
do not build anything on it that cannot change.
|
|
311
|
+
|
|
312
|
+
**A write is refused when it would BREAK the document**, never merely because it
|
|
313
|
+
removes something: a replacement that drops blocks is carried out and NAMED on
|
|
314
|
+
stderr — unnamed blocks included — with `geml revert` as the way back. Read,
|
|
315
|
+
edit, write back, and nothing is dropped, because `get` handed those blocks to
|
|
316
|
+
you. Send content that omits them only when removing them is the point.
|
|
317
|
+
|
|
296
318
|
**Where sidecars do NOT belong:** a doc that git already versions — config
|
|
297
319
|
docs especially — usually needs no `.gemlhistory`; do not create one there
|
|
298
320
|
unless the user asks for finer-than-commit history.
|