@rubytech/create-maxy-code 0.1.265 → 0.1.266

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 (67) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/models/dist/index.d.ts +1 -1
  3. package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/models/dist/index.js +5 -2
  5. package/payload/platform/lib/models/dist/index.js.map +1 -1
  6. package/payload/platform/lib/models/src/index.ts +5 -2
  7. package/payload/platform/neo4j/schema.cypher +13 -0
  8. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.js +9 -9
  9. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-search.test.js.map +1 -1
  10. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +11 -3
  11. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +2 -2
  12. package/payload/platform/plugins/business-assistant/PLUGIN.md +1 -5
  13. package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
  14. package/payload/platform/plugins/docs/references/voice-mirror-guide.md +9 -1
  15. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +10 -0
  16. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  17. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +59 -0
  18. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  19. package/payload/platform/templates/account.json +1 -1
  20. package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
  21. package/payload/platform/templates/specialists/agents/librarian.md +1 -1
  22. package/payload/platform/templates/specialists/agents/research-assistant.md +1 -1
  23. package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +1 -1
  24. package/payload/premium-plugins/writer-craft/PLUGIN.md +4 -4
  25. package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +1 -1
  26. package/payload/premium-plugins/writer-craft/mcp/dist/index.js +44 -9
  27. package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +1 -1
  28. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts +31 -0
  29. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts.map +1 -1
  30. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js +28 -0
  31. package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js.map +1 -1
  32. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts +7 -1
  33. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts.map +1 -1
  34. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js +93 -44
  35. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js.map +1 -1
  36. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.d.ts.map +1 -1
  37. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.js +1 -0
  38. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-ingest-session-text.js.map +1 -1
  39. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts +7 -1
  40. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts.map +1 -1
  41. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js +14 -3
  42. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js.map +1 -1
  43. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts +22 -8
  44. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -1
  45. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js +93 -84
  46. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -1
  47. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts +18 -0
  48. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts.map +1 -1
  49. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js +32 -3
  50. package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js.map +1 -1
  51. package/payload/premium-plugins/writer-craft/mcp/scripts/smoke.mjs +35 -2
  52. package/payload/premium-plugins/writer-craft/mcp/src/index.ts +52 -10
  53. package/payload/premium-plugins/writer-craft/mcp/src/lib/voice-corpus.ts +39 -0
  54. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-distil-profile.ts +108 -44
  55. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-ingest-session-text.ts +1 -0
  56. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-record-feedback.ts +24 -4
  57. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-retrieve-conditioning.ts +136 -102
  58. package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-tag-content.ts +45 -3
  59. package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +34 -23
  60. package/payload/platform/plugins/business-assistant/references/quote-engine.md +0 -122
  61. package/payload/platform/plugins/business-assistant/references/quote-generation.md +0 -94
  62. package/payload/platform/plugins/business-assistant/references/quoting.md +0 -85
  63. package/payload/platform/plugins/business-assistant/skills/pricing-method/SKILL.md +0 -78
  64. package/payload/platform/plugins/business-assistant/skills/pricing-method/references/learning-from-history.md +0 -51
  65. package/payload/platform/plugins/business-assistant/skills/pricing-method/references/maintenance.md +0 -32
  66. package/payload/platform/plugins/business-assistant/skills/pricing-method/references/manual-definition.md +0 -42
  67. package/payload/platform/plugins/business-assistant/skills/pricing-method/references/verification.md +0 -37
