Repository navigation
docs(requirements): file REQ-0003 … REQ-0006, the four Track A triage records REQ-0002 mandates - #1912
Merged
Conversation
… records REQ-0002 mandates REQ-0002's *Product response* rules its Track A (the sales half of an IT-services customer's 40-step CRM-to-delivery process, steps 1-14) as "to be filed as REQ-0003 onward, one record per object, each carrying its own standard-versus-overlay split". This files those four records. No metadata change: the whole diff is under `docs/requirements/`. - 0003 `crm_account` (steps 1 3 4 5) — a country-neutral registration identifier (⛔ never named after one country's registry), a category that GATES what the account may do rather than merely classifying it, the business-profile block, and account approval. `enable.files: true` already covers step 4: no gap. - 0004 `crm_contact` (step 2) — the buying-centre map: role in the purchase decision, attitude toward us, relationship strength. - 0005 `crm_lead` (steps 6 7) — need type, estimated value, and a configurable approval gate before conversion. - 0006 `crm_opportunity` (steps 8-14) — the qualification block, customer-side milestone dates, subcontracting, the deal narrative block, and approval on STATUS CHANGE rather than on amount alone. Each *Raw requirement* section reproduces its rows from REQ-0002's table byte-for-byte; each *Standard product analysis* is written against the field rosters measured on this commit's parent, and names what exists as well as what is missing. The C and D verdicts REQ-0002 already gave are quoted, never re-decided. REQ-0002's *Product response* and the requirements index gain their links here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3YsvpK1PvYf9n1YUhYP6W
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-elon-musk
marked this pull request as ready for review
September 15, 2026 14:02
This was referenced Sep 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1911
REQ-0002's Product response rules its Track A — the sales half of an IT-services customer's
40-step CRM-to-delivery process, steps 1–14 — as:
This PR files those four records. No metadata change: the whole diff is
docs/requirements/plus one changeset. Nothing under
src/is touched.docs/requirements/0003-account-registration-category-and-approval.mdcrm_accountdocs/requirements/0004-contact-buying-centre-map.mdcrm_contactdocs/requirements/0005-lead-need-type-value-and-approval.mdcrm_leaddocs/requirements/0006-opportunity-qualification-and-status-approval.mdcrm_opportunityEach follows
TEMPLATE.md's sections, carriesStatus: Triaged,Disposition: B standard-enhancement,and reuses REQ-0002's
Source/Raised(same customer, 2026-09-14). REQ-0002's Product responseand
docs/requirements/README.md's index gain the four links in the same change.The two things this PR proves rather than asserts
1 · The Raw requirement sections are verbatim. The rows were not retyped. They were extracted
from REQ-0002 by a script keyed on the step number, spliced into each file, and then read back out of
the four written files and compared byte-for-byte against the source table:
No rewriting, no translating, no normalising — and no row from a neighbouring object leaking in.
2 · The Standard product analysis sections are written against measured fields. Re-measured on
main(9f13c77) withgrep -oE "^ [a-z_]+: Field\.[a-zA-Z]+" src/sales/objects/ACCOUNT.object.tsand its three siblings:
crm_account25 ·crm_contact23 ·crm_lead36 ·crm_opportunity23 —counts and named fields both agree with the rosters on the card, so no correction was needed.
Claims that go past a field roster were read out of the source rather than assumed:
account.object.tsdeclares novalidations[]and norequiredWhen/readonlyWhen/visibleWhen; the only two places that touchtypewrite it orbranch on it for promotion (
account.hook.ts, andopportunity.hook.tsflipping a won deal'saccount to
customer). That is what makes "a category that restricts what the account may do"the most valuable primitive in REQ-0003 rather than a second picklist.
src/sales/flows/opportunity-approval.flow.ts(
grep -rn "type: 'approval'" src/sales/flows/returns those two nodes and nothing else) — so"no approval on the account", "no approval before lead conversion" and "no approval on status
change" are each measured, not inferred.
convert_lead'svisiblepredicate excludes only already-convertedand unqualified leads, so any open lead can be converted by its owner.
opportunity_stage_progressionvalidationis
type: 'state_machine'withseverity: 'warning'.account.object.tsalready declaresenable.files: true.Rulings quoted, never re-decided
The C and D verdicts REQ-0002 already gave are quoted from it verbatim — the signing-entity list
(软通签约主体), the revenue-recognition vocabulary, the US EAR flag and the 铁三角 role model. REQ-0006
adds the boundary that makes the last one readable: 铁三角 is a role model on our deal team (C),
while REQ-0004's buying-centre role is a role in the customer's buying centre (B) — different
facts on different objects, so the C verdict on the first does not reach the second.
The registration identifier is deliberately country-neutral. The customer says 社会信用代码
because they register in China; that string appears in these records only inside the verbatim
quote. REQ-0003 states the rule explicitly: the core field carries any country's registry number
(法人番号, Handelsregisternummer, EIN …) and is never named after one country's registry.
Verification
Every gate run individually first, then the whole chain as
pnpm verify—package.jsonis theauthority for what that chain is, and it was not narrowed. Exit codes were written to a file before
being read, never off a pipe. All measured on the pushed head
ff3f923:pnpm buildprints 8 author-time warnings (apage:cardprop, four approval-staffing notices on theexisting approval flows, three carrier-only fields, one enterprise capability). All pre-existing: this
diff touches no file the build reads.
Changeset
.changeset/track-a-requirement-records.md, empty frontmatter — the sanctioned "releases nothing"declaration that
.github/workflows/changeset-check.ymldocuments on par with theskip-changesetlabel. Reasoning for the level: nothing reaches a HotCRM user. No object, view, flow, dataset, widget,
translation or exported symbol changed, and the artifact is byte-identical — the diff is maintainer
documentation under
docs/requirements/only. This is the same class, and the same declaration, as thechangeset that shipped REQ-0002 itself. A
patchwould publish a release-notes line describing a changeno install can observe.
Acceptance notes
docs/README.mdgets no row. Its "Start Here" table points atrequirements/README.mdas the oneentry for the requirements log, and REQ-0002 set the precedent: a requirement record is indexed in the
log's own README, while
docs/README.mdrows name trees and top-level documents.do once the record is built), not as this PR's.
docs/README.md's standing rule reads "a PR that adds … a document underdocs/updates the tables below", which taken literally would ask for four "Start Here" rows; theprecedent set by REQ-0002 reads it as "the tables that index this document's tree". Whoever adds the
next
docs/document meets the same ambiguity.Generated by Claude Code