@zh-xx/antu 0.9.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.
Files changed (118) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +11 -0
  3. package/THIRD-PARTY-NOTICES.md +739 -0
  4. package/assets/viewer.html +1503 -0
  5. package/bin/antu-mcp.mjs +1549 -0
  6. package/bin/antu.mjs +1494 -0
  7. package/examples/agent/fact/1-minimal.en.json +57 -0
  8. package/examples/agent/fact/1-minimal.zh-CN.json +29 -0
  9. package/examples/agent/fact/2-single-actor.en.json +66 -0
  10. package/examples/agent/fact/2-single-actor.zh-CN.json +28 -0
  11. package/examples/agent/fact/3-groups.en.json +34 -0
  12. package/examples/agent/fact/3-groups.zh-CN.json +34 -0
  13. package/examples/agent/fact/4-views.en.json +44 -0
  14. package/examples/agent/fact/4-views.zh-CN.json +44 -0
  15. package/examples/agent/fact/5-duration.en.json +28 -0
  16. package/examples/agent/fact/5-duration.zh-CN.json +28 -0
  17. package/examples/agent/fact/6-sources.en.json +30 -0
  18. package/examples/agent/fact/6-sources.zh-CN.json +30 -0
  19. package/examples/agent/fact/7-undated.en.json +34 -0
  20. package/examples/agent/fact/7-undated.zh-CN.json +34 -0
  21. package/examples/agent/justification/1-minimal.en.json +83 -0
  22. package/examples/agent/justification/1-minimal.zh-CN.json +83 -0
  23. package/examples/agent/justification/2-against-and-rejected.en.json +82 -0
  24. package/examples/agent/justification/2-against-and-rejected.zh-CN.json +82 -0
  25. package/examples/agent/justification/3-issues.en.json +107 -0
  26. package/examples/agent/justification/3-issues.zh-CN.json +107 -0
  27. package/examples/agent/justification/4-shared-fact.en.json +111 -0
  28. package/examples/agent/justification/4-shared-fact.zh-CN.json +111 -0
  29. package/examples/agent/justification/5-sources.en.json +97 -0
  30. package/examples/agent/justification/5-sources.zh-CN.json +97 -0
  31. package/examples/agent/justification/6-all-or-any.en.json +98 -0
  32. package/examples/agent/justification/6-all-or-any.zh-CN.json +98 -0
  33. package/examples/agent/procedure/1-minimal.en.json +15 -0
  34. package/examples/agent/procedure/1-minimal.zh-CN.json +15 -0
  35. package/examples/agent/procedure/2-decision.en.json +17 -0
  36. package/examples/agent/procedure/2-decision.zh-CN.json +17 -0
  37. package/examples/agent/procedure/3-branches.en.json +22 -0
  38. package/examples/agent/procedure/3-branches.zh-CN.json +22 -0
  39. package/examples/agent/procedure/4-stages.en.json +34 -0
  40. package/examples/agent/procedure/4-stages.zh-CN.json +34 -0
  41. package/examples/agent/procedure/5-inferred-spine.en.json +21 -0
  42. package/examples/agent/procedure/5-inferred-spine.zh-CN.json +21 -0
  43. package/examples/agent/procedure/6-merged-edges.en.json +19 -0
  44. package/examples/agent/procedure/6-merged-edges.zh-CN.json +19 -0
  45. package/examples/agent/procedure/7-rules.en.json +30 -0
  46. package/examples/agent/procedure/7-rules.zh-CN.json +30 -0
  47. package/examples/agent/relationship/1-minimal.en.json +28 -0
  48. package/examples/agent/relationship/1-minimal.zh-CN.json +28 -0
  49. package/examples/agent/relationship/2-equity.en.json +59 -0
  50. package/examples/agent/relationship/2-equity.zh-CN.json +59 -0
  51. package/examples/agent/relationship/3-guarantee.en.json +51 -0
  52. package/examples/agent/relationship/3-guarantee.zh-CN.json +51 -0
  53. package/examples/agent/relationship/4-groups.en.json +68 -0
  54. package/examples/agent/relationship/4-groups.zh-CN.json +68 -0
  55. package/examples/agent/relationship/5-kinship.en.json +69 -0
  56. package/examples/agent/relationship/5-kinship.zh-CN.json +69 -0
  57. package/examples/fact/fang-yuan-loan-and-conflict.en.json +330 -0
  58. package/examples/fact/fang-yuan-loan-and-conflict.zh-CN.json +237 -0
  59. package/examples/fact/gym-membership-face-scan.en.json +181 -0
  60. package/examples/fact/gym-membership-face-scan.zh-CN.json +181 -0
  61. package/examples/fact/lin-fang-v-zhao-lei-private-lending.en.json +122 -0
  62. package/examples/fact/lin-fang-v-zhao-lei-private-lending.zh-CN.json +122 -0
  63. package/examples/fact/marketplace-platform-liability.en.json +192 -0
  64. package/examples/fact/marketplace-platform-liability.zh-CN.json +192 -0
  65. package/examples/fact/neighbour-corridor-charging.en.json +201 -0
  66. package/examples/fact/neighbour-corridor-charging.zh-CN.json +201 -0
  67. package/examples/fact/sample-construction-payment.en.json +220 -0
  68. package/examples/fact/sample-construction-payment.zh-CN.json +139 -0
  69. package/examples/fact/sample-four-parties-four-slots.en.json +202 -0
  70. package/examples/fact/sample-four-parties-four-slots.zh-CN.json +121 -0
  71. package/examples/fact/sample-no-groups.en.json +100 -0
  72. package/examples/fact/sample-no-groups.zh-CN.json +100 -0
  73. package/examples/fact/sample-three-slots.en.json +102 -0
  74. package/examples/fact/sample-three-slots.zh-CN.json +102 -0
  75. package/examples/fact/sample-two-actors-one-side.en.json +143 -0
  76. package/examples/fact/sample-two-actors-one-side.zh-CN.json +143 -0
  77. package/examples/fact/sample-two-parties-each-side.en.json +183 -0
  78. package/examples/fact/sample-two-parties-each-side.zh-CN.json +183 -0
  79. package/examples/justification/fang-yuan-defense-excess.en.json +636 -0
  80. package/examples/justification/fang-yuan-defense-excess.zh-CN.json +636 -0
  81. package/examples/justification/neighbour-corridor-liability.en.json +571 -0
  82. package/examples/justification/neighbour-corridor-liability.zh-CN.json +571 -0
  83. package/examples/procedure/01-software-development-contract.en.json +290 -0
  84. package/examples/procedure/01-software-development-contract.zh-CN.json +290 -0
  85. package/examples/procedure/02-purchase-contract.en.json +46 -0
  86. package/examples/procedure/02-purchase-contract.zh-CN.json +46 -0
  87. package/examples/procedure/03-labour-outsourcing-contract.en.json +251 -0
  88. package/examples/procedure/03-labour-outsourcing-contract.zh-CN.json +251 -0
  89. package/examples/procedure/04-non-disclosure-agreement.en.json +79 -0
  90. package/examples/procedure/04-non-disclosure-agreement.zh-CN.json +79 -0
  91. package/examples/procedure/05-premises-lease.en.json +344 -0
  92. package/examples/procedure/05-premises-lease.zh-CN.json +344 -0
  93. package/examples/procedure/06-epc-general-contract.en.json +375 -0
  94. package/examples/procedure/06-epc-general-contract.zh-CN.json +375 -0
  95. package/examples/procedure/07-share-acquisition-agreement.en.json +368 -0
  96. package/examples/procedure/07-share-acquisition-agreement.zh-CN.json +368 -0
  97. package/examples/raw//351/207/207/350/264/255/345/220/210/345/220/214-PO-2026-088.md +31 -0
  98. package/examples/raw//357/274/2102031/357/274/211/347/244/272/345/210/221/345/210/2353/345/217/267-/350/231/232/346/236/204/347/275/221/347/273/234/345/225/206/345/237/216/346/241/210-/344/270/200/345/256/241.md +36 -0
  99. package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/345/210/2351/345/217/267-/346/260/221/351/227/264/345/200/237/350/264/267/346/241/210-/344/270/200/345/256/241.md +31 -0
  100. package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/345/210/2352/345/217/267-/345/201/245/350/272/253/346/210/277/345/210/267/350/204/270/345/205/245/345/234/272/346/241/210-/344/270/200/345/256/241.md +40 -0
  101. package/examples/raw//357/274/2102031/357/274/211/347/244/272/346/260/221/347/273/2101/345/217/267-/346/245/274/351/201/223/345/205/205/347/224/265/345/212/235/351/230/273/346/241/210-/344/272/214/345/256/241.md +38 -0
  102. package/examples/raw//357/274/2102032/357/274/211/347/244/272/345/210/221/347/273/2101/345/217/267-/346/226/271/350/277/234/346/241/210-/344/272/214/345/256/241.md +49 -0
  103. package/examples/relationship/fang-yuan-parties.en.json +226 -0
  104. package/examples/relationship/fang-yuan-parties.zh-CN.json +226 -0
  105. package/examples/relationship/lin-fang-v-zhao-lei-parties.en.json +140 -0
  106. package/examples/relationship/lin-fang-v-zhao-lei-parties.zh-CN.json +140 -0
  107. package/examples/relationship/marketplace-parties.en.json +259 -0
  108. package/examples/relationship/marketplace-parties.zh-CN.json +259 -0
  109. package/examples/relationship/sample-group-guarantee.en.json +138 -0
  110. package/examples/relationship/sample-group-guarantee.zh-CN.json +138 -0
  111. package/examples/relationship/sample-loan-guarantee.en.json +122 -0
  112. package/examples/relationship/sample-loan-guarantee.zh-CN.json +122 -0
  113. package/package.json +35 -0
  114. package/server.json +20 -0
  115. package/spec/agent/fact/guide.md +114 -0
  116. package/spec/agent/justification/guide.md +100 -0
  117. package/spec/agent/procedure/guide.md +109 -0
  118. package/spec/agent/relationship/guide.md +92 -0
