@dtmd/temper 0.0.16 → 0.0.17

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.
Files changed (2) hide show
  1. package/dist/src/emit.js +15 -1
  2. package/package.json +3 -3
package/dist/src/emit.js CHANGED
@@ -552,9 +552,23 @@ function settingsResidue(harness) {
552
552
  * The harness's composed members by `kind:name` address — the table an embedded value's
553
553
  * edge field resolves its target against. Keyed the identical way {@link declaredAddresses}
554
554
  * spells a member address, so an edge field and a mention name a member the same way.
555
+ *
556
+ * A projected member's address is its file, so two at one address are a collision and
557
+ * refuse loud. A registration member's address is its *group key* — a `hook` registers on
558
+ * its event, and Claude Code admits any number of matcher groups per event — so several
559
+ * legitimately share one address and the table keeps the last composed (the pre-0.0.16
560
+ * reading; an edge targeting that shared address resolves ambiguously, the open fork
561
+ * `(hook-member-identity)` in `.flume/plan/open-questions.md`). Refusing them broke
562
+ * `emit` on every harness with two hooks on one event (0.0.16).
555
563
  */
556
564
  function memberTable(harness) {
557
- return uniqueMap(harness.members.map((member) => [`${member.kind}:${member.name}`, member]));
565
+ const table = uniqueMap(harness.members
566
+ .filter((member) => !isRegistration(member))
567
+ .map((member) => [`${member.kind}:${member.name}`, member]));
568
+ for (const member of harness.members.filter(isRegistration)) {
569
+ table.set(`${member.kind}:${member.name}`, member);
570
+ }
571
+ return table;
558
572
  }
559
573
  /** The harness's projected members as payload members, deterministically kind-then-name ordered. */
560
574
  function orderedMembers(harness, options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtmd/temper",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "description": "The temper authoring face — the six-noun model as typed modules: harness(), kind<T>(), clause values, needs, and file()/text/blocks(). Emit compiles to the declaration rows the engine reads, a byte-faithful projection, and the lock.",
5
5
  "license": "(MIT OR Apache-2.0)",
6
6
  "repository": {
@@ -52,7 +52,7 @@
52
52
  "temper": "bin/temper.js"
53
53
  },
54
54
  "optionalDependencies": {
55
- "@dtmd/temper-linux-x64": "0.0.16",
56
- "@dtmd/temper-win32-x64": "0.0.16"
55
+ "@dtmd/temper-linux-x64": "0.0.17",
56
+ "@dtmd/temper-win32-x64": "0.0.17"
57
57
  }
58
58
  }