Repository navigation
Releases: companygraph/meta-model
Release list
v0.94.0
The requirements pack ships (#358): the goals people bring to a system and the statements a product is held to, a fourth pack beside software, organization and landscape. Core moves to 0.69.0 for one wording in R9, the four packs' manifests move with it, and the package moves to 0.94.0 with both reusable workflows' refs.
use-caseis a type of the pack: all the ways of using a system to achieve one goal for one actor, fully dressed after Cockburn, at one of four goal levels, with its stakeholders and their interests, its labeled steps and extensions, its minimal and success guarantees, the features it asks something of and the use cases itincludes. Its actors are seats where the company has them and names otherwise.requirementis a type of the pack: one statement a product is held to, functional, quality or constraint, with an RFC 2119modality, a## Fit criterion, the features, products or use cases it## Applies toand the company rules itfollows.- Two checks stretch for the pack. A type's
labelsnames one place or several, so a use case's steps and extensions share one page's labels.acyclicfollows a list field, soincludesnever runs in a circle. Two row keys are new:descends, what a use case includes stands at its level or below, andbranches, an extension's label is a step's label and one lowercase letter. - R9 admits an
enumtype column for aref → by <Column>row beside astringone, so a schema that can list the types a row may name has R8 hold them, and a type off the list is one finding. The owner column stays astring. The requirement's## Applies tois the first to use it. init --pack requirementsvendors the pack, and the pack's README says when to write a use case, a requirement or the software pack's feature design.
What breaks. For an instance, nothing: no core schema changes, and an instance that does not take the pack sees nothing new. For a consumer of ./checks, the public type TypeEntry.labels widens from one place to LabelPlace | LabelPlace[], which breaks a reader of labels.section and no writer of the entry; no consumer in the family reads it.
How to take it. Move the pin to v0.94.0 and run companygraph upgrade, which moves the vendored core and packs to 0.69.0. A company that says what its products must do before it builds them adds --pack requirements, or runs companygraph upgrade --pack requirements later.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check; companygraph, robertblust and guestgraph mental-model, cloned at their main commits and upgraded with this checkout's CLI, go to core 0.69.0, pass check, and find nothing to do on a second upgrade.
v0.93.0
The landscape pack says where a system runs and what it is a copy of (#357), so core moves to 0.68.0 and the three packs' manifests move with it, and the package moves to 0.93.0 with both reusable workflows' refs.
environmentis a type of the pack: where a system runs, in the company's words,Production,UAT, a laptop, ranked along the path from a developer's machine to the customer, with a section that says what is deployed there, who may deploy to it and what data it holds. An environment no system names is told so, as a kind nobody names is.- A system gains
instance-of, the software it is a running copy of, one level deep and never in a circle, andenvironment, written on a copy and on a platform alike. The writing rules put what is the same everywhere on the software page, what differs on the copy, another product in the same role beside it as a system of its own joined by the service both provide, and ports, commands and log paths into## Referenceswith the cost and the version; and they say that a holder need not be a master. - A service gains
domainbesiderealizes, since an API, an SDK client and a set of MCP tools are three services and a domain groups them; a service names no bounded context, by R20. - The README's mapping takes the artifact back as a copy assigned to its node and the environment as a Grouping of the Common Domain, and no longer names an architecture tool as the source of a system's lifecycle (#348).
What breaks. Nothing. Every field is optional and the type's folder is empty until an instance writes an environment; a page of any instance changes only where one did.
How to take it. Move the pin to v0.93.0 and run companygraph upgrade, which moves the vendored core and packs to 0.68.0. An instance that runs the same software in several environments then writes one environment page each and one system page per running copy.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check; companygraph, robertblust and guestgraph mental-model, cloned at their main commits and upgraded with this checkout's CLI, go from core 0.67.0 to 0.68.0, pass check, and find nothing to do on a second upgrade.
v0.92.0
The organization pack's group schema changed and core's decision schema with it, so core moves to 0.67.0 and the three packs' manifests move with it, and the package moves to 0.92.0 with both reusable workflows' refs.
- A group outside the line is where an agent sits, and every human in it directs every agent in it, so a group that names an agent names a human beside it. Where a company grants direction per agent, the group's new
## Directiontable says which human directs which agent, one row per pair, written only where not every human directs every agent;## Peopleis unchanged and holds humans and agents alike (#342, #343). - A decision's References URL may be corrected when its document moves or the address was written wrong on the day, the row's What and every other row unchanged; the kept-as-written check lets it follow, as a name follows its entity (#345).
- The software pack's README says why a decision has no type of its own (#344).
What breaks. An instance whose group outside the line names only agents fails check on that page until a human who directs them is named. No page of any instance changes otherwise: ## Direction is a section a group may leave out.
How to take it. Move the pin to v0.92.0 and run companygraph upgrade, which moves the vendored core and packs to 0.67.0. A group that grants direction per agent then writes its ## Direction.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check; companygraph, robertblust and guestgraph mental-model, cloned at their main commits and upgraded with this checkout's CLI, go from core 0.66.0 to 0.67.0, pass check, and find nothing to do on a second upgrade.
v0.91.0
The landscape pack's system schema changed twice, so core moves to 0.66.0 and the three packs' manifests move with it, and the package moves to 0.91.0 with both reusable workflows' refs.
- The README names the landscape pack whole: four types, aligned to ArchiMate 4 (#338).
- A system a vendor runs and the company only connects to keeps the vendor's own name for it,
GitHub,Cloud Run; and a kind is never named Service, which would collide with theservicetype (#339). vendoris written only on a system naming noprocessor: the processor's page says which party the contract is with, and a vendor beside it is the same party written twice, once in a form nothing resolves. Ayields: { field, unless }row on a type's entry holds the pair under R16; a maker who is another party than the contract's goes to the tagline (#340).
What breaks. An instance that writes vendor beside processor on one system fails check on that page until it drops the vendor line. CompanyGraph's own instance already has (companygraph/mental-model #123); robertblust's and guestgraph's do not take the pack; the retailer's instance names no processor.
How to take it. Move the pin to v0.91.0 and run companygraph upgrade, which moves the vendored core and packs to 0.66.0; an instance with the landscape pack then drops any vendor line that stands beside a processor.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check; robertblust, companygraph and guestgraph mental-model, cloned at their main commits and upgraded with this checkout's CLI, go from core 0.65.0 to 0.66.0, pass check, and find nothing to do on a second upgrade.
Package 0.90.0 — three fixes
Three fixes ship and no schema moves, so core and the three packs stay at 0.65.0 and the package moves to 0.90.0 with both reusable workflows' refs.
- A frontmatter field declared
ref → <type>orref? → <type>that is written as a YAML list, block or inline, is refused under R9: a reference names one entity.array of ref →is unchanged (#330, #335). - A repeated
--packoninitandupgradeaccumulates as if written--pack a,b; the usage text says the flag is repeatable (#331, #336). - A type's row may declare
notSelf: { section, column }, a reference column of a table that never names the page it is on; the landscape pack'ssystemdeclares it for## Connects to, so a system cannot connect to itself (#332, #334).
What breaks. Nothing. An instance that wrote a scalar reference as a list of two now hears so; none of the family's instances did.
How to take it. Move the pin to v0.90.0 and run companygraph upgrade, which changes nothing in the instance; the checker and the CLI carry the three fixes.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check.
Package 0.89.0 — a product names its kind, and the landscape pack ships
Core gains a type and a pack ships, so core moves to 0.65.0 with the three packs' manifests, and the package to 0.89.0 with both reusable workflows' refs.
Core. product-kind (#321, #324, #325): one page per sort of thing a company ships, with a rank, a label, a summary and ## What it means, which says who opens a product of that kind and what the kind excludes. product loses its free-text audience and gains a required kind. A kind is named by at least one product; the check tells a kind nobody names so, with the action to take. The example takes Application, Page and API. The company skill proposes a site's kinds in the ledger beside the domain.
The landscape pack (#322, #323, #326, #327, #328), for a company that runs systems. system, across ArchiMate's Application and Technology Domains, with lifecycle, criticality, an owner and an operator seat, a processor, part-of another system, realizes features and serves processes; system-kind, the company's own sorts of system, SaaS, Store device, each carrying the ArchiMate 4 element a system of it is, the standard's profile-based specialization and so no shape of its own; data-object, realizing a concept, required; service, provided by systems, realizing features and serving processes. A system's ## Connects to is written on the side that takes the data, with the interface in As, the service it calls and what it carries; its ## Holds names concepts with master, writes or reads and the data object kept. Two instance checks: part-of forms no cycle, and a concept has one master. Two declared joins hold a row's data object to its concept and a row's service to its system. The README maps every field and row onto the ArchiMate 4 Specification and says what is dropped.
What breaks. Every instance: a product without a kind fails. upgrade migrates nothing, since no instance wrote audience and a migration cannot invent kinds; each re-pin writes its kind pages, model/product-kinds/README.md and one kind: line per product by hand, as the spec decided. An instance that does not take the landscape pack is otherwise unchanged.
How to take it. Move the pin to v0.89.0 and run companygraph upgrade, write the kinds, run check. An instance that runs systems adds --pack landscape.
Verified: npm run verify with its release check, typecheck, build:check and every test:* script pass, as do conventions-format and conventions-check; robertblust, companygraph and guestgraph mental-model, cloned at their main commits and upgraded with this checkout's CLI, go from core 0.64.0 to 0.65.0, fail check on nothing but each product's missing kind, and find nothing to do on a second upgrade.
v0.88.0
The organization pack can say that a position is open, that a unit or a person serves a head from beside it, and in which order a company presents its units (#317). An org chart drawn from the model could show none of the three, and every chart in public practice shows all of them.
groupgains an optional## Openingstable, with the columnsJob,Place,CountandSince: the positions the group is looking to fill, one row per job and place. An openLeadbeside aLeadin## Peopleis the search for a successor.group-kindgains an optionalstaff,yesorno. A staff unit stays in the disciplinary line, and its people have it as their unit, but it serves the head of the group itspart-ofnames from beside it. A new check holds that only a staff unit hangs below a staff unit. It is stated on the type's row asinherits, a form any pack may use, and it stays silent wherewithin, R4 or R8 already report the fault.PlacegainsStaff, for a person who serves the lead from beside them, as an assistant does.groupgains an optionalrank: the company's own order of its groups, spaced in tens and unique across all groups, as R9 has it. A group without one comes after the ranked ones, by name.- A table cell typed
numberis now held to digits, and one typeddateto R9's date form, as frontmatter values already are.CountandSinceare the first such columns in core or any pack. example/shows each: Legal as a staff unit beside Management, a managing director and an assistant in aStaffplace, openings in Engineering, Product and Legal, and a rank on every group.
companygraph-meta-model/plan also exports stillNamingRoles(files, units) and isInstancesOwn (#315), so a caller that reads its own files, as the Obsidian plugin does, can name the files that still say roles after the seat migration exactly as upgrade does. And when the migration writes a fresh model/seats/README.md, the plan lists it in given.
Core and both packs move to 0.64.0, because a pack's schemas changed and a pack is released with core. Core's own schemas did not change.
What breaks. Nothing. Every new field, column and section is optional, and Place only gains a token. An instance with a number or date table column of its own is now held to the written form there too; core and the packs had none before this release.
How to take it. Move the pin to v0.88.0 and run companygraph upgrade, which moves core and any packs to 0.64.0 and changes nothing else. The family resync does both. An instance that takes the organization pack can then write ## Openings, staff and rank where it wants them.
v0.87.0
Core's role is now seat (#310). The type was always a seat: its schema called it one, every schema that referenced it said "the seat", and a process names one per phase. The word said otherwise, and the organization pack showed what that costs, since the standards it draws on use "role" and "job" for what a person is employed as. A seat is now core/seat-schema.md, keeping its id, in model/seats/; a profile holds seats; every ref → role in the process, phase, KPI, risk, decision and control schemas is ref → seat; and a Type cell in ## Applies to names seat. Experience's string field role, which held job titles and parts such as speaker or author, is capacity, with the same meaning. The organization pack's job.seats names seats.
What breaks. Every instance: the checker of this release refuses an instance pinned to an earlier core, and an instance still holding model/roles/ fails the checks of core 0.63.0. Three consumers of the package change with it. companygraph-meta-model/instance: constraintsOf names R16's join on a column called As by the kind "as", no longer "roles", which the MCP server reads. companygraph-meta-model/plan: upgradePlan requires model, every file under the instance's model/, and refuses without it when the core carries seat-schema.md; it returns moved, and writes and writePlan may carry bytes as a Uint8Array, which the Obsidian plugin's upgrade must pass and write. A site drawing a migrated instance needs robertblust/design's next release, which draws seats on the page that becomes Processes. The commit-author check and the judge say "names no seat of" and "its seats does not name it" where they said role.
How to take it. Run companygraph upgrade. It moves every file under model/roles/ to model/seats/ with its id, keeps the folder README's text with only its heading, folder and schema path changed, renames a profile's roles: to seats: and an experience's role: to capacity:, and turns a role cell in a Type column into seat. It refuses, writing nothing, when pages sit in both model/roles/ and model/seats/ or a page carries both keys; settle those by hand and run it again. It then names, without rewriting, the instance's own files that still say roles, typically README.md, AGENTS.md, the export guide's {{count:Roles}} and the seats README; edit them, since the export build fails on {{count:Roles}} until you do. The list cannot catch prose that names the old words in passing, so also search your own text for `role`, ref → role and model/roles/. Then run check. companygraph, guestgraph and robertblust mental-model, upgraded from core 0.61.0, move their seats and pass.
v0.86.0
A second pack ships: organization, for a company of more than one person (#304). It describes the units a company is organized into and the two lines that run through them: the disciplinary line, along which a unit's lead hires, appraises and sets objectives, and the professional line, along which one group sets the standard of a job wherever the people who do it sit.
The pack keeps three things apart. Core's role is a seat, a responsibility in a process. The pack's job is what a person is employed as, and a job may name the seats it usually holds, which is where the structure meets the processes. A position is a row of a group's ## People: one person, in one job, in one group, in one place, Lead, Deputy or Member. A group-kind says whether groups of that kind stand in the disciplinary line, which is each company's call. Eight instance checks hold the lines to a tree: part-of never runs in a circle and runs only between units in the line, never to one that has ended; a person sits in at most one unit in the line; a job is guided by at most one group; only a human leads, deputizes or sits in a unit in the line; a group has one lead, and a person has one place in a group however many jobs they do there. The example instance takes the pack.
What breaks. Nothing for an instance that takes no pack: upgrade moves its core from 0.61.0 to 0.62.0, and no core schema changed. Two things change for anything that reads the package's output. A blank required table cell is now reported with its column's name as the schema writes it, URL and not url. And the parser's stamp.kind is set only for an experience; a group with a start gets a stamp whose kind is null.
How to take it. companygraph upgrade moves an instance to core 0.62.0; companygraph upgrade --pack organization, or init --pack organization for a new one, adds the pack's three folders and lists it in the manifest. companygraph.io already reads the example against every pack's schemas, so its next re-pin of meta-model is a plain re-pin.
v0.85.0
The git gate commits again (#302). On v0.83.0 and v0.84.0 the gate's pre-commit refused every commit: it starts the tooling as npx --package github:companygraph/meta-model#v<tooling> companygraph check, npm passes npm_config_package and npm_config_call on to the child, and the Markdown form's own nested npx markdownlint-cli2@0.23.2 then looked for the linter inside the companygraph package and exited 127. The form check now starts its linter with those variables removed, so it resolves its own package however the tooling was started; every other npm setting, a registry, a cache or --yes, still reaches it.
What breaks. Nothing. A repository on the git gate takes the fix with upgrade, which moves its tooling to 0.85.0; the hooks' text does not change. Core and the software pack stay at 0.61.0.