@@ -1,94 +0,0 @@
1
- # Quote generation — output contract
2
-
3
- This is the **output half** of the engine-driven quote path. The engine (the operator's captured
4
- pricing method applied to a job) produces the figures; this contract turns those figures into the
5
- documents the operator issues, each rendered to PDF.
6
-
7
- It holds **no** business content. There are no fixed section names, no fixed wording, no fixed brand,
8
- and no fixed page layout here. What each document contains and how it looks is the operator's, held
9
- as their own data (their headings, their narrative, their charts, their logo, colours, contact and
10
- terms, their page size). The same contract serves any trade or service business by reading that
11
- operator's own document definitions.
12
-
13
- This is distinct from the lightweight WhatsApp quote in `references/quoting.md`. Use that one for a
14
- quick text quote. Use this one when the operator prices a job from a captured method and issues a set
15
- of reconciling documents.
16
-
17
- ## What the engine hands you
18
-
19
- You render from the engine result. Read it as:
20
-
21
- - an ordered set of priced **groups** (the operator's own stages or categories);
22
- - each group an ordered set of **lines**; each line carries its quantity and the quantity's source
23
- (measurement-derived or entered), its unit, its rate, its cost, and its sell;
24
- - each group's **subtotal**;
25
- - the operator's named **roll-up** steps — whatever sequence of adjustments and taxes they apply
26
- above the line items, in order;
27
- - the **totals**: the client-visible subtotal and the final total.
28
-
29
- The engine guarantees the reconciliation invariant: the group subtotals carried through the roll-up
30
- equal the final total. You never recompute these figures — you display them.
31
-
32
- The engine itself, and how a line's quantity, rate, cost and sell are derived, are out of scope here
33
- (that is the compute core). This contract only reads the result.
34
-
35
- ## The three documents
36
-
37
- The operator defines the content and styling of each; the **roles** are fixed, the **contents** are
38
- not. A document is **engine-driven**: a section or line appears **only where the job priced it**.
39
-
40
- | Role | Shows | Withholds | Filing scope |
41
- |---|---|---|---|
42
- | **Internal margin-bearing view** | every line's quantity and its source, unit, rate, cost and sell; each group subtotal; the full roll-up; the totals | nothing — this is the operator's own check on profitability before issuing | **admin-only** |
43
- | **Client breakdown** | how the price is composed, at the granularity the operator chooses: the client-facing amount per group or line, the roll-up steps the client sees, and the headline figure | any cost, margin, or internal rate figure (the operator's own unit rate, not a client-facing per-unit price) | client-facing (shared) |
44
- | **Client quote document** | the issued document in the operator's brand: their cover, their narrative or schedule, the client breakdown, the headline price, the acceptance block, and their standing terms | any cost, margin, or internal rate figure (the operator's own unit rate, not a client-facing per-unit price) | client-facing (shared) |
45
-
46
- The internal view exists so the operator can confirm the job is profitable before it goes out; it may
47
- expose cost and margin freely. The two client documents **never** surface a cost, margin, or
48
- internal-rate figure. A column or line that shows the price to the client is fine; a figure that
49
- reveals what the work cost the operator, or the markup applied, is a leak.
50
-
51
- ### The margin boundary is the filing scope
52
-
53
- The leak boundary is structural, not a matter of remembering to omit a column. File each document by
54
- its scope, exactly as `references/document-management.md` defines:
55
-
56
- - the **internal margin-bearing view** goes to the **admin-only** customer folder
57
- (`memory/admin/customers/{phone}/`), which the customer never receives;
58
- - the **client breakdown** and the **client quote** go to the customer-facing documents folder
59
- (`memory/users/{phone}/documents/`).
60
-
61
- A document that carries cost or margin must never be written to the shared scope.
62
-
63
- ## Print fidelity
64
-
65
- Each document becomes a PDF through the device's Chromium print pipeline, so the HTML must survive
66
- that pipeline. Start from the A4 print conventions already in `references/invoicing.md` and
67
- `references/document-management.md` — an `@page` size directive, `@media print` styles, and
68
- `page-break-inside: avoid` on blocks that must not split — and keep the operator's own page size on
69
- `@page` (their stationery may not be A4).
70
-
71
- A multi-page issued quote needs two things beyond what those siblings show; state them explicitly in
72
- the document:
73
-
74
- - page-level chrome — a running header or footer and page numbers — via `@page` margin boxes, never
75
- absolutely-positioned elements that drift across pages;
76
- - `print-color-adjust: exact` on coloured fills, so the operator's brand fills survive print. The
77
- renderer prints backgrounds, but make the intent explicit rather than relying on the default.
78
-
79
- ## Producing the PDF
80
-
81
- Render the document as self-contained HTML (styles inline, images by absolute local path), then use
82
- the same path as every other business-assistant document:
83
-
84
- 1. write the HTML to the document's filing-scope path;
85
- 2. `browser-navigate` to it via a `file://` absolute URL;
86
- 3. `browser-pdf-save` to an absolute `.pdf` path alongside the HTML;
87
- 4. confirm a non-zero byte count from the `Saved PDF to <path> (<bytes>)` line before treating the PDF
88
- as done.
89
-
90
- ## Before you hand anything to the PDF tool
91
-
92
- Log, for the run: which document roles were produced, each one's page count, and the reconciliation —
93
- each document's displayed total against the engine total. If a document's total does not reconcile to
94
- the engine total, fail loudly and stop. Never ship a document whose figures disagree with the engine.
@@ -1,85 +0,0 @@
1
- # Quoting
2
-
3
- This reference is the **lightweight** quote path: read a handwritten or spoken quote, format it
4
- cleanly, and send it as a WhatsApp message (or a one-off PDF on request).
5
-
6
- When the operator prices a job from a captured pricing method and issues a set of documents that must
7
- reconcile to one engine total — an internal margin-bearing view, a client breakdown that withholds
8
- cost and margin, and a branded client quote — use `references/quote-generation.md` instead.
9
-
10
- ## Where the operator's pricing comes from
11
-
12
- The operator's priceable items, quantity rules, pricing rules, and roll-up are not held here. They are
13
- captured and maintained by the `pricing-method` skill (invoke it via the Skill tool — see PLUGIN.md).
14
- That skill is the single source of the operator's own method; the quote flow consumes it. Because the
15
- method records which items are priced by a standing rule and which by per-job judgement, the quote flow
16
- applies the standing-rule items itself and asks the operator only about the judgement-priced lines.
17
-
18
- ## Photo-to-Quote (Handwritten)
19
-
20
- 1. Business owner sends a photo of their handwritten quote
21
- 2. Read the handwriting using vision
22
- 3. Format into a clean, professional quote:
23
- - Customer name and address
24
- - Description of work
25
- - Labour cost (itemised if multiple tasks)
26
- - Parts (if applicable — customers may buy parts directly)
27
- - Materials markup (if set in memory)
28
- - Total
29
- - Validity period (default: 30 days)
30
- - Payment terms
31
- 4. Send back to business owner for approval: "Here's the formatted quote. Shall I send it to [customer]?"
32
- 5. On approval → send to customer via WhatsApp
33
-
34
- ## Quote from Conversation
35
-
36
- 1. Business owner tells you the details verbally (text or voice)
37
- 2. Format as above
38
- 3. Confirm and send
39
-
40
- ## Priced Quote (Computed from the Operator's Method)
41
-
42
- The two flows above format a quote the owner has **already priced** — they read the figures off a photo
43
- or out of a conversation. When the numbers instead have to be **computed** from the owner's own pricing
44
- method — measured or counted work priced item by item and rolled up to a total the way this owner
45
- prices — use `references/quote-engine.md`.
46
-
47
- That reference is the compute core: it generates a bespoke pricing engine from the owner's captured
48
- method and runs it on the job to produce line prices, group subtotals, and the final total,
49
- with an observability log and a check against the owner's own past quotes. It carries none of the
50
- owner's items, rates, or rules — those are the owner's captured data. Reach for it whenever the owner
51
- hands over measurements or quantities rather than a finished price. If there is no captured method yet,
52
- capture it first rather than inventing rates here.
53
-
54
- ## Quote Formatting Template
55
-
56
- Quotes sent to customers should be clean, readable, and professional — but delivered as a WhatsApp message (not a PDF, unless the business owner requests one).
57
-
58
- ```
59
- **Quote for [Customer Name]**
60
- [Business Name] — [Date]
61
-
62
- **Description of work:**
63
- [Itemised list of work to be done]
64
-
65
- **Cost breakdown:**
66
- - Labour: £[amount]
67
- - Parts: £[amount] (if applicable)
68
- - Materials: £[amount] (if applicable)
69
- - **Total: £[amount]**
70
-
71
- Valid for 30 days.
72
- Payment terms: [from memory, default "on completion"]
73
-
74
- Any questions, just reply to this message!
75
- ```
76
-
77
- For formal PDF quotes, use the same workflow as invoicing — write HTML, `browser-navigate` to it, render with `browser-pdf-save`, then send as attachment. See `references/invoicing.md` for the PDF workflow.
78
-
79
- ## Quote Follow-Up
80
-
81
- - If no response after configurable days (check memory for `quote_followup_days`, default 3): send a gentle nudge to the customer
82
- > "Hi [customer]! Just following up on the quote I sent over for [work description]. Any questions or shall I go ahead and book it in?"
83
- - If no response after escalation period (check memory for `quote_escalate_days`, default 7): notify business owner and ask if they want to chase or drop it
84
- - Store outcome in memory: accepted / declined / no response
85
- - Update contact record status via `contact_update`
@@ -1,78 +0,0 @@
1
- ---
2
- name: pricing-method
3
- description: Use when an operator's own way of pricing jobs needs to become something the assistant can apply — onboarding a new business's pricing, building or editing their priceable items and rules by hand, re-learning their method from past quotes, or checking that the captured method reproduces their past quotes. Triggers include "set up my pricing", "learn how I quote", "add an item / change a rate", "my method's quotes don't match my past jobs", and any work that produces or maintains the method that the quote-generation flow consumes. Not for pricing or troubleshooting a single live quote — that is the quote-generation flow.
4
- ---
5
-
6
- # Pricing method
7
-
8
- This skill ends with a correct, machine-usable representation of **one operator's own** pricing
9
- method: the things they price (what each is, how it is quantified, how it is priced), the rules that
10
- roll line prices up to a total, and the documents they issue. The quote-generation flow consumes that
11
- method; this skill is the only place it is built and maintained.
12
-
13
- ## Principle: the skill carries no business content
14
-
15
- This skill ships no item catalogue, no units, no rates, no margin, overhead, contingency or tax
16
- values, no roll-up formula, no document templates — **and no predetermined schema or data shape.** It
17
- is a procedure for eliciting and encoding an operator's *own* method. The same skill must onboard a
18
- trade that prices by the square metre, a caterer who prices per head in tiers, and a printer with
19
- per-unit price breaks — businesses with nothing in common. Everything that varies between businesses
20
- is captured as that operator's data, never written into this skill.
21
-
22
- The operator's structure is **discovered, not imposed.** Capture it faithfully wherever it diverges
23
- from any shape you might assume — an operator whose margin differs by category, who applies
24
- adjustments in an unusual order, who quantifies one item from a measurement and another by eye. If you
25
- find yourself forcing their method into a fixed template, the template is the defect. There is no
26
- canonical set of fields; there is only what *their* method actually contains.
27
-
28
- ## Building, verifying, and maintaining the method
29
-
30
- Two paths build the method:
31
-
32
- - **Learn from history** — derive the method from the operator's own past pricing artifacts. See
33
- [references/learning-from-history.md](references/learning-from-history.md).
34
- - **Define manually** — build or edit the method by hand for an operator with no usable history, or
35
- making an adjustment. See [references/manual-definition.md](references/manual-definition.md).
36
-
37
- Two activities keep it correct:
38
-
39
- - **Verify against the operator's own outputs** — the method is accepted only when it reproduces that
40
- operator's own past quotes to their own precision. See
41
- [references/verification.md](references/verification.md).
42
- - **Maintain** — re-learning or editing preserves prior manual adjustments and re-verifies green. See
43
- [references/maintenance.md](references/maintenance.md).
44
-
45
- **Onboarding** a new operator is a build path (learn from history, or define by hand) followed
46
- *always* by verification: the method is not onboarded until it reproduces their past jobs. A learned
47
- method and a hand-built method are the same kind of thing in the same captured form; nothing downstream
48
- should be able to tell which path produced an entry.
49
-
50
- ## Standing rule vs per-job judgement
51
-
52
- For every priceable thing, the method records whether the operator prices it by a **standing rule**
53
- (the same rule applies every time — a rate, a tier, a formula they always use) or by **per-job
54
- judgement** (they decide the price afresh each job). This distinction is load-bearing: it is what lets
55
- the quote flow stay quiet about standing-rule items and ask the operator only about judgement-priced
56
- ones. Derive the classification from the operator's history — an item whose price moves
57
- unpredictably across past jobs is judgement-priced; one that follows a consistent rule is not — or
58
- take it from the operator directly when defining by hand.
59
-
60
- ## Observability
61
-
62
- Under-capture that hides until it produces a wrong quote is the failure this skill exists to prevent.
63
- Two things are always visible:
64
-
65
- - **A capture log.** Every item, rule, and dial derived is logged with where it came from. Just as
66
- important, every part of a source artifact that could **not** be confidently encoded — skipped,
67
- ambiguous, or guessed — is logged as such, so gaps are seen at onboarding, not discovered later in a
68
- wrong quote.
69
- - **A reconciliation report.** The standing check is reproduction against the operator's own history:
70
- per past job, the **delta** between the reproduced figures and the operator's own, at line, group,
71
- and final level — a delta, never a boolean. The verification pillar owns why and how
72
- ([references/verification.md](references/verification.md)).
73
-
74
- ## Scope
75
-
76
- This skill produces and maintains the method only. The compute that applies the method to a job, and
77
- the documents that present the result, are the quote-generation flow — separate work. This skill owns
78
- *what the operator's method is*; it does not own pricing a live job or rendering a quote.
@@ -1,51 +0,0 @@
1
- # Learning the method from history
2
-
3
- The operator has been pricing jobs for years. That method already exists — it lives in their past
4
- quotes, estimates, invoices, and spreadsheets. This pillar derives it from those artifacts so the
5
- assistant can apply the same method going forward. The source is whatever the operator actually used:
6
- a workbook, a folder of PDFs, photographed handwritten estimates, a price list. Work from what they
7
- have.
8
-
9
- ## What a complete derivation captures
10
-
11
- From the operator's own artifacts, recover four things, and nothing the artifacts do not show:
12
-
13
- - **The priceable things.** Each distinct thing the operator charges for. Two lines that are the same
14
- priced thing under different wording are one method entry, not two — collapse repeated instances of
15
- the same thing across jobs into a single entry, and let the variation across those instances tell you
16
- how the thing is quantified and priced.
17
- - **How each is quantified.** For each thing, how a job turns into a quantity. Some quantities are
18
- derived from a measurement the operator takes (a length, an area, a volume, a weight); some are
19
- counted directly (how many doors, heads, units); some are simply one of a thing. Read which it is
20
- from how the past jobs got their numbers — do not assume a unit.
21
- - **How each is priced.** The rule that turns a quantity into a line price. It may be a rate per unit,
22
- a tiered or banded price, a price that steps at break quantities, a fixed amount, or something else
23
- entirely. Capture the form the operator's history actually shows; do not flatten everything into
24
- "rate × quantity" if their numbers say otherwise.
25
- - **How lines roll up.** The sequence the operator applies above the line items to reach the total —
26
- any markups, overheads, contingencies, discounts, and taxes, **in the order their arithmetic
27
- reveals.** Do not assume a markup-then-overhead-then-tax chain; discover the operator's actual
28
- sequence, including adjustments that apply to only part of the work.
29
-
30
- ## Standing rule vs per-job judgement
31
-
32
- Classify each priceable thing as you derive it (the rule and why it matters are in
33
- [../SKILL.md](../SKILL.md)). On this path the signal is **variance across the operator's own jobs**: a
34
- price that follows a consistent rule from job to job is a standing rule; one that moves unpredictably
35
- is priced by judgement.
36
-
37
- ## Faithfulness over tidiness
38
-
39
- The aim is the operator's method as it really is, including its irregularities. If their margin
40
- differs by category, capture that. If one adjustment applies before tax and another after, capture
41
- that. A clean, regular method that does **not** reproduce their past quotes is wrong; an irregular one
42
- that does is right. Reproduction is the test (see [verification.md](verification.md)).
43
-
44
- ## Provenance and under-capture are recorded
45
-
46
- Every derived element carries where it came from — which artifact, which job. And every part of a
47
- source that could not be confidently encoded is logged as skipped, ambiguous, or guessed, rather than
48
- silently dropped or invented. A derivation that quietly omits a section the operator charges for will
49
- surface later as a quote that is wrong by exactly that section; logging the gap at onboarding is what
50
- prevents that. Under-capture you can see is a question to ask the operator; under-capture you cannot
51
- see is a future wrong quote.
@@ -1,32 +0,0 @@
1
- # Maintaining the method
2
-
3
- A pricing method is not set once. Rates change, items come and go, the operator refines how they
4
- charge, and a better history may arrive later that is worth re-learning from. Maintenance keeps the
5
- method correct across those changes without losing what was already established.
6
-
7
- ## Re-learning preserves prior manual adjustments
8
-
9
- When the method is re-learned from history — because new artifacts arrived, or the first derivation
10
- was incomplete — the operator's prior manual adjustments are preserved, not overwritten. An operator
11
- who corrected a derived rate by hand, or added an item the artifacts missed, must not have that
12
- correction silently reverted by the next derivation. A re-learn that would drop a prior manual
13
- adjustment is a failure: surface the conflict to the operator and let them decide, rather than quietly
14
- choosing the freshly-derived value.
15
-
16
- This is why provenance matters (see [learning-from-history.md](learning-from-history.md)): an element
17
- the operator set by hand is distinguishable from one derived from an artifact, so a re-learn knows
18
- which it must not clobber.
19
-
20
- ## Every change re-verifies
21
-
22
- Any maintenance pass — a re-learn, an added or retired item, a changed rate or roll-up step — is
23
- followed by re-running verification against the operator's own history (see
24
- [verification.md](verification.md)). The reconciliation must still be green to the operator's
25
- precision. A change that is recorded but breaks reproduction of a past job is not done; either the
26
- change is wrong, or a past fixture is no longer representative and the operator confirms which.
27
-
28
- ## The outcome, not a storage scheme
29
-
30
- Maintenance is defined by two outcomes — prior manual adjustments survive, and reproduction stays
31
- green — not by any particular way of versioning or storing the method. How the method is held is the
32
- operator's data; what maintenance guarantees is preservation and re-verification.
@@ -1,42 +0,0 @@
1
- # Defining and editing the method by hand
2
-
3
- Not every operator hands over a usable history, and every operator eventually changes how they price.
4
- This pillar builds or edits the method directly with the operator, by conversation, producing the same
5
- captured method that learning from history produces. A method built this way and a method learned from
6
- artifacts are indistinguishable to anything downstream — same kind of thing, same captured form.
7
-
8
- ## What the operator must be able to express
9
-
10
- Building by hand means letting the operator state, in their own terms, the same four things a
11
- derivation recovers:
12
-
13
- - **A priceable thing** — something they charge for, named the way they name it.
14
- - **How it is quantified** — whether its quantity comes from a measurement they take, a count they
15
- enter, or is simply one of a thing.
16
- - **How it is priced** — the rule that turns its quantity into a line price, in whatever form their
17
- pricing takes (a rate, a tier, a price break, a fixed amount, or otherwise).
18
- - **How lines roll up** — the adjustments and taxes they apply above the lines, in the order they
19
- apply them, and the dials those adjustments use (a markup percentage, a day rate, a tax rate).
20
-
21
- There is no fixed set of fields to fill and no form to complete. Capture what the operator's method
22
- contains; if their pricing for one thing needs something another thing's does not, the method holds
23
- both. Forcing every entry into the same template is the same defect here as it is when learning from
24
- history.
25
-
26
- ## Standing rule vs per-job judgement
27
-
28
- Classify each thing here too (the rule and why it matters are in [../SKILL.md](../SKILL.md)). On this
29
- path the signal is simplest: **ask the operator directly** whether each thing is priced the same way
30
- every time or decided per job.
31
-
32
- ## A hand-defined item is immediately quotable; a hand-edited rule takes effect
33
-
34
- The point of building by hand is that it works at once. A priceable thing the operator just defined is
35
- available to a quote with no further step, and a rule the operator just changed governs the next quote
36
- that uses it. An edit that is recorded but does not change what the next quote does is not an edit.
37
-
38
- ## Editing is a first-class path, not a fallback
39
-
40
- Editing an existing method — adding a thing, retiring one, changing a rate or a roll-up step — runs
41
- through this pillar, and through [maintenance.md](maintenance.md) for preserving prior adjustments and
42
- re-verifying. A manual edit must survive a later re-learn from history; see maintenance.
@@ -1,37 +0,0 @@
1
- # Verifying the method against the operator's own outputs
2
-
3
- A captured method is a claim: "this is how the operator prices." The claim is accepted only when it
4
- reproduces that operator's own past quotes to their own precision. A method that parses cleanly but
5
- does not reproduce their history is not accepted. Reproduction of the operator's history is the
6
- acceptance signal — the only one.
7
-
8
- ## The fixtures are the operator's own jobs
9
-
10
- Verification runs the captured method against the operator's past jobs and compares the result to what
11
- the operator actually quoted for those jobs. Those past jobs, with their own figures, are the
12
- fixtures. They are supplied per operator and are never built into this skill — this skill carries no
13
- business's numbers, so it carries no verification fixtures of its own. Pick jobs that exercise the
14
- range of the method: the items, the quantity forms, the pricing forms, and the roll-up the operator's
15
- work actually uses.
16
-
17
- ## The report is a delta, never a boolean
18
-
19
- For each past job, report the difference between the reproduced figures and the operator's own, at
20
- three levels: each line, each group the operator subtotals, and the final total. "Matches / does not
21
- match" is not enough — it hides which line is wrong and by how much, which is exactly the information
22
- needed to find the error in the captured method. A method is accepted when every delta is within the
23
- operator's own precision; where a delta is outside it, the delta points at the entry to fix.
24
-
25
- ## What a failing reproduction tells you
26
-
27
- A delta is a finding about the **method**, not a tolerance to widen. A wrong line total means that
28
- item's quantity rule or pricing rule was captured wrong. A right set of lines with a wrong final total
29
- means the roll-up sequence or a dial was captured wrong. Fix the captured method and re-run; do not
30
- adjust the acceptance threshold to make a wrong method pass.
31
-
32
- ## Where the figures come from
33
-
34
- The compute that turns the captured method plus a job into reproduced figures, and the rendered
35
- documents those figures appear in, are the quote-generation flow — separate work that consumes the
36
- method this skill produces. This pillar owns the acceptance discipline: which jobs to reproduce, that
37
- the comparison is a per-level delta, and that reproduction to the operator's precision is the bar.