@litfamily/lithermes 1.0.28 → 1.0.30
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 +12 -9
- package/README_Ko-KR.md +12 -9
- package/assets/lithermes-plugin/README.md +15 -2
- package/assets/lithermes-plugin/__init__.py +49 -10
- package/assets/lithermes-plugin/adhd_stack.py +228 -0
- package/assets/lithermes-plugin/core.py +30 -4
- package/assets/lithermes-plugin/core_commands.py +99 -0
- package/assets/lithermes-plugin/core_contexts.py +54 -4
- package/assets/lithermes-plugin/core_contract.py +2 -2
- package/assets/lithermes-plugin/core_routing.py +126 -0
- package/assets/lithermes-plugin/diagnostics.py +3 -2
- package/assets/lithermes-plugin/lit_mark.py +75 -0
- package/assets/lithermes-plugin/payload-version.json +472 -60
- package/assets/lithermes-plugin/plugin.yaml +1 -1
- package/assets/lithermes-plugin/scientific_visualization.py +23 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +7 -7
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/components.css +414 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/fonts.json +42 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/layouts/landing.html +164 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/layouts/settings.html +114 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/layouts/workspace.html +115 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +227 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/styles/field-notes.json +205 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/styles/graphite.json +200 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/styles/meadow.json +199 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +222 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/kit/ui.js +226 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/README.md +2 -4
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +4 -4
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/craft-floor.md +10 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/design-lock.mjs +400 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe-rules.json +6 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe.mjs +76 -4
- package/assets/lithermes-plugin/skills/lit-adhd/SKILL.md +194 -0
- package/assets/lithermes-plugin/skills/lit-adhd/references/brief-contract.md +55 -0
- package/assets/lithermes-plugin/skills/lit-adhd/references/card-examples.md +86 -0
- package/assets/lithermes-plugin/skills/lit-adhd/references/status-taxonomy.md +40 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/adhd.mjs +11 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/collect.mjs +554 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/gauge.mjs +89 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/hermes-sessions.mjs +219 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/next-step.mjs +101 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/plan-task-rows.mjs +32 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/redact.mjs +42 -0
- package/assets/lithermes-plugin/skills/lit-adhd/scripts/lib/secret-shapes.mjs +59 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/SKILL.md +7 -4
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/style-guide.md +20 -11
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-architecture.md +3 -3
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dependency.md +1 -1
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-tree.md +3 -3
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-wardley.md +1 -1
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/verifier-guide.md +5 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_quality.py +4 -4
- package/assets/lithermes-plugin/skills/lit-docx/SKILL.md +1 -1
- package/assets/lithermes-plugin/skills/lit-hijack/SKILL.md +239 -0
- package/assets/lithermes-plugin/skills/lit-hijack/references/capture-and-provenance.md +123 -0
- package/assets/lithermes-plugin/skills/lit-hijack/references/clean-room-build.md +128 -0
- package/assets/lithermes-plugin/skills/lit-hijack/references/distil-and-licence.md +128 -0
- package/assets/lithermes-plugin/skills/lit-hijack/references/gap-and-port-design.md +152 -0
- package/assets/lithermes-plugin/skills/lit-hijack/references/parity-and-report.md +131 -0
- package/assets/lithermes-plugin/skills/lit-hijack/scripts/hijack.mjs +995 -0
- package/assets/lithermes-plugin/skills/lit-plan/SKILL.md +1 -0
- package/assets/lithermes-plugin/skills/lit-pptx/SKILL.md +11 -6
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +93 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/provenance.json +1 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/anti-slop-checklist.md +3 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/authoring-guide.md +1 -1
- package/assets/lithermes-plugin/skills/lit-pptx/references/consensus-protocol.md +1 -1
- package/assets/lithermes-plugin/skills/lit-pptx/references/direction-step.md +8 -2
- package/assets/lithermes-plugin/skills/lit-pptx/references/examples/13-engineering-review-computational-brutalism-ko.md +175 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/examples/14-launch-pitch-neo-brutalism-ko.md +156 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/examples/15-design-lecture-bauhaus-ko.md +141 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/examples/16-community-programme-riso-ko.md +160 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/examples/17-public-data-briefing-newsroom-ko.md +183 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/layout-families.md +1 -1
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/bauhaus.md +105 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/computational-brutalism.md +111 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/neo-brutalism.md +114 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/newsroom.md +106 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/riso.md +101 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/craft_extras.py +49 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/deck_output.py +4 -2
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-pack.js +96 -10
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +50 -6
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +103 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +99 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +107 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +99 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/riso/pack.yaml +99 -0
- package/assets/lithermes-plugin/skills/lit-recap/SKILL.md +1 -1
- package/assets/lithermes-plugin/skills/lit-schematic/SKILL.md +144 -0
- package/assets/lithermes-plugin/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +38 -0
- package/assets/lithermes-plugin/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +133 -0
- package/assets/lithermes-plugin/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +87 -0
- package/assets/lithermes-plugin/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +85 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/cutaway-outputs.md +70 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/isometric-craft.md +101 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/journal-figures.md +72 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/kit-api.md +134 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/pfd-and-layout.md +53 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/pid-drafting.md +103 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/pid-symbols.md +163 -0
- package/assets/lithermes-plugin/skills/lit-schematic/references/verification.md +100 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/doctor.mjs +57 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/figure.mjs +81 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/fonts.mjs +27 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/geom.mjs +113 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/interactive.mjs +292 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/isa.mjs +115 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/iso.mjs +719 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/legend-sheet.mjs +162 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/pid.mjs +937 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/png.mjs +132 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/qa-core.mjs +658 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/route.mjs +218 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/sheet.mjs +890 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/svg.mjs +82 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/lib/theme.mjs +115 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/motion.mjs +129 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/qa.mjs +92 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/render.mjs +233 -0
- package/assets/lithermes-plugin/skills/lit-schematic/scripts/scaffold.mjs +60 -0
- package/assets/lithermes-plugin/skills/lit-scientific-visualization/SKILL.md +19 -1
- package/assets/lithermes-plugin/skills/lit-typographic-motion/SKILL.md +12 -11
- package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/motion.mjs +56 -2
- package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/runtime.mjs +129 -4
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/THIRD_PARTY_NOTICES +9 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/blender/runner.py +218 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/blender.mjs +154 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/board.mjs +132 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/completion.mjs +48 -5
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/gate.mjs +13 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/house.mjs +44 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/scaffold.mjs +238 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/score.mjs +643 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/sound-dsp.mjs +21 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/sound.mjs +171 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-qa.mjs +23 -3
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage.mjs +124 -17
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/styles.mjs +240 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/treatment.mjs +152 -10
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/vendor/three/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/vendor/three/addons/environments/RoomEnvironment.js +144 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/vendor/three/addons/geometries/RoundedBoxGeometry.js +155 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/vendor/three/three.module.js +54571 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/recipes/hero-3d/expected.json +67 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/recipes/hero-3d/index.html +139 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/depth.md +74 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/studio.md +87 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/style-bibles.md +9 -2
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/treatment.md +24 -8
- package/assets/lithermes-plugin/skills/lit-typographic-motion/styles/paper.json +41 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/styles/swiss-signal.json +41 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/styles/terminalcore.json +42 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/styles/tidal.json +41 -0
- package/assets/lithermes-plugin/skills/litresearch/SKILL.md +4 -0
- package/assets/lithermes-plugin/skills/readme-studio/SKILL.md +1 -1
- package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/package-lock.json +3 -3
- package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/package-lock.json +3 -3
- package/assets/lithermes-plugin/skills/review-work/SKILL.md +2 -0
- package/assets/lithermes-plugin/skills/start-work/SKILL.md +2 -1
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +3 -3
- package/package.json +1 -1
- package/readme-assets/badge-version.svg +1 -1
- package/src/lib/skillPayload.js +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Distil and licence
|
|
2
|
+
|
|
3
|
+
Distilling turns sources into mechanism cards: what a technique does, why it works, and how sure
|
|
4
|
+
anyone can be. The licence gate then decides, per source, what the port may take. Both steps are
|
|
5
|
+
about separating the transferable method from the author's expression of it.
|
|
6
|
+
|
|
7
|
+
## Mechanism, evidence, opinion
|
|
8
|
+
|
|
9
|
+
A source usually mixes three things. Keep them apart on every card.
|
|
10
|
+
|
|
11
|
+
| Part | What it looks like | Where it goes |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| Mechanism | A step, rule, structure, check or default that produces an effect | `what` and `why` |
|
|
14
|
+
| Evidence | A measurement, a before/after, a reproducible example, a failure story with a cause | `evidence` and `evidence_note` |
|
|
15
|
+
| Opinion | Taste, prediction, preference, a confident claim without support | a card marked `opinion`, or nowhere |
|
|
16
|
+
|
|
17
|
+
Evidence classes:
|
|
18
|
+
|
|
19
|
+
- `evidenced`: someone measured it, showed comparable outputs, or the mechanism can be reproduced
|
|
20
|
+
from the description and you reproduced it.
|
|
21
|
+
- `anecdotal`: a practitioner reports it worked for them, with enough detail to understand why, and
|
|
22
|
+
without a measurement.
|
|
23
|
+
- `opinion`: a stance or a style choice. Still worth porting when it fits the target, and the report
|
|
24
|
+
says it was taken on taste.
|
|
25
|
+
|
|
26
|
+
A post that is mostly opinion can still carry one solid mechanism. A post full of numbers can carry
|
|
27
|
+
none you can use. Judge each card on its own.
|
|
28
|
+
|
|
29
|
+
## Writing a card
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"id": "M1",
|
|
34
|
+
"title": "Production brief before any render",
|
|
35
|
+
"sources": ["S1", "S3"],
|
|
36
|
+
"locator": "S1 section 1; S3 pages 4-6",
|
|
37
|
+
"what": "A short production note fixes the takeaway, the allowed references, the real assets and the rejection condition before the first frame is drawn.",
|
|
38
|
+
"why": "Any decision left open gets filled by the model's default, and those defaults are why unrelated outputs look alike.",
|
|
39
|
+
"evidence": "anecdotal",
|
|
40
|
+
"evidence_note": "Two practitioners report it; neither measured it."
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Write `what` as behaviour someone could observe in the target after the port, and `why` as the
|
|
45
|
+
failure the mechanism prevents. If the only way you can phrase a card is the author's sentence, you
|
|
46
|
+
have the sentence and not yet the mechanism; reread the source, close it, and explain it as you would
|
|
47
|
+
to a colleague.
|
|
48
|
+
|
|
49
|
+
Merge cards that describe one technique from several sources, and name every source on the merged
|
|
50
|
+
card. Keep a card that only one source has. Split a card that bundles two techniques with different
|
|
51
|
+
evidence.
|
|
52
|
+
|
|
53
|
+
## What is worth porting
|
|
54
|
+
|
|
55
|
+
Four questions decide whether a card can earn a place in the target:
|
|
56
|
+
|
|
57
|
+
1. **Is it new?** Run the target's typical task once without help and see whether the base model
|
|
58
|
+
already does this. A mechanism the model follows unaided is no gain.
|
|
59
|
+
2. **Is it a mechanism or a mood?** "Make it feel premium" is a mood. "Limit the palette to three
|
|
60
|
+
tokens declared before the build" is a mechanism.
|
|
61
|
+
3. **Can the target hold it?** Some techniques need surfaces the target lacks (a renderer, a hook
|
|
62
|
+
event, a runtime). Note the missing surface rather than faking it.
|
|
63
|
+
4. **Can its effect be seen?** If no output would differ after the port, the parity step cannot prove
|
|
64
|
+
it. Find the marker before you take it.
|
|
65
|
+
|
|
66
|
+
## Good theft, as a checklist
|
|
67
|
+
|
|
68
|
+
The old artist's distinction between good and bad theft maps cleanly onto this skill:
|
|
69
|
+
|
|
70
|
+
| Good | Bad | In a hijack run |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| Honour the source | Degrade it | Credit in the report; represent the source's claims fairly |
|
|
73
|
+
| Study it | Skim it | Read every captured source in full before writing cards |
|
|
74
|
+
| Steal from many | Steal from one | Merge techniques across sources; compare them |
|
|
75
|
+
| Credit | Plagiarise | Provenance rows, and a shipped credit line where the licence asks |
|
|
76
|
+
| Transform | Imitate | Re-express in the target's idiom, structure and examples |
|
|
77
|
+
| Remix | Rip off | Combine with what the target already does well |
|
|
78
|
+
|
|
79
|
+
## The licence table
|
|
80
|
+
|
|
81
|
+
Ideas, procedures, methods and facts are outside copyright in most legal systems; the expression of
|
|
82
|
+
them is protected. That split is why every decision below permits mechanisms and none permits
|
|
83
|
+
wording. `hijack.mjs licence` applies this table from the captured licence evidence:
|
|
84
|
+
|
|
85
|
+
| Licence evidence | Class | Decision | Reason |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| MIT, ISC, BSD-2/3-Clause, Apache-2.0, Zlib, BSL-1.0 | permissive | `ideas-credit` | Reuse is allowed; the port takes mechanisms only and ships a credit line |
|
|
88
|
+
| 0BSD, Unlicense, CC0-1.0 | permissive | `ideas-credit` | No conditions; credit is a courtesy the target still pays |
|
|
89
|
+
| CC BY | attribution | `ideas-credit` | The licence asks for credit when material is shared; credit the ideas too |
|
|
90
|
+
| GPL, LGPL, AGPL, MPL, EPL, CC BY-SA | copyleft | `ideas-only` | Copying would pull the target under the source's terms; keep the implementer away from the source |
|
|
91
|
+
| CC BY-NC, CC BY-ND | restricted | `ideas-only` | Commercial use or shared adaptations are barred; mechanisms only |
|
|
92
|
+
| None found (`NOASSERTION`) | unlicensed | `ideas-only` | Default copyright: all rights reserved; posts, blogs, PDFs and most gists land here |
|
|
93
|
+
| Anything else | unrecognised | `ideas-only` | Treated as all rights reserved until a person says otherwise |
|
|
94
|
+
| Text that states reuse terms | restricted-terms | `needs-review` | "do not copy", "no part of this", "source-available", "proprietary", "confidential" |
|
|
95
|
+
|
|
96
|
+
`needs-review` blocks the licence phase until a person decides:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
$H licence <run> --set S4=ideas-only --reason "copyright page restricts reproduction; we take the method only"
|
|
100
|
+
$H licence <run> --set S5=no-go --reason "material was shared privately"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
A user decision is kept on later `licence` runs. Record the reason in plain words.
|
|
104
|
+
|
|
105
|
+
`no-go` applies whatever the licence says when the capture crossed a login or paywall, when the
|
|
106
|
+
material is leaked, private or confidential, or when terms forbid the use you intend. A mechanism
|
|
107
|
+
that rests only on no-go sources stays out; one that also has an allowed source may be taken on that
|
|
108
|
+
source alone, and its card says so.
|
|
109
|
+
|
|
110
|
+
## Credit lines
|
|
111
|
+
|
|
112
|
+
For `ideas-credit` sources the target ships a short notice, in the style the target already uses
|
|
113
|
+
(an `ATTRIBUTION.md` beside a skill is common). Each entry names the work, the author, the URL, the
|
|
114
|
+
licence, and one sentence on what idea was adapted and that no text or code was reused. For
|
|
115
|
+
`ideas-only` sources the report carries the credit, and the target carries it too when the user
|
|
116
|
+
wants it; ask once.
|
|
117
|
+
|
|
118
|
+
Credit is ethics and courtesy. It leaves the legal position of a copy unchanged, which is why the
|
|
119
|
+
build never copies in the first place.
|
|
120
|
+
|
|
121
|
+
## Jurisdiction and limits
|
|
122
|
+
|
|
123
|
+
Quotation rules, moral rights and the line between idea and expression differ between countries,
|
|
124
|
+
and close paraphrase or copied structure can still infringe where words differ. This procedure
|
|
125
|
+
lowers risk; it does not certify anything. When a source matters commercially and its terms are
|
|
126
|
+
unclear, tell the user once and let them decide. Patents and trademarks sit outside this gate:
|
|
127
|
+
re-expressing a method leaves a patent on it untouched, and a source's product names are not yours
|
|
128
|
+
to reuse.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Gap analysis and port design
|
|
2
|
+
|
|
3
|
+
The gap analysis decides which mechanisms the target needs; the port design decides what each one
|
|
4
|
+
becomes inside the target. Both are written against the target as it was at the base revision.
|
|
5
|
+
|
|
6
|
+
## Read the target first
|
|
7
|
+
|
|
8
|
+
Before judging any gap, read:
|
|
9
|
+
|
|
10
|
+
- the target's `AGENTS.md`, `CLAUDE.md` and README, for its rules and its voice;
|
|
11
|
+
- every file of the skill or module being changed: the entrypoint, every reference, every script,
|
|
12
|
+
every asset that carries behaviour;
|
|
13
|
+
- every test that names the target, and the guards that pin its files (payload pins, corpus floors,
|
|
14
|
+
route tests);
|
|
15
|
+
- for a plugin, how a neighbouring skill of similar weight is enrolled, so you know which surfaces a
|
|
16
|
+
complete port must touch.
|
|
17
|
+
|
|
18
|
+
For a new target (`init --new`), read the neighbouring skills of the product it will join instead,
|
|
19
|
+
and treat every mechanism as `lacks` with `gap.searched` naming what you compared against.
|
|
20
|
+
|
|
21
|
+
## Gap fields
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
"gap": {
|
|
25
|
+
"status": "weak",
|
|
26
|
+
"refs": ["skills/motion/SKILL.md:120-134", "skills/motion/scripts/render.mjs:88"],
|
|
27
|
+
"note": "The skill asks for a treatment in prose; the render script starts without one."
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- `status` is `has`, `weak` or `lacks`.
|
|
32
|
+
- `refs` are `path:line` or `path:start-end`, relative to the target root. The gate resolves each
|
|
33
|
+
one at the base revision (`git show <base>:<path>`) and fails when the file or the line is
|
|
34
|
+
missing, so a gap claim always points at text that existed when you judged it.
|
|
35
|
+
- A `lacks` claim with empty refs needs `searched`: the terms and places you searched
|
|
36
|
+
("grep for brief|treatment in skills/motion/ and its tests; no gate before render").
|
|
37
|
+
- `note` is one sentence a reviewer can check against the refs.
|
|
38
|
+
|
|
39
|
+
How to judge the status:
|
|
40
|
+
|
|
41
|
+
| Status | The target… |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `has` | does it, and something enforces it: a script, a hook, a test, a gate |
|
|
44
|
+
| `weak` | does part of it, does it only sometimes, or states it in prose with nothing enforcing it |
|
|
45
|
+
| `lacks` | neither does nor states it |
|
|
46
|
+
|
|
47
|
+
Prose that tells the model to do something, with no mechanism behind it, is usually `weak`. In this
|
|
48
|
+
product, measured A/B runs found contract prose alone left behaviour unchanged, while mechanical
|
|
49
|
+
checks moved it. A gap that a gate would close is often the most valuable port.
|
|
50
|
+
|
|
51
|
+
## Port decisions
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
"port": { "decision": "adapt", "reason": "Strengthen the existing treatment step with a render gate." }
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `take`: the target lacks it and should gain it.
|
|
58
|
+
- `adapt`: the target has part of it; strengthen or complete it.
|
|
59
|
+
- `leave`: keep it out, with the reason. Good reasons: the target already has it; the base model
|
|
60
|
+
already does it unaided; the licence gate forbids it; it conflicts with the target's design; its
|
|
61
|
+
evidence is too thin for its cost; the target lacks a surface it needs.
|
|
62
|
+
|
|
63
|
+
The gate rejects `take` on a `has` gap (use `adapt` or `leave`) and any taken mechanism whose only
|
|
64
|
+
sources are `no-go`.
|
|
65
|
+
|
|
66
|
+
## Re-expressing in the target's idiom
|
|
67
|
+
|
|
68
|
+
A port lands well when a reader of the target cannot tell which parts came from elsewhere, because
|
|
69
|
+
everything is in the target's own terms. For each taken mechanism decide:
|
|
70
|
+
|
|
71
|
+
| Question | Answer from the target, not the source |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| What is it called? | The target's naming pattern and vocabulary |
|
|
74
|
+
| Where does it live? | The file the target would naturally put it in |
|
|
75
|
+
| What enforces it? | The target's own script, hook, gate or test style |
|
|
76
|
+
| How is it invoked? | The target's routes, commands, flags or events |
|
|
77
|
+
| How is it tested? | The target's test framework and fixtures |
|
|
78
|
+
| How does it ship? | The target's manifest, payload pins and package rules |
|
|
79
|
+
| How do users learn of it? | The target's help, listing, README and docs |
|
|
80
|
+
|
|
81
|
+
Map the source's idea onto the target's surfaces; never carry the source's surfaces across. When a
|
|
82
|
+
source describes a folder layout or a file format, design the target's own, shaped by the target's
|
|
83
|
+
existing conventions.
|
|
84
|
+
|
|
85
|
+
## Enrollment surfaces for a Hermes plugin target
|
|
86
|
+
|
|
87
|
+
A capability in a Hermes plugin is reachable only through the surfaces the host and the plugin
|
|
88
|
+
read. When the target is a plugin skill, list every surface the port touches:
|
|
89
|
+
|
|
90
|
+
- the skill entrypoint (`skills/<id>/SKILL.md`) and its references, scripts and assets;
|
|
91
|
+
- the plugin's skill catalog and any resource or payload pins the plugin keeps;
|
|
92
|
+
- the slash command file, when the capability has a command;
|
|
93
|
+
- the prompt hook's routes and mode contract, when it has a natural-language route;
|
|
94
|
+
- agents, settings defaults and MCP or LSP config, when the capability uses them;
|
|
95
|
+
- user-facing listings: README skill tables, guides, help or doctor output;
|
|
96
|
+
- the package's file list and pack guard, so the installed copy carries the new files;
|
|
97
|
+
- tests that fail when any of the above loses the capability (an orphan test).
|
|
98
|
+
|
|
99
|
+
For other systems, find the equivalent list first: the registry, the router, the config, the
|
|
100
|
+
installer, the docs and the tests. A port that skips one of them is a ghost: the file exists and
|
|
101
|
+
nothing reaches it.
|
|
102
|
+
|
|
103
|
+
Each product in a family is its own target. A port into one product never copies files into a
|
|
104
|
+
sibling and never adds a dependency between them; when the user wants the same capability elsewhere,
|
|
105
|
+
each sibling gets its own run and its own re-expression.
|
|
106
|
+
|
|
107
|
+
## SPEC.md template
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
# <target>: <one-line purpose of this port>
|
|
111
|
+
|
|
112
|
+
Target root: <path> · base revision: <rev>
|
|
113
|
+
Taken: M1, M4 · left: M2, M3, M5 (see the run report)
|
|
114
|
+
|
|
115
|
+
## M1 <title in the target's words>
|
|
116
|
+
|
|
117
|
+
Behaviour: <what the target will do afterwards, observable>
|
|
118
|
+
Lives in: <files and surfaces in the target>
|
|
119
|
+
Enforced by: <script, hook, gate or test>
|
|
120
|
+
Acceptance:
|
|
121
|
+
- <check 1, runnable>
|
|
122
|
+
- <check 2, runnable>
|
|
123
|
+
Parity: <criterion> · marker: <text the new behaviour leaves in its output>
|
|
124
|
+
Enrollment: <catalog, route, docs, pins, tests this section touches>
|
|
125
|
+
Out of scope: <what this section leaves alone>
|
|
126
|
+
|
|
127
|
+
## M4 <title>
|
|
128
|
+
…
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Write the spec from the mechanism cards and the target, with the sources closed. Use the target's
|
|
132
|
+
examples and the target's order. The spec gate rejects a section-less mechanism, a path into
|
|
133
|
+
`sources/`, a source URL, and any run of 12 or more words shared with a capture; it warns when three
|
|
134
|
+
or more headings match a source's headings, because copied structure is still copying.
|
|
135
|
+
|
|
136
|
+
## Fields the parity step needs from the spec
|
|
137
|
+
|
|
138
|
+
Fill these while writing the spec, so the proof is designed before the build:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
"parity": {
|
|
142
|
+
"criterion": "A brief from the skill names the takeaway and the rejection condition.",
|
|
143
|
+
"red": "Old skill: brief has neither field.",
|
|
144
|
+
"green": "New skill: brief has both fields in every run.",
|
|
145
|
+
"surface": "host CLI in a throwaway workspace with a throwaway HERMES_HOME, old and new skill loaded the same way",
|
|
146
|
+
"artifact": "parity/contact-sheet.png"
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
and on the ledger, `parity.markers`: short strings the new behaviour leaves in its output and the
|
|
151
|
+
old behaviour does not. Pick markers that only the mechanism produces (a field name, a gate's
|
|
152
|
+
refusal line, a file the new step writes), so a marker in a baseline output means contamination.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Parity proof and report
|
|
2
|
+
|
|
3
|
+
A port is proven by two observations: the capability fires on the surface a user touches, and the
|
|
4
|
+
new target behaves differently from the old one on the same prompt. Green tests and new files are
|
|
5
|
+
necessary and never sufficient. Ports in this product have passed every gate while being
|
|
6
|
+
unreachable, and A/B runs have measured nothing because the baseline could read the treatment; this
|
|
7
|
+
step exists to catch both.
|
|
8
|
+
|
|
9
|
+
## 1. Reachability
|
|
10
|
+
|
|
11
|
+
Drive the real entry point, read what comes back, then break the wiring and watch the probe fail.
|
|
12
|
+
|
|
13
|
+
| Target surface | Probe | Break it by |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| Prompt-hook route | Pipe a `UserPromptSubmit` JSON payload into the hook and assert the skill is named in the returned context | Removing the route entry |
|
|
16
|
+
| Slash command | Run the host with the plugin loaded and the command, and read the transcript | Deleting the command file |
|
|
17
|
+
| Skill discovery | A host CLI prompt that should load the skill, with the transcript showing the skill loaded | Changing the description |
|
|
18
|
+
| Script or gate | Run the installed copy's script on a fixture that should fail and one that should pass | Reverting the gate |
|
|
19
|
+
| Package payload | Pack the package and list the files (read the JSON listing, not the human text) | Removing the file from the allowlist |
|
|
20
|
+
|
|
21
|
+
A probe that cannot fail proves nothing; record the broken run beside the passing one.
|
|
22
|
+
|
|
23
|
+
## 2. An isolated baseline
|
|
24
|
+
|
|
25
|
+
The baseline is the target at the base revision, in a place where the new work cannot be read:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
git -C <target root> worktree add <lane folder>/parity-base <base_ref>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
or the snapshot copied in Phase 0. Check the isolation before running anything: the baseline
|
|
32
|
+
folder has none of the new files, `git log` inside it stops at the base revision, and the run
|
|
33
|
+
folder, the spec and the diff are outside any path the baseline session can reach. When the target
|
|
34
|
+
lives in a repo the baseline session could explore, run the baseline from a copy outside that repo.
|
|
35
|
+
|
|
36
|
+
## 3. Running both arms
|
|
37
|
+
|
|
38
|
+
Choose prompts the spec never used as examples: a held-out prompt shows the behaviour generalises,
|
|
39
|
+
while a prompt copied from the spec only shows the spec was followed.
|
|
40
|
+
|
|
41
|
+
For a Hermes skill or plugin target, run each arm as a real session in its own throwaway
|
|
42
|
+
workspace, each with its own throwaway `HERMES_HOME` holding only that arm's plugin copy:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
HERMES_HOME=<baseline home> <host CLI> "<held-out prompt naming the skill id>"
|
|
46
|
+
HERMES_HOME=<treatment home> <host CLI> "<held-out prompt naming the skill id>"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- Load both arms the same way, so the only difference is the port.
|
|
50
|
+
- Keep any other installed copy of the same plugin out of both homes, or two versions of its hooks will both fire.
|
|
51
|
+
- Install from a copy you control, never from the host's installed plugin cache.
|
|
52
|
+
- For a project skill, give each arm its own workspace holding its own skill copy.
|
|
53
|
+
- Keep the runs cheap: a small prompt, one model.
|
|
54
|
+
- Run each arm at least twice when its output varies. One sample can mislead.
|
|
55
|
+
|
|
56
|
+
For a code target, run the target's tests and its real command on both revisions, and save the
|
|
57
|
+
outputs.
|
|
58
|
+
|
|
59
|
+
Save every output under `parity/` (`baseline-1.md`, `treatment-1.md`, …) and list them:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
"parity": {
|
|
63
|
+
"baseline_outputs": ["parity/baseline-1.md", "parity/baseline-2.md"],
|
|
64
|
+
"treatment_outputs": ["parity/treatment-1.md", "parity/treatment-2.md"],
|
|
65
|
+
"markers": ["Rejection condition"]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The parity gate then requires every marker in every treatment output and in no baseline output. A
|
|
70
|
+
marker missing from a treatment output means the port changed behaviour unreliably. A marker in a
|
|
71
|
+
baseline output means the baseline saw the new work, or the target already had the behaviour and the
|
|
72
|
+
gap was imaginary. Either way the proof is void until fixed. Before trusting a tie or a surprising
|
|
73
|
+
win, grep the baseline transcript for the treatment's distinctive identifiers (file names, section
|
|
74
|
+
names, the skill's own terms); any hit voids the comparison.
|
|
75
|
+
|
|
76
|
+
## 4. Visual outputs
|
|
77
|
+
|
|
78
|
+
When the target makes images, films, slides, documents or pages, the user judges them by eye. Render
|
|
79
|
+
the baseline and treatment outputs side by side on one contact sheet (rows for arms, columns for
|
|
80
|
+
runs), save it under `parity/`, and show it. Machine checks such as overlap or layout scores are
|
|
81
|
+
geometry checks; call them that. Headless browsers used for renders take
|
|
82
|
+
`--use-mock-keychain --password-store=basic` so no keychain dialog interrupts the user.
|
|
83
|
+
|
|
84
|
+
The sample output is evidence that the port works. Polishing that one sample is a different task;
|
|
85
|
+
offer it only when the user asks.
|
|
86
|
+
|
|
87
|
+
## 5. The report
|
|
88
|
+
|
|
89
|
+
`REPORT.md` lives in the run folder. The gate requires the three headings, every mechanism id,
|
|
90
|
+
every source's URL or path, and a credit notice for every `ideas-credit` source that fed a taken
|
|
91
|
+
mechanism.
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
# Port report: <title>
|
|
95
|
+
|
|
96
|
+
Target: <root> at <base revision> → <new revision or working tree>
|
|
97
|
+
Run: .hermes/lithermes/runs/hijack-<slug>/ · gate: check --phase report PASS
|
|
98
|
+
|
|
99
|
+
## Taken
|
|
100
|
+
- M1 <title>: <where it lives now> · parity: marker in 2/2 treatment runs, 0/2 baseline runs
|
|
101
|
+
- M4 <title>: …
|
|
102
|
+
|
|
103
|
+
## Left
|
|
104
|
+
- M2 <title>: the target already enforces it (<path:line>)
|
|
105
|
+
- M3 <title>: opinion with no gain over the base model in a probe run
|
|
106
|
+
- M5 <title>: rests only on S5, which is no-go
|
|
107
|
+
|
|
108
|
+
## Provenance
|
|
109
|
+
| Id | Source | Author | Published | Retrieved | Licence | Decision |
|
|
110
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
111
|
+
| S1 | https://… | … | … | … | NOASSERTION | ideas-only |
|
|
112
|
+
|
|
113
|
+
## Exposure
|
|
114
|
+
The spec writer read every source. The implementer worked from SPEC.md in an isolated worktree
|
|
115
|
+
(or: in the same context, degraded path). The model may have met these sources before. No run of
|
|
116
|
+
12 or more words is shared with any capture; headings were checked for structural echoes.
|
|
117
|
+
|
|
118
|
+
## Credit
|
|
119
|
+
<attribution notice path, or "credit lives in this report">
|
|
120
|
+
|
|
121
|
+
## Review by
|
|
122
|
+
<date, and what would make this port stale: a model change, a target redesign, a new source>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 6. Closing the run
|
|
126
|
+
|
|
127
|
+
1. `hijack.mjs check <run> --phase report` passes.
|
|
128
|
+
2. The reply to the user says what was taken and left, the parity result in a sentence, the contact
|
|
129
|
+
sheet when there is one, and the report path.
|
|
130
|
+
3. Offer `review-work` for a work review of the diff; its provenance lane reads the run folder.
|
|
131
|
+
4. The run folder stays local and out of commits. Commits, pushes and releases wait for the user.
|