Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions model.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"commit": "2241591106e36cc8c4c616d6028173341db036ae",
"commit": "d7c2de52805664dc418c5d9c722bc75c8c51218f",
"root": "Robert Blust",
"rootId": "identity",
"types": [
Expand Down Expand Up @@ -288,7 +288,7 @@
"id": "profiles/robert-blust",
"type": "profile",
"name": "Robert Blust",
"tagline": "Technology executive and business architect — over 25 years building platforms and products from explicit models, now modeling the company itself so people and AI agents can both work inside it.",
"tagline": "Building fast is solved. Deciding well is not.",
"fields": {
"source": "Local"
},
Expand Down Expand Up @@ -4567,12 +4567,12 @@
"sections": [
{
"heading": "What it shows",
"text": "- **Headline** — the slogan the blust.ch landing page carries as its H1, and nothing beside it.\n- **Location** — the metropolitan area the network's own list offers for the identity's\n `location`.\n- **About** — the profile's `## Summary`, rewritten in this surface's register.\n- **Experience** — the experiences of kind `Role`, kind `Independent` and kind `Community`.\n- **Projects** — the experiences of kind `Project`.\n- **Education** — the experiences of kind `Education`.\n- **Skills** — five skills of the profile's, chosen by the owner.\n- **Languages** — the two languages `conventions/WRITING.md` names, English and Swiss German.",
"text": "- **Headline** — the profile's tagline, and nothing beside it.\n- **Location** — the metropolitan area the network's own list offers for the identity's\n `location`.\n- **About** — the profile's `## Summary`, rewritten in this surface's register.\n- **Experience** — the experiences of kind `Role`, kind `Independent` and kind `Community`.\n- **Projects** — the experiences of kind `Project`, each with the role the entry names.\n- **Education** — the experiences of kind `Education`.\n- **Skills** — five skills of the profile's, chosen by the owner.\n- **Languages** — the two languages `conventions/WRITING.md` names, English and Swiss German.",
"tables": []
},
{
"heading": "Projection rules",
"text": "- Everything written for this surface is in the prose register of `conventions/WRITING.md`,\n aimed at a visitor who has not decided to stay: the first line carries the point, sentences\n run short because the profile is read on a phone, and a claim it opens with is a claim it then\n shows.\n- An entry carries the title and the period of the experience it was made from, and its body is\n written rather than copied. What the entry holds was written for a reader who came to read.\n- The model is a company of one, so an experience nobody commissioned or hosted was the\n company's own work: an entry whose experience carries no `organization` names the identity.\n The network asks for a company on every entry and this answers it from the model rather than\n by inventing a name.\n- An entry's body runs to one paragraph, and an entry whose period is a single day runs to a\n sentence or two. The dates say which an entry is, so no count is needed here, and the register\n holds either way: the first sentence carries the point.\n- For a talk, an article or a published tool the address is most of what the entry is, so an\n entry whose experience carries a `url` shows it. An entry whose experience carries none shows\n no link: the model holds an address or it does not, and this surface invents none.\n- The About text is the profile's `## Summary` rewritten the same way. The sentence naming the\n security and compliance standards is not carried, because the LIKE MAGIC entry names those\n standards beside the work that met them, and a standard named without its work is a claim the\n reader cannot place.\n- Every dated unit runs newest first by `end`, with an experience that has none — a period still\n running — above them all, and `start` breaking a tie. Not by `start`: a position starts once\n and then runs for years, so ordering by it buries a long role under everything that began\n while it was running, and a talk given during a job would stand above the job. What a reader\n wants first is what ended last.\n- Every experience reaches a dated unit and each kind reaches one: `Role`, `Independent` and\n `Community` are Experience, `Project` is Projects, `Education` is Education. Nothing here reads\n what an experience produced or who it was for, because the kind already says both and the\n model records nothing finer.\n- The Skills unit shows five because the network shows five on this account. Which five is the\n owner's choice at each rebuild and not a rule: the model holds seventy skills and no ordering\n among them, so nothing here could derive the five without inventing a ranking.\n- The Skills unit carries no proficiency level. The surface shows names alone, and a level\n beside a name the surface does not explain reads as a grade.\n- The profile's tagline reaches no unit. It is the profile's `## Summary` compressed, the About\n text is that Summary rewritten, and the headline states a value instead, so the tagline\n wherever it landed would be the same claim a second time.\n- The model's values and its vision reach no unit. The surface has no unit for a stated\n principle, and the About text is the only place one could go, where it would take the room\n that text has for the work the principle was held during.\n- An experience's `## References` and its `skills` reach no unit either. The references are the\n documents a claim rests on, which a reader of the model follows and a reader of a profile does\n not — the entry's own address is what they came for. The skills are already on the surface, as\n the five the Skills unit carries, and a list per entry would be the same claim told longer.\n- Nothing else the model holds reaches this surface: the standing links of the profile's\n `## Also at`, the identity's `email`, the proficiency levels, the experience kinds, the\n sources and this file's own type. Each is either how the model is kept, or a way to reach the\n subject that the network already provides.",
"text": "- Everything written for this surface is in the prose register of `conventions/WRITING.md`,\n aimed at a visitor who has not decided to stay: the first line carries the point, sentences\n run short because the profile is read on a phone, and a claim it opens with is a claim it then\n shows.\n- An entry carries the title and the period of the experience it was made from, and its body is\n written rather than copied. What the entry holds was written for a reader who came to read.\n- An experience's own tagline supplies the role an entry was played in, where it names one:\n several read `3AP · Lead Architect & Developer` and no other field carries that, so without\n this rule a reader learns what was delivered and never what part in it was yours.\n- A body is written from the experience's `## Achievements`, and from its `## Ending` where the\n ending states a fact the achievements do not. An ending says why a period closed and what it\n left, and on some entries that is the only place the outcome is written down.\n- The model is a company of one, so an experience nobody commissioned or hosted was the\n company's own work: an entry whose experience carries no `organization` names the identity.\n The network asks for a company on every entry and this answers it from the model rather than\n by inventing a name.\n- An entry's body runs to one paragraph, and an entry whose period is a single day runs to a\n sentence or two. The dates say which an entry is, so no count is needed here, and the register\n holds either way: the first sentence carries the point.\n- For a talk, an article or a published tool the address is most of what the entry is, so an\n entry whose experience carries a `url` shows it. An entry whose experience carries none shows\n no link: the model holds an address or it does not, and this surface invents none.\n- The About text is the profile's `## Summary` rewritten the same way. The sentence naming the\n security and compliance standards is not carried whole, because the LIKE MAGIC entry names\n those standards beside the work that met them, and a standard named without its work is a\n claim the reader cannot place. The claim that sentence also makes about AI goes with it, and\n is not restored elsewhere in the About text: the headline is that claim, and this surface does\n not say one thing twice.\n- Every dated unit runs newest first by `end`, with an experience that has none — a period still\n running — above them all, and `start` breaking a tie. Not by `start`: a position starts once\n and then runs for years, so ordering by it buries a long role under everything that began\n while it was running, and a talk given during a job would stand above the job. What a reader\n wants first is what ended last.\n- Every experience reaches a dated unit and each kind reaches one: `Role`, `Independent` and\n `Community` are Experience, `Project` is Projects, `Education` is Education. Nothing here reads\n what an experience produced or who it was for, because the kind already says both and the\n model records nothing finer.\n- The Skills unit shows five because the network shows five on this account. Which five is the\n owner's choice at each rebuild and not a rule: the model holds seventy skills and no ordering\n among them, so nothing here could derive the five without inventing a ranking.\n- The Skills unit carries no proficiency level. The surface shows names alone, and a level\n beside a name the surface does not explain reads as a grade.\n- The headline is the profile's tagline, carried whole. The tagline states the claim this work\n makes rather than describing it, which core admits since 0.17.0 and holds to one condition:\n the claim is one the model keeps elsewhere. This one is, as the value Decide well over build\n fast, so a reader who wants the argument behind the line has somewhere to go.\n- The model's values and its vision reach no unit. The surface has no unit for a stated\n principle, and the About text is the only place one could go, where it would take the room\n that text has for the work the principle was held during.\n- An experience's `## References` and its `skills` reach no unit either. The references are the\n documents a claim rests on, which a reader of the model follows and a reader of a profile does\n not — the entry's own address is what they came for. The skills are already on the surface, as\n the five the Skills unit carries, and a list per entry would be the same claim told longer.\n- Nothing else the model holds reaches this surface: the standing links of the profile's\n `## Also at`, the identity's `email`, the proficiency levels, the experience kinds, the\n sources and this file's own type. Each is either how the model is kept, or a way to reach the\n subject that the network already provides.",
"tables": []
},
{
Expand Down
2 changes: 1 addition & 1 deletion model/og.sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
85ebc71f69b46e33a3918f075defcc5fa115fefe481b5c21bbdbb27f6644262f
ed150dfbd9bb276d6d2dd4fd10846bdff8dbf8089cb032cb521ce44ff4ab3d3b
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
},
"devDependencies": {
"@robertblust/design": "github:robertblust/design#v0.55.0",
"companygraph-meta-model": "github:companygraph/meta-model#v0.16.0",
"companygraph-meta-model": "github:companygraph/meta-model#v0.17.0",
"pdf-lib": "^1.17.1",
"playwright": "^1.63.0"
}
Expand Down
2 changes: 1 addition & 1 deletion principles/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,7 @@ <h3>Production is the finish line</h3>
</article>
</section>

<p class="derived" data-de="Erzeugt aus <a href='https://github.com/robertblust/mental-model'>robertblust/mental-model</a>@2241591 – <code class='mono'>model/vision.md</code> und <code class='mono'>model/values/</code>. Dieses Repository ist eine Instanz von <a href='https://companygraph.io/'>CompanyGraph</a>, einem Meta-Modell, das ein Unternehmen als Graph aus Markdown beschreibt.">Generated from <a href="https://github.com/robertblust/mental-model">robertblust/mental-model</a>@2241591 — <code class="mono">model/vision.md</code> and <code class="mono">model/values/</code>. That repository is an instance of <a href="https://companygraph.io/">CompanyGraph</a>, a meta-model for describing a company as a graph of Markdown.</p>
<p class="derived" data-de="Erzeugt aus <a href='https://github.com/robertblust/mental-model'>robertblust/mental-model</a>@d7c2de5 – <code class='mono'>model/vision.md</code> und <code class='mono'>model/values/</code>. Dieses Repository ist eine Instanz von <a href='https://companygraph.io/'>CompanyGraph</a>, einem Meta-Modell, das ein Unternehmen als Graph aus Markdown beschreibt.">Generated from <a href="https://github.com/robertblust/mental-model">robertblust/mental-model</a>@d7c2de5 — <code class="mono">model/vision.md</code> and <code class="mono">model/values/</code>. That repository is an instance of <a href="https://companygraph.io/">CompanyGraph</a>, a meta-model for describing a company as a graph of Markdown.</p>
<!-- principles:end -->
</div>
</main>
Expand Down
2 changes: 1 addition & 1 deletion principles/og.sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
842f7a3d99dab59855c4c014414864aac2ed651799bff302e4c539941181eb8f
ce9ee36aa145b84a50dc14c368181845dbf57f056b11e3f55cbbd3562ac59439
2 changes: 1 addition & 1 deletion source.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"repo": "robertblust/mental-model", "commit": "2241591106e36cc8c4c616d6028173341db036ae"}
{"repo": "robertblust/mental-model", "commit": "d7c2de52805664dc418c5d9c722bc75c8c51218f"}
2 changes: 1 addition & 1 deletion timeline/og.sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
20d7f9508b49fe602c23b294cfb7c4f440fa6ccedb839c828b9f372603ae3523
aa2899068465d2c2d10206c800661b7f446b59ad5797c69862e55099549fccd7
6 changes: 6 additions & 0 deletions verify/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,11 @@ const CHECKS = {
// is remembered as if the menu had been used. A name the model does not know is ignored,
// and a list naming no kind at all is ignored whole.
await page.goto(BASE + spec.path + "?kinds=" + kindOff.toLowerCase() + ",nosuchkind");
// The ledger is built from a fetch, not from a block the page carries, so a goto resolves
// before there is anything to read. Every assertion below reads state the page writes after
// that fetch lands; without this wait they read the page as it was a moment earlier, which
// fails as a filter that reads "All kinds" about one in several runs.
await page.waitForFunction(() => document.querySelectorAll("#ledger details").length > 0);
const linked = await page.evaluate((kind) => ({
hidden: [...document.querySelectorAll("#ledger li.k-" + kind.toLowerCase())].filter(li => li.hidden).length,
others: [...document.querySelectorAll("#ledger li:has(details)")].filter(li => !li.classList.contains("k-" + kind.toLowerCase()) && !li.hidden).length,
Expand All @@ -327,6 +332,7 @@ const CHECKS = {
if (linked.search) return `the address still carries ${linked.search}`;
if (!linked.stored || linked.stored[kindOff] !== true || Object.keys(linked.stored).some(k => k !== kindOff && linked.stored[k])) return `?kinds=${kindOff} was not remembered: ${JSON.stringify(linked.stored)}`;
await page.goto(BASE + spec.path + "?kinds=nosuchkind");
await page.waitForFunction(() => document.querySelectorAll("#ledger details").length > 0);
const ignored = await page.evaluate(() => ({ hidden: [...document.querySelectorAll("#ledger li:has(details)")].filter(li => li.hidden).length, label: document.getElementById("kindslabel").textContent }));
if (ignored.label !== kindOff) return `?kinds naming no kind changed the selection to ${JSON.stringify(ignored.label)}`;
// Leave the page as it was found — at rest, every kind on, no row open — for whatever
Expand Down