@@ -0,0 +1,100 @@
1
+ # Mechanism notes for an agent
2
+
3
+ > This is an **operating note**, not the specification. The field list is served by
4
+ > `antu_schema`, examples by `antu_examples`, and the design rationale lives in
5
+ > `spec/justification/schema-draft.md` (you do not need it to write JSON).
6
+ >
7
+ > **This file is English on purpose.** It goes into a model's context, the same as
8
+ > the field table and the validation errors. See the header of `src/core/i18n.js`.
9
+
10
+ ## In one sentence
11
+
12
+ A justification JSON describes **one side's reasoning: how norms and facts lead, step by step, to a
13
+ conclusion**. The engine draws a tree: the conclusion first, what supports it below, and at the
14
+ bottom the facts and the norms.
15
+
16
+ ## Three things, three places
17
+
18
+ ```
19
+ nodes the statements conclusion, norm, element, fact, inference, judgement
20
+ links who supports whom from (the support) -> to (the supported), with a stance
21
+ groups the issues "Issue 1: was it defensive?" (optional, one box each)
22
+ ```
23
+
24
+ Draw **one side's** reasoning (say, the court's reasons). Do not put the other side's tree in the same
25
+ diagram.
26
+
27
+ ## The six kinds of node
28
+
29
+ ```
30
+ conclusion what is decided; the end of the diagram, or the summing-up of one issue
31
+ norm a statute, interpretation or precedent (a leaf); sourceIds -> a statute / case source
32
+ element one constituent requirement a norm breaks into ("time: the attack is under way")
33
+ fact what the court found happened (a leaf); date, sourceIds
34
+ inference a statement drawn from facts ("the lights were visible, so he should have known")
35
+ judgement a value call on a body of facts ("the attack was not urgent")
36
+ ```
37
+
38
+ Keep **fact, inference and judgement apart**; they are questioned differently (evidence, logic, value
39
+ call). A fact says what happened, with a time. An inference says what may therefore be taken to be so.
40
+ When unsure: does the sentence say what happened, or what follows from it?
41
+
42
+ ## Links and their stance
43
+
44
+ A link runs from the supporting node to the supported one: fact -> element, element -> conclusion.
45
+
46
+ ```
47
+ for (default) from supports to
48
+ against from opposes to (a judgement saying an element is not met)
49
+ basis from is the norm to rests on (only from a norm)
50
+ ```
51
+
52
+ ## holds: upheld, or rejected
53
+
54
+ `holds: "yes"` on an element, inference, judgement or conclusion says the reasoning upholds it;
55
+ `holds: "no"` says the reasoning rejects it. **Draw the rejected side too**: a conclusion "it was
56
+ special defence" with `holds: "no"`, and the reasons it fails pointing `against` it. A fact and a norm
57
+ have no `holds`. Leave it out when the reasoning does not say.
58
+
59
+ ## and / or: `combine`
60
+
61
+ When a node rests on several things, say whether all are needed or one is enough: `combine: "all"` (every
62
+ `for` link into it is needed: the five conditions of lawful defence) or `combine: "any"` (one is enough).
63
+ Leave it out when the reasoning does not say. Only `for` links count, and it belongs only on a conclusion,
64
+ element, inference or judgement. Keep it consistent with `holds`: an `"all"` node that holds cannot rest on a
65
+ rejected node.
66
+
67
+ ## Issues
68
+
69
+ `groups` is one box per issue. A node is in at most one group. Put a norm in the issue it settles (a
70
+ norm used in two issues is two `norm` nodes with the same `sourceIds`). Nodes in no group (the end
71
+ conclusion) stand above the issues. **A fact that supports things in several issues is written once**: link it to each
72
+ element it supports, and the engine draws it in each of those issues (a copy says "same as"). Do not write
73
+ it twice.
74
+
75
+ ## Big diagrams
76
+
77
+ A reader can fold each issue up to its conclusion (its box title is a button; the dock has "Fold issues"), so a
78
+ diagram of several issues can be read at a glance. Nothing to write for it: it is not in the JSON. Still split a
79
+ diagram that grows past about 60 nodes.
80
+
81
+ ## After writing
82
+
83
+ ```
84
+ antu_validate each problem with its path and id: links[3] (f-9 -> e-9): `to` refers to ...
85
+ on a pass it can still add notes (a fact with no source, nothing supports a conclusion)
86
+ antu_layout counts, layers, size per orientation; no rendering
87
+ antu_preview a screenshot: is each issue clear, do the lines cross badly, is anything cut off
88
+ antu_render the self-contained HTML
89
+ ```
90
+
91
+ **Passing validation is only the pass mark.** Always look with `antu_preview` before delivering. A big diagram
92
+ (past about 40 nodes) is small on one screen: split it, one diagram per issue.
93
+
94
+ ## Also easy to get wrong
95
+
96
+ - **Referenced ids must exist**: `from` / `to`, `groupId`, `sourceIds`.
97
+ - **A fact or a norm is a leaf**: nothing supports it (an evidence layer is not part of v0).
98
+ - **`holds` is not for facts and norms; `date` is only for facts** (`2032-04-14` or `2032-04-14T22:22`).
99
+ - **At least one conclusion has no outgoing link**: the conclusion the whole reasoning leads to.
100
+ - **Do not invent a date**: leave `date` out when the source does not give one.
@@ -0,0 +1,109 @@
1
+ # Mechanism notes for an agent
2
+
3
+ > This is an **operating note**, not the specification. The field list is served by
4
+ > `antu_schema`, examples by `antu_examples`, and the design rationale lives in the
5
+ > human-facing documents under `spec/` (you do not need them to write JSON).
6
+ >
7
+ > **This file is English on purpose.** It goes into a model's context, the same as
8
+ > the field table and the validation errors. See the header of `src/core/i18n.js`.
9
+
10
+ ## In one sentence
11
+
12
+ A procedure JSON describes: **what happens in what order, where the path splits, and what
13
+ may happen at any time along the way**. The engine draws a flowchart: steps are nodes,
14
+ the order is edges, contingent clauses are a table under the flow.
15
+
16
+ ## Three things, three places
17
+
18
+ ```
19
+ nodes steps, decisions, outcomes "Seller delivers", "Goods pass inspection?"
20
+ edges the order between them n-2 -> n-3, with a condition on a branch
21
+ rules what may happen at any time "if the seller is late: 0.1% per day"
22
+ ```
23
+
24
+ **The most common mistake is writing a rule as nodes and edges.** A breach, a delay
25
+ penalty, a right to terminate is not a step after another step: it can fire at any moment
26
+ of a stage. As a branch off one step it claims a moment it does not have, and has to be
27
+ repeated per stage. Write it once in `rules`:
28
+
29
+ ```json
30
+ { "id": "r-1", "when": "Seller delivers late",
31
+ "then": "Seller pays 0.1% of the price per day, capped at 5%",
32
+ "outcome": "negative", "stageIds": ["st-1"], "sourceIds": ["s-1"] }
33
+ ```
34
+
35
+ - `when`: one trigger, or an array of them (any one fires the rule);
36
+ - `stageIds`: the stages it applies in; omit for "throughout";
37
+ - `endId`: only when the rule ends the procedure (termination). It must be a node of kind
38
+ `end`, and that node may have no incoming edge.
39
+
40
+ Rule of thumb: **if the same branch would leave several steps, or it leads nowhere, it is
41
+ a rule.**
42
+
43
+ ## A node's look: two fields, never mixed
44
+
45
+ ```
46
+ kind shape: start pill, where the flow begins
47
+ step box, something someone does
48
+ decision diamond, a question the path splits on
49
+ end double-bordered pill, where the flow stops
50
+ document box with a wavy bottom, a paper produced
51
+ note folded sheet, an explanation outside the flow
52
+ outcome paint: positive (heavier line) / negative (dashed line) / neutral (plain, default); the theme adds colour
53
+ ```
54
+
55
+ `outcome` is what the result means ("contract performed" positive, "terminated" negative).
56
+
57
+ ## Edges
58
+
59
+ - **The main line** is the path when everything goes as agreed. Mark its edges
60
+ `"main": true`, one chain from the start to an end. Unmarked, the engine guesses (the
61
+ first unconditional edge out of each node): mark it.
62
+ - **A decision** needs two or more outgoing edges, **each with a `condition`**. One way
63
+ out means it is a `step`. On the main line, mark which answer continues it.
64
+ - **A loop is an ordinary edge back** ("rectify" -> "inspect again"). Do not copy nodes
65
+ to avoid it; it is drawn dashed.
66
+ - Edges may rejoin one node; two edges between the same pair need different conditions.
67
+
68
+ **Every node must lead somewhere**: all but `end` and `note` need an outgoing edge, and all
69
+ must be reachable from the start. A step that leads nowhere is almost always a
70
+ consequence that belongs in `rules` (the error says so). Only a `start` may have no
71
+ incoming edge (a `note`, and a rule's `endId`, aside): any other node without one is an
72
+ error, since nothing leads to it. Several `start` nodes are allowed, with a hint.
73
+
74
+ ## Stages
75
+
76
+ `stages` is an ordered list; a node joins one with `stageId`. Each stage is drawn as a
77
+ framed box holding its nodes; the stages stand side by side as columns, the flow running down
78
+ each (a stage much taller than the rest is folded into two columns). Keep a stage's nodes
79
+ consecutive along the flow: an edge into an earlier stage draws backwards (fine for a loop, a
80
+ hint otherwise). Put every node in a stage, or none: with stages on only some nodes, the whole
81
+ diagram falls back to one long column.
82
+
83
+ Orientation and link style (curved / straight) are the reader's choice in the interface;
84
+ they are not in the data.
85
+
86
+ ## After writing
87
+
88
+ ```
89
+ antu_validate each problem with its path and node id: nodes (n-4): kind is "decision" but ...
90
+ antu_layout counts, layers, loops, rules, size per orientation; no rendering
91
+ antu_preview a screenshot: is the main line obvious, are the branches readable
92
+ antu_render the self-contained HTML
93
+ ```
94
+
95
+ **Passing validation is only the pass mark.** Always look with `antu_preview` before
96
+ delivering.
97
+
98
+ ## Also easy to get wrong
99
+
100
+ - **Referenced ids must exist**: `stageId`, `actorIds`, `sourceIds`, an edge's `from` /
101
+ `to`, a rule's `stageIds` / `endId`.
102
+ - **Keep labels short.** A node shows about three lines of `label`; put the rest in
103
+ `detail` (its first line shows under the label, all of it on click).
104
+
105
+ ## Another way to look at it
106
+
107
+ The reader can switch to the **route map**: the main line as one line, with rework loops and early endings
108
+ hanging below it. It needs a clear main line, so **mark `main` along the whole line from start to end**
109
+ (or on none, and the engine infers it). `kind: "route"` on antu_layout / antu_preview / antu_render shows it.
@@ -0,0 +1,92 @@
1
+ # Mechanism notes for an agent
2
+
3
+ > This is an **operating note**, not the specification. The field list is served by
4
+ > `antu_schema`, examples by `antu_examples`, and the design rationale lives in
5
+ > `spec/relationship/schema-draft.md` (you do not need it to write JSON).
6
+ >
7
+ > **This file is English on purpose.** It goes into a model's context, the same as
8
+ > the field table and the validation errors. See the header of `src/core/i18n.js`.
9
+
10
+ ## In one sentence
11
+
12
+ A relationship JSON describes **who stands in what relation to whom, at one point in time**.
13
+ The engine draws a graph: parties are boxes, relations are lines between them, and camps are
14
+ boxes around parties.
15
+
16
+ The reader can also switch to a **focus view**: one party in the middle (by default the one with most
17
+ relations; the reader clicks another), the parties tied to it around it, the others further out. It
18
+ suits a case with many parties, where the graph is too busy. The **guarantee chain** shows one block per
19
+ claim (a `debt`) with its guarantors beside it and what stands behind each; for a loan or guarantee
20
+ dispute. **Write `secures` on every guarantee**: without it the chain ties a guarantee to a claim only when
21
+ its creditor has exactly one, and puts it apart otherwise. The **matrix** puts the parties down and across and names the relations in each cell: for "is there any
22
+ relation between A and B". The **equity tree** draws the `equity` relations in levels with the `share` on each
23
+ line, so **write `share` on every equity relation**. The **authority chart** draws `control`, `employment` and `agency` as an organisation chart; the **related-party
24
+ list** is a table of one party's relations (to paste into a brief); the **path** draws the shortest chains between
25
+ two parties; the **summary** draws each camp (`groupId`) as one block. The same JSON draws in all nine;
26
+ `kind: "focus"`, `"chain"`, `"matrix"`, `"equity"`, `"authority"`, `"related"`, `"path"` or `"summary"` on antu_layout / antu_preview / antu_render shows it.
27
+
28
+ ## Three things, three places
29
+
30
+ ```
31
+ entities the parties "Zhang San", "Xinghe Trading Co."
32
+ relations what is between them from -> to, with a kind: debt, equity, guarantee ...
33
+ groups the camps "creditor side", "debtor side" (optional)
34
+ ```
35
+
36
+ It is a cross-section: write the relations as they stand on one date (`asOf`, optional). Do not
37
+ write a history. If the relations changed, write two diagrams.
38
+
39
+ ## The kind of a relation, and its direction
40
+
41
+ The direction runs from `from` to `to`. Write it the way the kind says:
42
+
43
+ ```
44
+ equity holder -> the entity held share: 60
45
+ control controller -> controlled (control without a shareholding)
46
+ debt creditor -> debtor amount: "CNY 500,000"
47
+ guarantee guarantor -> creditor secures: "r-1"
48
+ contract either way, no arrowhead amount: "CNY 80,000"
49
+ kinship either way, no arrowhead spouses, parents and children
50
+ employment employer -> employee
51
+ agency principal -> agent
52
+ other anything else
53
+ ```
54
+
55
+ `directed: true/false` overrides the kind's default arrowhead. A loan usually needs **two**
56
+ relations on the same pair: the `contract` (what was agreed) and the `debt` (who owes whom).
57
+
58
+ ## A guarantee says which claim it secures
59
+
60
+ A guarantee secures **one particular claim**, not the debtor in general. Put the id of the `debt`
61
+ (or `contract`) relation in `secures`. Without it the validator gives a hint, and a reader cannot
62
+ tell which of two loans the guarantee is for.
63
+
64
+ ## Entities
65
+
66
+ `kind` is `person` / `company` / `organization` / `government` / `other` and fixes the shape only.
67
+ `label` is the name; `role` is the role **in this case** on one short line ("Lender", "Guarantor").
68
+ Keep labels short; put registered capital and the like in `detail` (its full text shows on click).
69
+
70
+ ## Groups
71
+
72
+ `groups` boxes together the parties a reader should see as one camp. An entity is in at most one
73
+ group (`groupId`); groups do not nest. Leave a party out of every group and it stands outside the boxes.
74
+
75
+ ## After writing
76
+
77
+ ```
78
+ antu_validate each problem with its path and id: relations (r-2): `secures` points at ...
79
+ on a pass it can still add notes (an entity nothing relates to, shares over 100%)
80
+ antu_layout counts, layers, size per orientation; no rendering
81
+ antu_preview a screenshot: are the camps clear, do the lines cross badly
82
+ antu_render the self-contained HTML
83
+ ```
84
+
85
+ **Passing validation is only the pass mark.** Always look with `antu_preview` before delivering.
86
+
87
+ ## Also easy to get wrong
88
+
89
+ - **Referenced ids must exist**: `from` / `to`, `groupId`, `sourceIds`, `secures`.
90
+ - **`share` is only for `equity`, `amount` only for `debt` and `contract`, `secures` only for `guarantee`.**
91
+ - **An entity nothing relates to floats beside the diagram** (a hint): relate it or leave it out.
92
+ - **`amount` is a string**, written the way it should be read, with the currency.