create-egregore 0.20.2 → 0.21.0-runtime-mvp.2
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.
- package/assets/egregore-launcher.js +1013 -16
- package/bin/cli.js +11 -0
- package/lib/claude-runtime.js +192 -0
- package/lib/local.js +38 -31
- package/lib/pi-runtime.js +1 -0
- package/lib/prime-runtime.js +1 -0
- package/lib/runtime-identity.js +146 -0
- package/lib/setup.js +116 -17
- package/package.json +10 -6
- package/runtime/claude/.claude/context/commit-format.md +110 -0
- package/runtime/claude/.claude/context/git-language.md +46 -0
- package/runtime/claude/.claude/context/notification-consent.md +66 -0
- package/runtime/claude/.claude/context/pr-format.md +67 -0
- package/runtime/claude/.claude/context/telemetry.md +133 -0
- package/runtime/claude/.claude/hooks/boundary-check.sh +333 -0
- package/runtime/claude/.claude/hooks/branch-guard.sh +231 -0
- package/runtime/claude/.claude/hooks/card-context.sh +38 -0
- package/runtime/claude/.claude/hooks/emissary-detect.sh +53 -0
- package/runtime/claude/.claude/hooks/memory-refresh.sh +67 -0
- package/runtime/claude/.claude/hooks/onboarding-guard.sh +86 -0
- package/runtime/claude/.claude/hooks/retrieval-context.sh +43 -0
- package/runtime/claude/.claude/rules/voice-bedrock.md +73 -0
- package/runtime/claude/.claude/settings.json +131 -0
- package/runtime/claude/.claude/skills/activity/SKILL.md +68 -0
- package/runtime/claude/.claude/skills/announce/SKILL.md +54 -0
- package/runtime/claude/.claude/skills/archive/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/branch/SKILL.md +147 -0
- package/runtime/claude/.claude/skills/checkup/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/commit/SKILL.md +103 -0
- package/runtime/claude/.claude/skills/contribute/SKILL.md +343 -0
- package/runtime/claude/.claude/skills/create-skill/SKILL.md +135 -0
- package/runtime/claude/.claude/skills/dark-mode/SKILL.md +410 -0
- package/runtime/claude/.claude/skills/dashboard/SKILL.md +43 -0
- package/runtime/claude/.claude/skills/deep-reflect/REPORT.md +140 -0
- package/runtime/claude/.claude/skills/deep-reflect/RESEARCH.md +132 -0
- package/runtime/claude/.claude/skills/deep-reflect/ROLES.md +104 -0
- package/runtime/claude/.claude/skills/deep-reflect/SKILL.md +170 -0
- package/runtime/claude/.claude/skills/delete-user/SKILL.md +150 -0
- package/runtime/claude/.claude/skills/emissary/SKILL.md +220 -0
- package/runtime/claude/.claude/skills/handoff/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/harvest/AUDIT.md +546 -0
- package/runtime/claude/.claude/skills/harvest/FORMAT.md +436 -0
- package/runtime/claude/.claude/skills/harvest/PROCESS.md +395 -0
- package/runtime/claude/.claude/skills/harvest/QUESTION_PALETTE.md +76 -0
- package/runtime/claude/.claude/skills/harvest/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/ingest/SKILL.md +112 -0
- package/runtime/claude/.claude/skills/ingest-corpus/SKILL.md +187 -0
- package/runtime/claude/.claude/skills/ingest-notion/SKILL.md +214 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/SKILL.md +65 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/references/analysis-contract.md +125 -0
- package/runtime/claude/.claude/skills/invite/SKILL.md +111 -0
- package/runtime/claude/.claude/skills/issue/SKILL.md +104 -0
- package/runtime/claude/.claude/skills/me/SKILL.md +81 -0
- package/runtime/claude/.claude/skills/meeting/SKILL.md +76 -0
- package/runtime/claude/.claude/skills/meeting/references/analysis-contract.md +102 -0
- package/runtime/claude/.claude/skills/note/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/notion-connect/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/onboarding/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/pr/SKILL.md +85 -0
- package/runtime/claude/.claude/skills/pull/SKILL.md +79 -0
- package/runtime/claude/.claude/skills/push/SKILL.md +47 -0
- package/runtime/claude/.claude/skills/quest/SKILL.md +121 -0
- package/runtime/claude/.claude/skills/reflect/SKILL.md +69 -0
- package/runtime/claude/.claude/skills/review-pr/SKILL.md +276 -0
- package/runtime/claude/.claude/skills/save/SKILL.md +92 -0
- package/runtime/claude/.claude/skills/slack-connect/SKILL.md +148 -0
- package/runtime/claude/.claude/skills/summon/SKILL.md +240 -0
- package/runtime/claude/.claude/skills/sync-repos/SKILL.md +82 -0
- package/runtime/claude/.claude/skills/teams-connect/SKILL.md +216 -0
- package/runtime/claude/.claude/skills/telegram-connect/SKILL.md +110 -0
- package/runtime/claude/.claude/skills/telemetry/SKILL.md +117 -0
- package/runtime/claude/.claude/skills/test/SKILL.md +87 -0
- package/runtime/claude/.claude/skills/the-spiral/SKILL.md +492 -0
- package/runtime/claude/.claude/skills/tui-design/SKILL.md +188 -0
- package/runtime/claude/.claude/skills/tutorial/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/update/SKILL.md +265 -0
- package/runtime/claude/.claude/skills/view/SKILL.md +393 -0
- package/runtime/claude/.claude/skills/view/compose-scaffold.html +221 -0
- package/runtime/claude/.claude/skills/visual-explain/SKILL.md +132 -0
- package/runtime/claude/.claude/skills/wrap/SKILL.md +98 -0
- package/runtime/claude/CLAUDE.md +447 -0
- package/runtime/claude/bin/activity-action.sh +92 -0
- package/runtime/claude/bin/activity-data.sh +17 -0
- package/runtime/claude/bin/agent.sh +783 -0
- package/runtime/claude/bin/artifact-register.sh +164 -0
- package/runtime/claude/bin/artifact-writeback.sh +53 -0
- package/runtime/claude/bin/artifacts.sh +288 -0
- package/runtime/claude/bin/attendant.sh +707 -0
- package/runtime/claude/bin/autosave.sh +112 -0
- package/runtime/claude/bin/boundary.sh +253 -0
- package/runtime/claude/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/claude/bin/capture-reconcile.sh +69 -0
- package/runtime/claude/bin/capture-run.sh +357 -0
- package/runtime/claude/bin/codex-install-skills.sh +78 -0
- package/runtime/claude/bin/codex-render-spec.mjs +462 -0
- package/runtime/claude/bin/codex-session-start.sh +275 -0
- package/runtime/claude/bin/codex-skill-render.mjs +349 -0
- package/runtime/claude/bin/codex-sync-skills.sh +237 -0
- package/runtime/claude/bin/connect-refresh.sh +33 -0
- package/runtime/claude/bin/contribute-guard.sh +79 -0
- package/runtime/claude/bin/corpus_map.py +806 -0
- package/runtime/claude/bin/corpus_survey.py +304 -0
- package/runtime/claude/bin/dashboard-data.sh +18 -0
- package/runtime/claude/bin/github-auth.sh +121 -0
- package/runtime/claude/bin/graph-batch.sh +86 -0
- package/runtime/claude/bin/graph-op.sh +1106 -0
- package/runtime/claude/bin/graph-projection.sh +54 -0
- package/runtime/claude/bin/graph-wal.sh +242 -0
- package/runtime/claude/bin/graph.sh +267 -0
- package/runtime/claude/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/claude/bin/handoff-lifecycle.sh +280 -0
- package/runtime/claude/bin/handoff-pr-backfill.sh +86 -0
- package/runtime/claude/bin/handoff-preview.sh +169 -0
- package/runtime/claude/bin/handoff-run.sh +692 -0
- package/runtime/claude/bin/handoff-save-egregore.sh +224 -0
- package/runtime/claude/bin/index-handoff.sh +322 -0
- package/runtime/claude/bin/ingest-graph.sh +86 -0
- package/runtime/claude/bin/ingest-item.sh +10 -0
- package/runtime/claude/bin/ingest-surface.html +495 -0
- package/runtime/claude/bin/ingest.py +1011 -0
- package/runtime/claude/bin/ingest.sh +308 -0
- package/runtime/claude/bin/ingest_graph.py +856 -0
- package/runtime/claude/bin/ingest_surface.py +544 -0
- package/runtime/claude/bin/invite.sh +6 -0
- package/runtime/claude/bin/issue.sh +10 -0
- package/runtime/claude/bin/knowledge.sh +10 -0
- package/runtime/claude/bin/lib/artifact-id.sh +46 -0
- package/runtime/claude/bin/lib/config.sh +136 -0
- package/runtime/claude/bin/lib/context.sh +642 -0
- package/runtime/claude/bin/lib/dashboard-artifact.sh +242 -0
- package/runtime/claude/bin/lib/ensure-develop.sh +183 -0
- package/runtime/claude/bin/lib/git-message.sh +37 -0
- package/runtime/claude/bin/lib/git-sync.sh +494 -0
- package/runtime/claude/bin/lib/greeting.sh +548 -0
- package/runtime/claude/bin/lib/handoff-meta.sh +97 -0
- package/runtime/claude/bin/lib/hash.sh +13 -0
- package/runtime/claude/bin/lib/identity.sh +213 -0
- package/runtime/claude/bin/lib/metrics.sh +374 -0
- package/runtime/claude/bin/lib/noncode.sh +31 -0
- package/runtime/claude/bin/lib/permissions.sh +106 -0
- package/runtime/claude/bin/lib/time.sh +56 -0
- package/runtime/claude/bin/lib/worktree-links.sh +85 -0
- package/runtime/claude/bin/node-run.sh +42 -0
- package/runtime/claude/bin/notification.sh +6 -0
- package/runtime/claude/bin/notify.sh +636 -0
- package/runtime/claude/bin/observe-context.sh +14 -0
- package/runtime/claude/bin/onboarding.sh +6 -0
- package/runtime/claude/bin/person.py +634 -0
- package/runtime/claude/bin/person.sh +481 -0
- package/runtime/claude/bin/pi-render-spec.mjs +140 -0
- package/runtime/claude/bin/post-update.sh +37 -0
- package/runtime/claude/bin/prime-render-spec.mjs +147 -0
- package/runtime/claude/bin/publish-artifact.sh +324 -0
- package/runtime/claude/bin/publish-references.sh +144 -0
- package/runtime/claude/bin/quest.sh +9 -0
- package/runtime/claude/bin/question.sh +8 -0
- package/runtime/claude/bin/repo-state.sh +96 -0
- package/runtime/claude/bin/research-ingest.sh +7 -0
- package/runtime/claude/bin/restore-owned-skills.sh +67 -0
- package/runtime/claude/bin/retrieval_eval.py +385 -0
- package/runtime/claude/bin/runtime-identity.sh +70 -0
- package/runtime/claude/bin/runtime-upgrade.sh +43 -0
- package/runtime/claude/bin/scroll.sh +9 -0
- package/runtime/claude/bin/search.sh +318 -0
- package/runtime/claude/bin/session-autosave.sh +220 -0
- package/runtime/claude/bin/session-log.sh +199 -0
- package/runtime/claude/bin/session-start.sh +696 -0
- package/runtime/claude/bin/settings.sh +532 -0
- package/runtime/claude/bin/startup-check.sh +136 -0
- package/runtime/claude/bin/statusline.sh +41 -0
- package/runtime/claude/bin/telemetry.sh +666 -0
- package/runtime/claude/bin/test-changes.sh +344 -0
- package/runtime/claude/bin/thread.sh +9 -0
- package/runtime/claude/bin/todo.sh +9 -0
- package/runtime/claude/bin/view-render.sh +126 -0
- package/runtime/claude/bin/worktree-create.sh +145 -0
- package/runtime/claude/bin/worktree-remove.sh +50 -0
- package/runtime/claude/bin/worktree.sh +198 -0
- package/runtime/claude/egregore_runtime/__init__.py +228 -0
- package/runtime/claude/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/claude/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/claude/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/claude/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/claude/egregore_runtime/admin_gate.py +102 -0
- package/runtime/claude/egregore_runtime/artifacts.py +523 -0
- package/runtime/claude/egregore_runtime/contracts.py +499 -0
- package/runtime/claude/egregore_runtime/entitlements.py +85 -0
- package/runtime/claude/egregore_runtime/errors.py +10 -0
- package/runtime/claude/egregore_runtime/graph.py +356 -0
- package/runtime/claude/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/claude/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/claude/egregore_runtime/identity.py +734 -0
- package/runtime/claude/egregore_runtime/identity_cli.py +91 -0
- package/runtime/claude/egregore_runtime/ingest.py +575 -0
- package/runtime/claude/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/claude/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/claude/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/claude/egregore_runtime/invitations.py +116 -0
- package/runtime/claude/egregore_runtime/issue_cli.py +305 -0
- package/runtime/claude/egregore_runtime/issues.py +359 -0
- package/runtime/claude/egregore_runtime/knowledge.py +376 -0
- package/runtime/claude/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/claude/egregore_runtime/lifecycle.py +888 -0
- package/runtime/claude/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/claude/egregore_runtime/notification_cli.py +125 -0
- package/runtime/claude/egregore_runtime/notifications.py +230 -0
- package/runtime/claude/egregore_runtime/observe.py +342 -0
- package/runtime/claude/egregore_runtime/onboarding.py +290 -0
- package/runtime/claude/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/claude/egregore_runtime/policy.py +144 -0
- package/runtime/claude/egregore_runtime/profile.py +193 -0
- package/runtime/claude/egregore_runtime/quest_cli.py +216 -0
- package/runtime/claude/egregore_runtime/question_cli.py +180 -0
- package/runtime/claude/egregore_runtime/questions.py +304 -0
- package/runtime/claude/egregore_runtime/quests.py +419 -0
- package/runtime/claude/egregore_runtime/readiness.py +379 -0
- package/runtime/claude/egregore_runtime/research_ingest.py +256 -0
- package/runtime/claude/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/claude/egregore_runtime/runtime.py +464 -0
- package/runtime/claude/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/claude/egregore_runtime/scrolls.py +726 -0
- package/runtime/claude/egregore_runtime/status.py +412 -0
- package/runtime/claude/egregore_runtime/status_cli.py +174 -0
- package/runtime/claude/egregore_runtime/sync.py +218 -0
- package/runtime/claude/egregore_runtime/teamsync.py +139 -0
- package/runtime/claude/egregore_runtime/telemetry.py +640 -0
- package/runtime/claude/egregore_runtime/thread_cli.py +173 -0
- package/runtime/claude/egregore_runtime/threads.py +517 -0
- package/runtime/claude/egregore_runtime/todo_cli.py +142 -0
- package/runtime/claude/egregore_runtime/todos.py +244 -0
- package/runtime/claude/egregore_runtime/upgrade.py +770 -0
- package/runtime/claude/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/claude/egregore_runtime/writeback.py +391 -0
- package/runtime/claude/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/claude/manifest.json +284 -0
- package/runtime/codex/.codex/hooks/search-hint.js +21 -52
- package/runtime/codex/.codex/hooks.json +3 -3
- package/runtime/codex/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/codex/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/codex/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/codex/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/codex/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/codex/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/codex/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/codex/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/codex/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/codex/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/codex/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/codex/.codex/skills/note/SKILL.md +30 -25
- package/runtime/codex/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/codex/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/codex/.codex/skills/save/SKILL.md +2 -2
- package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/codex/.codex/skills/view/SKILL.md +115 -111
- package/runtime/codex/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/codex/.codex/spec-manifest.json +9 -9
- package/runtime/codex/AGENTS.md +62 -58
- package/runtime/codex/bin/activity-action.sh +92 -0
- package/runtime/codex/bin/activity-data.sh +12 -233
- package/runtime/codex/bin/agent.sh +84 -100
- package/runtime/codex/bin/artifact-register.sh +164 -0
- package/runtime/codex/bin/artifact-writeback.sh +53 -0
- package/runtime/codex/bin/artifacts.sh +288 -0
- package/runtime/codex/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/codex/bin/capture-run.sh +18 -2
- package/runtime/codex/bin/codex-render-spec.mjs +41 -16
- package/runtime/codex/bin/codex-session-start.sh +14 -4
- package/runtime/codex/bin/codex-skill-render.mjs +9 -7
- package/runtime/codex/bin/corpus_map.py +806 -0
- package/runtime/codex/bin/corpus_survey.py +304 -0
- package/runtime/codex/bin/dashboard-data.sh +11 -171
- package/runtime/codex/bin/github-auth.sh +121 -0
- package/runtime/codex/bin/graph-batch.sh +7 -0
- package/runtime/codex/bin/graph-op.sh +4 -0
- package/runtime/codex/bin/graph-projection.sh +54 -0
- package/runtime/codex/bin/graph-wal.sh +13 -0
- package/runtime/codex/bin/graph.sh +44 -0
- package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
- package/runtime/codex/bin/handoff-preview.sh +169 -0
- package/runtime/codex/bin/handoff-run.sh +42 -26
- package/runtime/codex/bin/ingest-graph.sh +6 -0
- package/runtime/codex/bin/ingest-item.sh +10 -0
- package/runtime/codex/bin/ingest.sh +59 -30
- package/runtime/codex/bin/invite.sh +6 -0
- package/runtime/codex/bin/issue.sh +10 -0
- package/runtime/codex/bin/knowledge.sh +10 -0
- package/runtime/codex/bin/lib/config.sh +20 -0
- package/runtime/codex/bin/lib/context.sh +46 -25
- package/runtime/codex/bin/lib/git-sync.sh +70 -6
- package/runtime/codex/bin/lib/greeting.sh +34 -5
- package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
- package/runtime/codex/bin/lib/worktree-links.sh +6 -0
- package/runtime/codex/bin/node-run.sh +42 -0
- package/runtime/codex/bin/notification.sh +6 -0
- package/runtime/codex/bin/observe-context.sh +14 -0
- package/runtime/codex/bin/onboarding.sh +6 -0
- package/runtime/codex/bin/person.py +4 -0
- package/runtime/codex/bin/person.sh +43 -10
- package/runtime/codex/bin/pi-render-spec.mjs +140 -0
- package/runtime/codex/bin/post-update.sh +37 -0
- package/runtime/codex/bin/prime-render-spec.mjs +147 -0
- package/runtime/codex/bin/publish-artifact.sh +55 -2
- package/runtime/codex/bin/quest.sh +9 -0
- package/runtime/codex/bin/question.sh +8 -0
- package/runtime/codex/bin/research-ingest.sh +7 -0
- package/runtime/codex/bin/restore-owned-skills.sh +67 -0
- package/runtime/codex/bin/retrieval_eval.py +385 -0
- package/runtime/codex/bin/runtime-identity.sh +70 -0
- package/runtime/codex/bin/runtime-upgrade.sh +43 -0
- package/runtime/codex/bin/scroll.sh +9 -0
- package/runtime/codex/bin/search.sh +231 -195
- package/runtime/codex/bin/settings.sh +174 -5
- package/runtime/codex/bin/startup-check.sh +136 -0
- package/runtime/codex/bin/telemetry.sh +522 -247
- package/runtime/codex/bin/test-changes.sh +344 -0
- package/runtime/codex/bin/thread.sh +9 -0
- package/runtime/codex/bin/todo.sh +9 -0
- package/runtime/codex/bin/view-render.sh +126 -0
- package/runtime/codex/bin/worktree-create.sh +19 -5
- package/runtime/codex/egregore_runtime/__init__.py +228 -0
- package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
- package/runtime/codex/egregore_runtime/artifacts.py +523 -0
- package/runtime/codex/egregore_runtime/contracts.py +499 -0
- package/runtime/codex/egregore_runtime/entitlements.py +85 -0
- package/runtime/codex/egregore_runtime/errors.py +10 -0
- package/runtime/codex/egregore_runtime/graph.py +356 -0
- package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/codex/egregore_runtime/identity.py +734 -0
- package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
- package/runtime/codex/egregore_runtime/ingest.py +575 -0
- package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/codex/egregore_runtime/invitations.py +116 -0
- package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
- package/runtime/codex/egregore_runtime/issues.py +359 -0
- package/runtime/codex/egregore_runtime/knowledge.py +376 -0
- package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
- package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
- package/runtime/codex/egregore_runtime/notifications.py +230 -0
- package/runtime/codex/egregore_runtime/observe.py +342 -0
- package/runtime/codex/egregore_runtime/onboarding.py +290 -0
- package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/codex/egregore_runtime/policy.py +144 -0
- package/runtime/codex/egregore_runtime/profile.py +193 -0
- package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
- package/runtime/codex/egregore_runtime/question_cli.py +180 -0
- package/runtime/codex/egregore_runtime/questions.py +304 -0
- package/runtime/codex/egregore_runtime/quests.py +419 -0
- package/runtime/codex/egregore_runtime/readiness.py +379 -0
- package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
- package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/codex/egregore_runtime/runtime.py +464 -0
- package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/codex/egregore_runtime/scrolls.py +726 -0
- package/runtime/codex/egregore_runtime/status.py +412 -0
- package/runtime/codex/egregore_runtime/status_cli.py +174 -0
- package/runtime/codex/egregore_runtime/sync.py +218 -0
- package/runtime/codex/egregore_runtime/teamsync.py +139 -0
- package/runtime/codex/egregore_runtime/telemetry.py +640 -0
- package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
- package/runtime/codex/egregore_runtime/threads.py +517 -0
- package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
- package/runtime/codex/egregore_runtime/todos.py +244 -0
- package/runtime/codex/egregore_runtime/upgrade.py +770 -0
- package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/codex/egregore_runtime/writeback.py +391 -0
- package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/codex/manifest.json +98 -1
- package/runtime/pi/.codex/hooks/search-hint.js +21 -52
- package/runtime/pi/.codex/hooks.json +3 -3
- package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
- package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
- package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
- package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/pi/.codex/spec-manifest.json +9 -9
- package/runtime/pi/.pi/APPEND_SYSTEM.md +57 -48
- package/runtime/pi/.pi/extensions/egregore.ts +7 -0
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +62 -58
- package/runtime/pi/bin/activity-action.sh +92 -0
- package/runtime/pi/bin/activity-data.sh +12 -233
- package/runtime/pi/bin/agent.sh +84 -100
- package/runtime/pi/bin/artifact-register.sh +164 -0
- package/runtime/pi/bin/artifact-writeback.sh +53 -0
- package/runtime/pi/bin/artifacts.sh +288 -0
- package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/pi/bin/capture-run.sh +18 -2
- package/runtime/pi/bin/codex-render-spec.mjs +41 -16
- package/runtime/pi/bin/codex-session-start.sh +14 -4
- package/runtime/pi/bin/codex-skill-render.mjs +9 -7
- package/runtime/pi/bin/corpus_map.py +806 -0
- package/runtime/pi/bin/corpus_survey.py +304 -0
- package/runtime/pi/bin/dashboard-data.sh +11 -171
- package/runtime/pi/bin/github-auth.sh +121 -0
- package/runtime/pi/bin/graph-batch.sh +7 -0
- package/runtime/pi/bin/graph-op.sh +4 -0
- package/runtime/pi/bin/graph-projection.sh +54 -0
- package/runtime/pi/bin/graph-wal.sh +13 -0
- package/runtime/pi/bin/graph.sh +44 -0
- package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
- package/runtime/pi/bin/handoff-preview.sh +169 -0
- package/runtime/pi/bin/handoff-run.sh +42 -26
- package/runtime/pi/bin/ingest-graph.sh +6 -0
- package/runtime/pi/bin/ingest-item.sh +10 -0
- package/runtime/pi/bin/ingest.sh +59 -30
- package/runtime/pi/bin/invite.sh +6 -0
- package/runtime/pi/bin/issue.sh +10 -0
- package/runtime/pi/bin/knowledge.sh +10 -0
- package/runtime/pi/bin/lib/config.sh +20 -0
- package/runtime/pi/bin/lib/context.sh +46 -25
- package/runtime/pi/bin/lib/git-sync.sh +70 -6
- package/runtime/pi/bin/lib/greeting.sh +34 -5
- package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
- package/runtime/pi/bin/lib/worktree-links.sh +6 -0
- package/runtime/pi/bin/node-run.sh +42 -0
- package/runtime/pi/bin/notification.sh +6 -0
- package/runtime/pi/bin/observe-context.sh +14 -0
- package/runtime/pi/bin/onboarding.sh +6 -0
- package/runtime/pi/bin/person.py +4 -0
- package/runtime/pi/bin/person.sh +43 -10
- package/runtime/pi/bin/pi-observe-context.mjs +93 -0
- package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
- package/runtime/pi/bin/pi-render-spec.mjs +1 -1
- package/runtime/pi/bin/post-update.sh +37 -0
- package/runtime/pi/bin/prime-render-spec.mjs +147 -0
- package/runtime/pi/bin/publish-artifact.sh +55 -2
- package/runtime/pi/bin/quest.sh +9 -0
- package/runtime/pi/bin/question.sh +8 -0
- package/runtime/pi/bin/research-ingest.sh +7 -0
- package/runtime/pi/bin/restore-owned-skills.sh +67 -0
- package/runtime/pi/bin/retrieval_eval.py +385 -0
- package/runtime/pi/bin/runtime-identity.sh +70 -0
- package/runtime/pi/bin/runtime-upgrade.sh +43 -0
- package/runtime/pi/bin/scroll.sh +9 -0
- package/runtime/pi/bin/search.sh +231 -195
- package/runtime/pi/bin/settings.sh +174 -5
- package/runtime/pi/bin/startup-check.sh +136 -0
- package/runtime/pi/bin/telemetry.sh +522 -247
- package/runtime/pi/bin/test-changes.sh +344 -0
- package/runtime/pi/bin/thread.sh +9 -0
- package/runtime/pi/bin/todo.sh +9 -0
- package/runtime/pi/bin/view-render.sh +126 -0
- package/runtime/pi/bin/worktree-create.sh +19 -5
- package/runtime/pi/egregore_runtime/__init__.py +228 -0
- package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
- package/runtime/pi/egregore_runtime/artifacts.py +523 -0
- package/runtime/pi/egregore_runtime/contracts.py +499 -0
- package/runtime/pi/egregore_runtime/entitlements.py +85 -0
- package/runtime/pi/egregore_runtime/errors.py +10 -0
- package/runtime/pi/egregore_runtime/graph.py +356 -0
- package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/pi/egregore_runtime/identity.py +734 -0
- package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
- package/runtime/pi/egregore_runtime/ingest.py +575 -0
- package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/pi/egregore_runtime/invitations.py +116 -0
- package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
- package/runtime/pi/egregore_runtime/issues.py +359 -0
- package/runtime/pi/egregore_runtime/knowledge.py +376 -0
- package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
- package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
- package/runtime/pi/egregore_runtime/notifications.py +230 -0
- package/runtime/pi/egregore_runtime/observe.py +342 -0
- package/runtime/pi/egregore_runtime/onboarding.py +290 -0
- package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/pi/egregore_runtime/policy.py +144 -0
- package/runtime/pi/egregore_runtime/profile.py +193 -0
- package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
- package/runtime/pi/egregore_runtime/question_cli.py +180 -0
- package/runtime/pi/egregore_runtime/questions.py +304 -0
- package/runtime/pi/egregore_runtime/quests.py +419 -0
- package/runtime/pi/egregore_runtime/readiness.py +379 -0
- package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
- package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/pi/egregore_runtime/runtime.py +464 -0
- package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/pi/egregore_runtime/scrolls.py +726 -0
- package/runtime/pi/egregore_runtime/status.py +412 -0
- package/runtime/pi/egregore_runtime/status_cli.py +174 -0
- package/runtime/pi/egregore_runtime/sync.py +218 -0
- package/runtime/pi/egregore_runtime/teamsync.py +139 -0
- package/runtime/pi/egregore_runtime/telemetry.py +640 -0
- package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
- package/runtime/pi/egregore_runtime/threads.py +517 -0
- package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
- package/runtime/pi/egregore_runtime/todos.py +244 -0
- package/runtime/pi/egregore_runtime/upgrade.py +770 -0
- package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/pi/egregore_runtime/writeback.py +391 -0
- package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/pi/manifest.json +98 -1
- package/runtime/prime/.codex/hooks/search-hint.js +21 -52
- package/runtime/prime/.codex/hooks.json +3 -3
- package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
- package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
- package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
- package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/prime/.codex/spec-manifest.json +9 -9
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +57 -48
- package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +62 -58
- package/runtime/prime/bin/activity-action.sh +92 -0
- package/runtime/prime/bin/activity-data.sh +12 -233
- package/runtime/prime/bin/agent.sh +84 -100
- package/runtime/prime/bin/artifact-register.sh +164 -0
- package/runtime/prime/bin/artifact-writeback.sh +53 -0
- package/runtime/prime/bin/artifacts.sh +288 -0
- package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/prime/bin/capture-run.sh +18 -2
- package/runtime/prime/bin/codex-render-spec.mjs +41 -16
- package/runtime/prime/bin/codex-session-start.sh +14 -4
- package/runtime/prime/bin/codex-skill-render.mjs +9 -7
- package/runtime/prime/bin/corpus_map.py +806 -0
- package/runtime/prime/bin/corpus_survey.py +304 -0
- package/runtime/prime/bin/dashboard-data.sh +11 -171
- package/runtime/prime/bin/github-auth.sh +121 -0
- package/runtime/prime/bin/graph-batch.sh +7 -0
- package/runtime/prime/bin/graph-op.sh +4 -0
- package/runtime/prime/bin/graph-projection.sh +54 -0
- package/runtime/prime/bin/graph-wal.sh +13 -0
- package/runtime/prime/bin/graph.sh +44 -0
- package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
- package/runtime/prime/bin/handoff-preview.sh +169 -0
- package/runtime/prime/bin/handoff-run.sh +42 -26
- package/runtime/prime/bin/ingest-graph.sh +6 -0
- package/runtime/prime/bin/ingest-item.sh +10 -0
- package/runtime/prime/bin/ingest.sh +59 -30
- package/runtime/prime/bin/invite.sh +6 -0
- package/runtime/prime/bin/issue.sh +10 -0
- package/runtime/prime/bin/knowledge.sh +10 -0
- package/runtime/prime/bin/lib/config.sh +20 -0
- package/runtime/prime/bin/lib/context.sh +46 -25
- package/runtime/prime/bin/lib/git-sync.sh +70 -6
- package/runtime/prime/bin/lib/greeting.sh +34 -5
- package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
- package/runtime/prime/bin/lib/worktree-links.sh +6 -0
- package/runtime/prime/bin/node-run.sh +42 -0
- package/runtime/prime/bin/notification.sh +6 -0
- package/runtime/prime/bin/observe-context.sh +14 -0
- package/runtime/prime/bin/onboarding.sh +6 -0
- package/runtime/prime/bin/person.py +4 -0
- package/runtime/prime/bin/person.sh +43 -10
- package/runtime/prime/bin/pi-observe-context.mjs +93 -0
- package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
- package/runtime/prime/bin/pi-render-spec.mjs +140 -0
- package/runtime/prime/bin/post-update.sh +37 -0
- package/runtime/prime/bin/prime-render-spec.mjs +1 -1
- package/runtime/prime/bin/publish-artifact.sh +55 -2
- package/runtime/prime/bin/quest.sh +9 -0
- package/runtime/prime/bin/question.sh +8 -0
- package/runtime/prime/bin/research-ingest.sh +7 -0
- package/runtime/prime/bin/restore-owned-skills.sh +67 -0
- package/runtime/prime/bin/retrieval_eval.py +385 -0
- package/runtime/prime/bin/runtime-identity.sh +70 -0
- package/runtime/prime/bin/runtime-upgrade.sh +43 -0
- package/runtime/prime/bin/scroll.sh +9 -0
- package/runtime/prime/bin/search.sh +231 -195
- package/runtime/prime/bin/settings.sh +174 -5
- package/runtime/prime/bin/startup-check.sh +136 -0
- package/runtime/prime/bin/telemetry.sh +522 -247
- package/runtime/prime/bin/test-changes.sh +344 -0
- package/runtime/prime/bin/thread.sh +9 -0
- package/runtime/prime/bin/todo.sh +9 -0
- package/runtime/prime/bin/view-render.sh +126 -0
- package/runtime/prime/bin/worktree-create.sh +19 -5
- package/runtime/prime/egregore_runtime/__init__.py +228 -0
- package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
- package/runtime/prime/egregore_runtime/artifacts.py +523 -0
- package/runtime/prime/egregore_runtime/contracts.py +499 -0
- package/runtime/prime/egregore_runtime/entitlements.py +85 -0
- package/runtime/prime/egregore_runtime/errors.py +10 -0
- package/runtime/prime/egregore_runtime/graph.py +356 -0
- package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/prime/egregore_runtime/identity.py +734 -0
- package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
- package/runtime/prime/egregore_runtime/ingest.py +575 -0
- package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/prime/egregore_runtime/invitations.py +116 -0
- package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
- package/runtime/prime/egregore_runtime/issues.py +359 -0
- package/runtime/prime/egregore_runtime/knowledge.py +376 -0
- package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
- package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
- package/runtime/prime/egregore_runtime/notifications.py +230 -0
- package/runtime/prime/egregore_runtime/observe.py +342 -0
- package/runtime/prime/egregore_runtime/onboarding.py +290 -0
- package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/prime/egregore_runtime/policy.py +144 -0
- package/runtime/prime/egregore_runtime/profile.py +193 -0
- package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
- package/runtime/prime/egregore_runtime/question_cli.py +180 -0
- package/runtime/prime/egregore_runtime/questions.py +304 -0
- package/runtime/prime/egregore_runtime/quests.py +419 -0
- package/runtime/prime/egregore_runtime/readiness.py +379 -0
- package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
- package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/prime/egregore_runtime/runtime.py +464 -0
- package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/prime/egregore_runtime/scrolls.py +726 -0
- package/runtime/prime/egregore_runtime/status.py +412 -0
- package/runtime/prime/egregore_runtime/status_cli.py +174 -0
- package/runtime/prime/egregore_runtime/sync.py +218 -0
- package/runtime/prime/egregore_runtime/teamsync.py +139 -0
- package/runtime/prime/egregore_runtime/telemetry.py +640 -0
- package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
- package/runtime/prime/egregore_runtime/threads.py +517 -0
- package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
- package/runtime/prime/egregore_runtime/todos.py +244 -0
- package/runtime/prime/egregore_runtime/upgrade.py +770 -0
- package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/prime/egregore_runtime/writeback.py +391 -0
- package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/prime/manifest.json +98 -1
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: view
|
|
3
|
+
description: "Generate a branded HTML artifact from Egregore data (quest, handoff, activity, board, network, or any document) and open it in the browser. Use for /view, 'render this', or 'show me visually'."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Generate a branded HTML artifact from Egregore data and open it in the browser.
|
|
7
|
+
|
|
8
|
+
Works in both connected and local mode — resolves data from memory files, not the graph.
|
|
9
|
+
|
|
10
|
+
## When to invoke
|
|
11
|
+
|
|
12
|
+
User says: "show me visually", "render this", "view as artifact", "open in browser",
|
|
13
|
+
"make this readable", "generate artifact", "show me [quest/handoff/plan]", "/view"
|
|
14
|
+
|
|
15
|
+
Not this: terminal formatting → just format in markdown · dashboard → `/dashboard`
|
|
16
|
+
|
|
17
|
+
Arguments: $ARGUMENTS (Optional: artifact type and/or name, or a file path)
|
|
18
|
+
|
|
19
|
+
## Runtime source boundary
|
|
20
|
+
|
|
21
|
+
Resolve deictic requests from the current conversation before organizational
|
|
22
|
+
retrieval. When `this`, `that`, `it`, or `the above` unambiguously refers to
|
|
23
|
+
the single artifact just created, accepted, or shown, reuse its full content
|
|
24
|
+
already in context and stage it verbatim. If that content is collapsed or the
|
|
25
|
+
prior receipt supplies only a canonical path, open that exact path once through
|
|
26
|
+
`bin/search.sh open`; do not run `bin/search.sh query` to rediscover a known
|
|
27
|
+
artifact.
|
|
28
|
+
|
|
29
|
+
Resolve organizational sources from the attached authorized
|
|
30
|
+
`EGREGORE_ORG_CONTEXT_V1` block first. Do not repeat its retrieval or reopen
|
|
31
|
+
its already opened sources. When the requested source is absent, run one
|
|
32
|
+
Runtime query and open the selected canonical file through
|
|
33
|
+
`bin/search.sh open`; do not use raw `ls`, `find`, or graph traversal as an
|
|
34
|
+
authorization bypass. Local rendering is the default. Publishing or replacing
|
|
35
|
+
a stable hosted view requires an explicit `SHARE` request and checkpoint.
|
|
36
|
+
Never publish from an ordinary view request.
|
|
37
|
+
|
|
38
|
+
## Loom routing
|
|
39
|
+
|
|
40
|
+
Skip this section when the prompt contains `LOOM-EXECUTOR`; execute the
|
|
41
|
+
authorized render directly and never re-delegate.
|
|
42
|
+
|
|
43
|
+
Explicit `--compose`, designed/flagship, or client-facing requests remain
|
|
44
|
+
main-loop-only: render inline, then print
|
|
45
|
+
`bash bin/loom.sh footer view --override` and mark telemetry as an override.
|
|
46
|
+
For the deterministic renderer:
|
|
47
|
+
|
|
48
|
+
1. Resolve `ROUTE=$(bash bin/loom.sh route view)`. When `bin/loom.sh` is not
|
|
49
|
+
present (Loom is internal-only and does not ship in the OSS distribution),
|
|
50
|
+
skip route resolution and the footer entirely and follow the script route
|
|
51
|
+
below — it is the framework default and needs no Loom.
|
|
52
|
+
2. **Script route (`"mode": "script"` — the framework default).** Judgment
|
|
53
|
+
stays in the main loop: resolve what the user means into a type and source
|
|
54
|
+
(the Resolution logic below). Then run the mechanics with no model in the
|
|
55
|
+
loop — one call, which stages the source through the Runtime read boundary,
|
|
56
|
+
serves repeat views from a content-addressed cache, renders, and opens:
|
|
57
|
+
`bash bin/view-render.sh <type> <memory/...-or-file> [-- --brief <path>]`.
|
|
58
|
+
Print its output verbatim, then `bash bin/loom.sh footer view`. Do not
|
|
59
|
+
spawn a subagent, re-open the source yourself, or re-run retrieval for the
|
|
60
|
+
render. If the script exits non-zero, report its error; only a composition
|
|
61
|
+
or interaction need justifies taking over inline.
|
|
62
|
+
3. For an inline route, continue below in the main loop.
|
|
63
|
+
4. For a delegate route (org override), spawn `loom-executor` at the returned
|
|
64
|
+
tier with `LOOM-DECISION-ID`, `LOOM-EXECUTOR: Execute
|
|
65
|
+
.claude/skills/view/SKILL.md`, the user's exact arguments, and the attached
|
|
66
|
+
`EGREGORE_ORG_CONTEXT_V1` block verbatim; print its final output, then
|
|
67
|
+
`bash bin/loom.sh footer view`. On `LOW_CONFIDENCE:` take over inline.
|
|
68
|
+
5. Emit telemetry best-effort from the driver:
|
|
69
|
+
`bash bin/telemetry.sh emit "command" '{"command":"view","routed":true}' 2>/dev/null &`.
|
|
70
|
+
|
|
71
|
+
Loom transports the authorized context; it never grants new read or SHARE
|
|
72
|
+
authority. The minion workflow is unrelated to this render route.
|
|
73
|
+
|
|
74
|
+
## Rendering mode
|
|
75
|
+
|
|
76
|
+
Use the packaged deterministic renderer by default, driven through
|
|
77
|
+
`bin/view-render.sh` — rendering is mechanical, so no model belongs in that
|
|
78
|
+
path. Run inline composition only when the user explicitly requests it. A
|
|
79
|
+
normal “view/open/render this” uses the script route without duplicate
|
|
80
|
+
retrieval. A repeat view of unchanged content reports
|
|
81
|
+
`(served from render cache)` — that is expected, not staleness: the cache key
|
|
82
|
+
is the content bytes, the renderer, and the arguments.
|
|
83
|
+
|
|
84
|
+
## Supported artifact types
|
|
85
|
+
|
|
86
|
+
- `quest` — renders quest markdown from `memory/quests/`
|
|
87
|
+
- `handoff` — renders handoff markdown from `memory/handoffs/`
|
|
88
|
+
- `activity` — renders live team activity dashboard (no file needed)
|
|
89
|
+
- `board` — renders the typed live project-board surface (interactive editor with 5 tabs: Activity / Priority / Person / Timeline / Done). Publishing the stable hosted board is a separate explicit action.
|
|
90
|
+
- `network` — renders people/relationship network (no file needed)
|
|
91
|
+
- `document` — renders any markdown file with branded styling (auto-detected fallback)
|
|
92
|
+
|
|
93
|
+
## Resolution logic
|
|
94
|
+
|
|
95
|
+
The key job of `/view` is resolving what the user wants to see into a file path. This must work without a graph.
|
|
96
|
+
|
|
97
|
+
### 1. Parse the arguments
|
|
98
|
+
|
|
99
|
+
- `/view quest artifact-generation` → type=quest, name=artifact-generation
|
|
100
|
+
- `/view handoff oss-security-audit` → type=handoff, name=oss-security-audit
|
|
101
|
+
- `/view activity` → type=activity, no file needed
|
|
102
|
+
- `/view board` → type=board, typed live surface; no source path resolution
|
|
103
|
+
- `/view network` → type=network, no file needed
|
|
104
|
+
- `/view artifact-generation` → no type specified, search all types
|
|
105
|
+
- `/view memory/knowledge/decisions/some-decision.md` → direct file path
|
|
106
|
+
- `show me the security audit visually` → extract keywords, search
|
|
107
|
+
|
|
108
|
+
### 2. Resolve the file
|
|
109
|
+
|
|
110
|
+
**Direct canonical file path**: If the argument names `memory/...`, open it
|
|
111
|
+
through `bash bin/search.sh open "memory/..."` into a temporary render source.
|
|
112
|
+
A denied or missing source stops resolution; never pass the raw canonical path
|
|
113
|
+
to the renderer or fall through to an unchecked filesystem read. An explicit
|
|
114
|
+
non-memory path inside the current repository may be rendered as a repository
|
|
115
|
+
document, but it is never treated as organizational memory.
|
|
116
|
+
|
|
117
|
+
**Quest, handoff, document, or auto-detected name**: Prefer the best matching
|
|
118
|
+
canonical source and opened content already present in
|
|
119
|
+
`EGREGORE_ORG_CONTEXT_V1`; stage that content as a temporary render source
|
|
120
|
+
without reopening it. Otherwise run one ranked call, optionally including the
|
|
121
|
+
requested type in the concept, then open only the selected result into the
|
|
122
|
+
temporary render source:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
bash bin/search.sh query "<artifact name and optional type>" -n 6 --compact --context-packet
|
|
126
|
+
bash bin/search.sh open "<selected memory/... path>"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
On Claude, `--compact --context-packet` keeps the ranked evidence out of the
|
|
130
|
+
visible transcript — the resolution query must never print result blocks
|
|
131
|
+
before the render. Pass the selected source to the renderer script as its
|
|
132
|
+
`memory/...` canonical path, never as an absolute filesystem path.
|
|
133
|
+
|
|
134
|
+
Infer the renderer type from the selected canonical path. If several results
|
|
135
|
+
are genuinely ambiguous, show the short choices rather than scanning the
|
|
136
|
+
repository again.
|
|
137
|
+
|
|
138
|
+
**Activity**: No file resolution needed — runs `bin/activity-data.sh` live.
|
|
139
|
+
|
|
140
|
+
**Board / Network**: Use only the renderer's typed Runtime-backed live surface;
|
|
141
|
+
do not pre-scan or pre-open memory files.
|
|
142
|
+
|
|
143
|
+
**Auto-detect type** (no type specified): infer `quest` or `handoff` from the
|
|
144
|
+
authorized result path; everything else is `document`.
|
|
145
|
+
|
|
146
|
+
### 3. Generate and open
|
|
147
|
+
|
|
148
|
+
**On the script route, `bin/view-render.sh` owns everything in this section**:
|
|
149
|
+
it resolves the packaged renderer locally (checked-out
|
|
150
|
+
`packages/egregore-artifacts` first, then the installed `egregore-artifacts`;
|
|
151
|
+
never `npx`, never a registry fetch), stages `memory/...` sources through
|
|
152
|
+
`bin/search.sh open`, serves unchanged content from the content-addressed
|
|
153
|
+
render cache, invokes the renderer exactly once with `--output`, and opens the
|
|
154
|
+
browser. Call it once with the resolved type and source; do not re-implement
|
|
155
|
+
these steps inline. The commands below describe what the script does and are
|
|
156
|
+
the inline fallback only when the resolved route is `inline`.
|
|
157
|
+
|
|
158
|
+
**Design trace (documents).** A `document` render should follow the design
|
|
159
|
+
trace, not ship bare: auto-walk the UGI synthesis graph from the document's
|
|
160
|
+
substance (five stage ids — objective · audience · register · palette ·
|
|
161
|
+
grammar; option ids and auto-walk rules in
|
|
162
|
+
`packages/design-system/generative-ui/skill/SKILL.md`), resolve the brief, and
|
|
163
|
+
pass it to the renderer:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
bash bin/node-run.sh --input-type=module -e "
|
|
167
|
+
import { resolveBrief } from './packages/design-system/generative-ui/resolve-brief.js';
|
|
168
|
+
import fs from 'node:fs';
|
|
169
|
+
fs.mkdirSync('/tmp/egregore-artifacts', { recursive: true });
|
|
170
|
+
fs.writeFileSync('/tmp/egregore-artifacts/brief-{slug}.json',
|
|
171
|
+
JSON.stringify(resolveBrief(['{objective}','{audience}','{register}','{palette}','{grammar}'])));
|
|
172
|
+
"
|
|
173
|
+
bash bin/view-render.sh document <memory/...-or-file> -- --brief /tmp/egregore-artifacts/brief-{slug}.json
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Picking the five ids is judgment and stays in the main loop; the brief file
|
|
177
|
+
rides into the render through `--` and participates in the cache key.
|
|
178
|
+
|
|
179
|
+
Pick the five ids from the substance, one line of judgment each (e.g. a
|
|
180
|
+
strategy prep doc → decide · operators · editorial · vellum · decisive; a
|
|
181
|
+
public explainer → persuade · newcomer · marketing · loam · quiet). The brief
|
|
182
|
+
drives palette + grammar treatment; the designed layout (nav · hero · anchored
|
|
183
|
+
sections) renders regardless. If the checked-out generative-ui layer is
|
|
184
|
+
unavailable, render without `--brief`; never fetch it or block on the trace.
|
|
185
|
+
|
|
186
|
+
The deterministic renderer already owns its light/dark theme contract. Do not
|
|
187
|
+
invoke or reread a separate visual-theme skill for an ordinary render. Apply
|
|
188
|
+
the Dark Mode contract only while authoring composed HTML or changing renderer
|
|
189
|
+
code.
|
|
190
|
+
|
|
191
|
+
### Composition path (`--compose`) — band 5, main-loop only
|
|
192
|
+
|
|
193
|
+
The template above is the **floor**. `--compose` is the **ceiling**: the design
|
|
194
|
+
trace at full depth means COMPOSITION, not pass-through (D6 free-generative band
|
|
195
|
+
— how the reference pages were made). The template renderer can never reach it;
|
|
196
|
+
composition is the frontier model authoring the page from the substance. This
|
|
197
|
+
path is what makes that reachable from the command instead of only by accident.
|
|
198
|
+
|
|
199
|
+
This path fires only on explicit cues: `--compose`, "compose / make it
|
|
200
|
+
presentable / client-facing / flagship / with the design trace / use the design
|
|
201
|
+
trace / designed artifact / band 5". **When the user names "the design trace,"
|
|
202
|
+
they mean this composed ceiling — never the floor.** Otherwise use the local
|
|
203
|
+
deterministic renderer.
|
|
204
|
+
|
|
205
|
+
**Technical documents compose too — in a different register.** A spec, RFC,
|
|
206
|
+
protocol, architecture doc, API reference, evaluation report, or postmortem is
|
|
207
|
+
flagship and gets the full chrome, but it does **not** get editorial voice. See
|
|
208
|
+
step 4 below: the register decision comes before any content is written, and
|
|
209
|
+
picking wrong is the single most common way a composed render lands badly.
|
|
210
|
+
|
|
211
|
+
**Procedure (run inline — never delegate; see the compose note in Loom routing):**
|
|
212
|
+
|
|
213
|
+
1. Read the source document in full.
|
|
214
|
+
2. Start from the scaffold: `.claude/skills/view/compose-scaffold.html` (copy it;
|
|
215
|
+
it carries the complete Meridian chrome — vellum/nocturne/loam tokens, fonts,
|
|
216
|
+
sticky nav, theme toggle, contours — and a documented component kit). You fill
|
|
217
|
+
content; you do **not** rebuild the chrome or re-pick colors.
|
|
218
|
+
3. Walk the UGI graph for the register/palette/grammar (as above) and stamp the
|
|
219
|
+
manifest `register`/`grammar` + the footer trail. Pick the palette by
|
|
220
|
+
substance: vellum (strategy/decision), loam (warm/instructional), etc.
|
|
221
|
+
4. **Decide the register FIRST — editorial or technical.** This governs every
|
|
222
|
+
sentence you then write, and it is not a style preference; it is what the
|
|
223
|
+
document *is*. Ask: does a reader come here to be *persuaded of a view*, or
|
|
224
|
+
to *look something up and implement it*?
|
|
225
|
+
|
|
226
|
+
| | **Editorial** | **Technical** |
|
|
227
|
+
|---|---|---|
|
|
228
|
+
| Documents | strategy · prep · briefing · explainer · analysis · narrative recap · pitch | spec · RFC · protocol · architecture · API reference · evaluation report · runbook · postmortem |
|
|
229
|
+
| Headings | **statement titles** — the section's *finding* as display copy ("Most of the zoom-out is already decided.") | **descriptive, numbered** — the section's *name* ("3.3 Toponym and cultivar collision") |
|
|
230
|
+
| Hero | two-tone `Lead. <em>accent phrase</em>` + italic standfirst | plain title + a `.meta` grid (version · date · author · depends-on) |
|
|
231
|
+
| Prose | argues, lands a point, carries voice | states, qualifies, cites; declarative and neutral |
|
|
232
|
+
| Opens with | the claim | Abstract, then Scope |
|
|
233
|
+
| Decisions | `.hl` / `.readout` — the thing to land | explicit `Decision:` blocks, individually citable |
|
|
234
|
+
| Tables | `.sumtable`, status matrices | numbered with `<caption>` ("Table 2 — …") so prose can reference them |
|
|
235
|
+
| Never | bury the finding in a neutral heading | editorialize a heading, or assert without the measurement behind it |
|
|
236
|
+
|
|
237
|
+
Signals for technical: numbered sections, a version field, "spec"/"protocol"/
|
|
238
|
+
"requirements" in the title, code blocks carrying invocations, tables of
|
|
239
|
+
measurements, a References section. **When the document is something someone
|
|
240
|
+
will implement from, choose technical.** Editorial voice on a spec reads as
|
|
241
|
+
unserious and buries the lookup value — that is the failure mode this table
|
|
242
|
+
exists to prevent.
|
|
243
|
+
|
|
244
|
+
Stamp the choice into the manifest `register` and the footer trail
|
|
245
|
+
(`editorial` / `technical`, with a matching grammar such as `decisive` or
|
|
246
|
+
`specification`).
|
|
247
|
+
|
|
248
|
+
5. **Transform, don't mirror** — in the chosen register. Never reproduce the
|
|
249
|
+
markdown structure verbatim; pick a component per section from the kit by
|
|
250
|
+
what the content *is*:
|
|
251
|
+
- `.ledger` for Q→A pairs · `.tagcard` for named claims · `.claims` for
|
|
252
|
+
numbers/stats · `.panels`+`.verdict-band` for option sets · `.hl` for the
|
|
253
|
+
one thing to land · `.steps` for sequences · `.feat` for capability+status
|
|
254
|
+
rows · `.threads` for decision lists · `.gap` for negatives · `.sumtable`
|
|
255
|
+
with `.dot`s for a status matrix · `.readout` for the honest bottom line
|
|
256
|
+
- technical renders lean on captioned tables, `Decision:` blocks, numbered
|
|
257
|
+
rationale lists, and `.note`/`.note.caution` for limitations and hazards;
|
|
258
|
+
they use `.hl`/`.readout` sparingly and never as a substitute for a heading
|
|
259
|
+
- **transformation in technical register means structure, not voice** — split
|
|
260
|
+
prose into tables, number the rationale, surface the decisions; do not
|
|
261
|
+
rewrite the author's claims into slogans
|
|
262
|
+
- nav links: one per composed section, to its `id` anchor
|
|
263
|
+
6. **Never inline a hex in content** — every theme-sensitive color is a
|
|
264
|
+
`var(--token)`, or the toggle breaks dark mode. The kit already obeys this.
|
|
265
|
+
Verify before opening: every `var(--x)` used must be defined in **both**
|
|
266
|
+
`[data-theme="vellum"]` and `[data-theme="nocturne"]`, or dark mode breaks
|
|
267
|
+
silently on that element.
|
|
268
|
+
7. Write to `/tmp/egregore-artifacts/composed-{slug}.html` and open directly
|
|
269
|
+
(`open <path>`), then report the path + `Renderer: composed (band 5, inline)`.
|
|
270
|
+
|
|
271
|
+
Composition is judgment, not a script — the scaffold is the vocabulary, the
|
|
272
|
+
substance decides the sentence. When `--compose` is absent, use the fast
|
|
273
|
+
template path below.
|
|
274
|
+
|
|
275
|
+
For typed artifacts with a file:
|
|
276
|
+
```bash
|
|
277
|
+
bash bin/view-render.sh <type> <memory/...-or-file>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
For auto-detected (just a file path):
|
|
281
|
+
```bash
|
|
282
|
+
bash bin/view-render.sh document <memory/...-or-file>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
For activity (no file — live surfaces are never cached):
|
|
286
|
+
```bash
|
|
287
|
+
bash bin/view-render.sh activity
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**For an explicitly requested publish:** local render/open is already complete.
|
|
291
|
+
Authorize `SHARE` for the exact staged artifact and show a Publish / Cancel
|
|
292
|
+
checkpoint containing the organization, destination, title, source, and
|
|
293
|
+
whether a stable URL will be replaced. After approval, invoke the Runtime
|
|
294
|
+
publication adapter once. `/view` does not inspect hosting configuration or
|
|
295
|
+
manage publication transport itself. If no Runtime publication adapter is
|
|
296
|
+
available, keep the local artifact and say publishing is unavailable rather
|
|
297
|
+
than falling back to a legacy script. Notification consent remains separate.
|
|
298
|
+
|
|
299
|
+
### 4. Report
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
✓ Artifact opened in browser
|
|
303
|
+
File: /tmp/egregore-artifacts/{type}-{name}-{ts}.html
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Only after an approved SHARE action returns a URL, append:
|
|
307
|
+
```
|
|
308
|
+
◆ https://egregore.xyz/view/{org_slug}/board (stable — refresh for latest)
|
|
309
|
+
```
|
|
310
|
+
Read `org_slug` from `egregore.json`.
|
|
311
|
+
|
|
312
|
+
## Fallback
|
|
313
|
+
|
|
314
|
+
If the local renderer is unavailable, report that the instance renderer needs
|
|
315
|
+
installation or repair. Do not install or fetch software implicitly.
|
|
316
|
+
|
|
317
|
+
## Ambiguity handling
|
|
318
|
+
|
|
319
|
+
If the name matches multiple files, use AskUserQuestion:
|
|
320
|
+
```
|
|
321
|
+
Found multiple matches for "security":
|
|
322
|
+
1. handoffs/2026-03/31-cem-oss-security-audit.md
|
|
323
|
+
2. quests/oss-security-review.md
|
|
324
|
+
Which one?
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
If no matches found, **fall through to synthesis mode** (see below).
|
|
328
|
+
|
|
329
|
+
## Synthesis mode
|
|
330
|
+
|
|
331
|
+
When the input is a prompt or topic rather than a file name — or when file resolution finds nothing — synthesize an artifact from multiple sources.
|
|
332
|
+
|
|
333
|
+
1. **Reuse authorized evidence** — start from `EGREGORE_ORG_CONTEXT_V1`. If it
|
|
334
|
+
is absent or insufficient, run Runtime Observe once through
|
|
335
|
+
`bin/search.sh query`; open only a selected returned canonical source through
|
|
336
|
+
`bin/search.sh open`. Never scan `memory/`. Read repository files only when
|
|
337
|
+
the user explicitly asked to synthesize codebase material.
|
|
338
|
+
2. **Write a temporary markdown file** — synthesize only the authorized
|
|
339
|
+
evidence into `/tmp/egregore-artifacts/synthesized-{slug}.md`. When the
|
|
340
|
+
attached context already contains opened content, stage that content without
|
|
341
|
+
reopening its canonical source.
|
|
342
|
+
3. **Render it** — `bash bin/view-render.sh document /tmp/egregore-artifacts/synthesized-{slug}.md`
|
|
343
|
+
4. **Report** — same as normal: `✓ Artifact opened in browser`
|
|
344
|
+
|
|
345
|
+
This is the default fallback — don't ask the user if they want synthesis. If `/view auth architecture` doesn't match a file, just do the research and render it.
|
|
346
|
+
|
|
347
|
+
**When to synthesize vs. when to say "not found":**
|
|
348
|
+
- Prompt is a topic/question ("auth architecture", "how does onboarding work") → synthesize
|
|
349
|
+
- Prompt looks like a filename that should exist but doesn't ("my-missing-doc") → say not found
|
|
350
|
+
- Use judgment — if the user clearly expects a specific file, don't synthesize a guess
|
|
351
|
+
|
|
352
|
+
## Examples
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
> /view quest artifact-generation
|
|
356
|
+
|
|
357
|
+
✓ Artifact opened in browser
|
|
358
|
+
File: /tmp/egregore-artifacts/quest-artifact-generation.html
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
```
|
|
362
|
+
> show me the security audit visually
|
|
363
|
+
|
|
364
|
+
Resolving "security audit"...
|
|
365
|
+
Found: memory/handoffs/2026-03/31-cem-oss-security-audit.md
|
|
366
|
+
|
|
367
|
+
✓ Artifact opened in browser
|
|
368
|
+
File: /tmp/egregore-artifacts/handoff-31-cem-oss-security-audit.html
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
```
|
|
372
|
+
> /view memory/knowledge/decisions/auth-redirect.md
|
|
373
|
+
|
|
374
|
+
✓ Artifact opened in browser
|
|
375
|
+
File: /tmp/egregore-artifacts/document-auth-redirect.html
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
> /view activity
|
|
380
|
+
|
|
381
|
+
✓ Artifact opened in browser
|
|
382
|
+
File: /tmp/egregore-artifacts/activity-2026-04-06.html
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
> /view auth architecture
|
|
387
|
+
|
|
388
|
+
No file match — synthesizing from codebase...
|
|
389
|
+
Reading: api/main.py, api/auth.py, api/services/storage.py, ...
|
|
390
|
+
|
|
391
|
+
✓ Artifact opened in browser
|
|
392
|
+
File: /tmp/egregore-artifacts/document-auth-architecture.html
|
|
393
|
+
```
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<!--
|
|
3
|
+
EGREGORE COMPOSITION SCAFFOLD — the reusable chrome + component kit for
|
|
4
|
+
band-5 composed artifacts (`/view <doc> --compose`). See COMPOSE.md.
|
|
5
|
+
|
|
6
|
+
How to use: copy this file, then
|
|
7
|
+
1. fill <title>, the manifest `register`/`grammar`, nav brand + links,
|
|
8
|
+
the hero (series / h1 / standfirst / chips), and the footer.
|
|
9
|
+
2. replace the <!-- COMPONENTS: … --> region with composed sections built
|
|
10
|
+
from the component kit below — do NOT mirror the markdown; transform
|
|
11
|
+
the substance into the grammar (statement titles, panels, cards, …).
|
|
12
|
+
3. every theme-sensitive color MUST be a var(--token). Never inline hex
|
|
13
|
+
in content — dark mode breaks. The kit already does this.
|
|
14
|
+
The token blocks (vellum/nocturne) + toggle JS are complete — leave them.
|
|
15
|
+
-->
|
|
16
|
+
<html lang="en" data-theme="vellum" data-theme-pair="meridian" data-theme-mode="auto">
|
|
17
|
+
<head>
|
|
18
|
+
<meta charset="utf-8">
|
|
19
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
20
|
+
<title>__TITLE__ — Egregore</title>
|
|
21
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
22
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
23
|
+
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,400..700&family=Hanken+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
24
|
+
<script type="application/json" id="egregore-design-manifest">{"system":"egregore-design-convention","version":"0.3.0","lineage":"meridian","pair":"meridian","mode":"auto","resolvedTheme":"vellum","target":"browser","register":"__REGISTER__","grammar":"__GRAMMAR__","composed":true}</script>
|
|
25
|
+
<style>
|
|
26
|
+
:root{--serif:"Fraunces",Georgia,serif;--sans:"Hanken Grotesk",system-ui,sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace;--ease:cubic-bezier(.22,.61,.36,1)}
|
|
27
|
+
[data-theme="vellum"]{--paper:#eceef2;--paper-2:#e2e6ec;--card:#f8fafc;--ink:#15212e;--ink-soft:#4d5a68;--ink-faint:#8492a0;--line:#cbd4de;--line-soft:#dde3ea;--prussian:#2c4a6b;--prussian-bright:#3f74ad;--brass:#9a7521;--brass-bright:#c0962f;--teal:#1d7a6e;--rose:#a8493e;--t1:#9a7521;--t1-bg:#f3ead0;--t2:#1d7a6e;--t2-bg:#ddefea;--t3:#a8493e;--t3-bg:#f4ddd7;--contour:#bcc6d2;--shadow:0 1px 2px rgba(21,33,46,.06),0 12px 34px -18px rgba(21,33,46,.34)}
|
|
28
|
+
[data-theme="nocturne"]{--paper:#0e151d;--paper-2:#131c26;--card:#18222e;--ink:#e7ecf2;--ink-soft:#aab6c2;--ink-faint:#76838f;--line:#2a3744;--line-soft:#202b36;--prussian:#5b8cc0;--prussian-bright:#7aa9d8;--brass:#d8b25a;--brass-bright:#e7c878;--teal:#3fb0a0;--rose:#d2796b;--t1:#d8b25a;--t1-bg:#2c2616;--t2:#3fb0a0;--t2-bg:#152b29;--t3:#d2796b;--t3-bg:#2c1c18;--contour:#283543;--shadow:0 1px 2px rgba(0,0,0,.4),0 18px 40px -20px rgba(0,0,0,.7)}
|
|
29
|
+
[data-theme="loam"]{--paper:#f0ece2;--paper-2:#e7e1d3;--card:#faf7f0;--ink:#241d12;--ink-soft:#5c4f3a;--ink-faint:#8f8168;--line:#d3c9b4;--line-soft:#e2dac8;--prussian:#5a6b3a;--brass:#9a6b21;--teal:#3a7a5c;--rose:#a85a3e;--t1:#9a6b21;--t1-bg:#efe2c8;--t2:#3a7a5c;--t2-bg:#dcebe0;--t3:#a85a3e;--t3-bg:#f2ded4;--contour:#c8bca0;--shadow:0 1px 2px rgba(36,29,18,.06),0 12px 34px -18px rgba(36,29,18,.3)}
|
|
30
|
+
|
|
31
|
+
/* ── base ── */
|
|
32
|
+
*{box-sizing:border-box;margin:0;padding:0}
|
|
33
|
+
html{scroll-behavior:smooth}
|
|
34
|
+
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16.5px;line-height:1.62;-webkit-font-smoothing:antialiased;transition:background .3s var(--ease),color .3s var(--ease)}
|
|
35
|
+
a{color:var(--prussian-bright);text-decoration:none}
|
|
36
|
+
.wrap{max-width:1080px;margin:0 auto;padding:0 32px}
|
|
37
|
+
.col{max-width:860px}
|
|
38
|
+
.contours{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.5}
|
|
39
|
+
.contours path{fill:none;stroke:var(--contour);stroke-width:1}
|
|
40
|
+
main{position:relative;z-index:1}
|
|
41
|
+
.rule{border:none;border-top:1px solid var(--line-soft);margin:60px 0 0}
|
|
42
|
+
code{font-family:var(--mono);font-size:.82em;background:var(--paper-2);border:1px solid var(--line-soft);border-radius:5px;padding:1px 6px;color:var(--prussian-bright)}
|
|
43
|
+
p{color:var(--ink-soft)} p b,li b,.lede b{color:var(--ink);font-weight:600}
|
|
44
|
+
|
|
45
|
+
/* ── nav (sticky section rail) ── */
|
|
46
|
+
nav{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:28px;padding:13px 32px;background:color-mix(in srgb,var(--paper) 86%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line-soft)}
|
|
47
|
+
nav .brand{font:500 .68rem/1 var(--mono);letter-spacing:2px;text-transform:uppercase;color:var(--ink-soft);white-space:nowrap}
|
|
48
|
+
nav .brand b{color:var(--prussian-bright);font-weight:600}
|
|
49
|
+
nav .links{display:flex;gap:20px;margin-left:auto;overflow-x:auto;scrollbar-width:none}
|
|
50
|
+
nav .links::-webkit-scrollbar{display:none}
|
|
51
|
+
nav .links a{font:400 .7rem/1 var(--mono);color:var(--ink-soft);white-space:nowrap;padding:4px 0;border-bottom:1px solid transparent}
|
|
52
|
+
nav .links a:hover{color:var(--ink);border-bottom-color:var(--t1)}
|
|
53
|
+
.toggle{flex:0 0 auto;font:500 .66rem/1 var(--mono);letter-spacing:.5px;color:var(--ink-soft);background:var(--card);border:1px solid var(--line);border-radius:20px;padding:6px 12px;cursor:pointer}
|
|
54
|
+
.toggle:hover{color:var(--ink);border-color:var(--ink-faint)}
|
|
55
|
+
|
|
56
|
+
/* ── hero ── */
|
|
57
|
+
header.hero{padding:92px 0 60px}
|
|
58
|
+
.series{display:flex;align-items:center;gap:14px;font:500 .7rem/1 var(--mono);letter-spacing:2.5px;text-transform:uppercase;color:var(--t1);margin-bottom:32px}
|
|
59
|
+
.series::before{content:"";width:44px;height:1px;background:var(--t1)}
|
|
60
|
+
h1{font-family:var(--serif);font-weight:420;font-size:clamp(2.6rem,5.4vw,4rem);line-height:1.06;letter-spacing:-.02em;max-width:19ch}
|
|
61
|
+
h1 em{font-style:italic;font-weight:430;color:var(--prussian-bright)}
|
|
62
|
+
.standfirst{font-family:var(--serif);font-style:italic;font-size:1.3rem;line-height:1.44;color:var(--ink-soft);max-width:56ch;margin:26px 0 28px}
|
|
63
|
+
|
|
64
|
+
/* ── section frame ── */
|
|
65
|
+
section{padding:72px 0 6px}
|
|
66
|
+
.seclabel{display:flex;align-items:center;gap:10px;font:500 .72rem/1 var(--mono);letter-spacing:2.5px;text-transform:uppercase;color:var(--t1);margin-bottom:16px}
|
|
67
|
+
.seclabel .n{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:1px solid var(--t1);border-radius:50%;font-size:.62rem}
|
|
68
|
+
h2{font-family:var(--serif);font-weight:430;font-size:clamp(1.9rem,3.4vw,2.6rem);line-height:1.12;letter-spacing:-.015em;max-width:24ch;margin-bottom:12px}
|
|
69
|
+
.lede{font-size:1.05rem;color:var(--ink-soft);max-width:62ch;margin-bottom:24px}
|
|
70
|
+
|
|
71
|
+
/* ── chips / pills / badges ── */
|
|
72
|
+
.chips{display:flex;flex-wrap:wrap;gap:9px}
|
|
73
|
+
.chip{font:500 .68rem/1 var(--mono);letter-spacing:.4px;padding:7px 13px;border-radius:20px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);white-space:nowrap}
|
|
74
|
+
.chip.ok{border-color:var(--t2);color:var(--t2)} .chip.ok::before{content:"● ";font-size:.6rem}
|
|
75
|
+
.chip.brass{border-color:var(--t1);color:var(--t1)} .chip.brass::before{content:"◇ ";font-size:.66rem}
|
|
76
|
+
.chip.warn{border-color:var(--t3);color:var(--t3)}
|
|
77
|
+
.bd{display:inline-flex;align-items:center;gap:5px;font:600 .64rem/1 var(--mono);letter-spacing:.4px;text-transform:uppercase;padding:3px 8px;border-radius:5px;white-space:nowrap}
|
|
78
|
+
.bd.ok{background:var(--t2-bg);color:var(--t2)} .bd.half{background:var(--t1-bg);color:var(--t1)} .bd.no{background:var(--t3-bg);color:var(--t3)} .bd.neu{background:var(--paper-2);color:var(--ink-faint)}
|
|
79
|
+
|
|
80
|
+
/* ── claim / stat cards ── */
|
|
81
|
+
.claims{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:26px 0 8px}
|
|
82
|
+
.claims.four{grid-template-columns:repeat(4,1fr)} .claims.two{grid-template-columns:1fr 1fr}
|
|
83
|
+
@media(max-width:760px){.claims,.claims.four,.claims.two{grid-template-columns:1fr 1fr}}
|
|
84
|
+
.claim{background:var(--card);border:1px solid var(--line-soft);border-radius:12px;padding:20px 22px;box-shadow:var(--shadow)}
|
|
85
|
+
.claim .v{font-family:var(--serif);font-size:1.55rem;line-height:1.1;color:var(--t1)}
|
|
86
|
+
.claim.teal .v{color:var(--t2)} .claim.rose .v{color:var(--t3)}
|
|
87
|
+
.claim .l{font-size:.84rem;color:var(--ink-soft);margin-top:8px;line-height:1.5}
|
|
88
|
+
|
|
89
|
+
/* ── labeled tag card ── */
|
|
90
|
+
.tagcard{background:var(--card);border:1px solid var(--line-soft);border-radius:14px;padding:22px 26px;margin:14px 0;box-shadow:var(--shadow)}
|
|
91
|
+
.tagcard .tag{display:inline-block;font:600 .62rem/1 var(--mono);letter-spacing:1.5px;text-transform:uppercase;color:#fff;border-radius:6px;padding:5px 9px;margin-right:12px;vertical-align:2px;background:var(--prussian)}
|
|
92
|
+
.tagcard .tag.teal{background:var(--teal)} .tagcard .tag.rose{background:var(--rose)} .tagcard .tag.brass{background:var(--brass)}
|
|
93
|
+
.tagcard h3{display:inline;font-family:var(--serif);font-weight:500;font-size:1.16rem}
|
|
94
|
+
.tagcard p{margin-top:12px;font-size:.95rem}
|
|
95
|
+
.tagcard .verdict{margin-top:12px;font:600 .74rem/1.5 var(--mono);letter-spacing:.3px}
|
|
96
|
+
.tagcard .verdict.ok{color:var(--t2)} .tagcard .verdict.no{color:var(--t3)}
|
|
97
|
+
|
|
98
|
+
/* ── comparison panels (2–3 up) ── */
|
|
99
|
+
.panels{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:26px 0 10px}
|
|
100
|
+
.panels.three{grid-template-columns:repeat(3,1fr)}
|
|
101
|
+
@media(max-width:760px){.panels,.panels.three{grid-template-columns:1fr}}
|
|
102
|
+
.panel{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--card);box-shadow:var(--shadow);display:flex;flex-direction:column}
|
|
103
|
+
.panel .ph{font:600 .7rem/1 var(--mono);letter-spacing:1.5px;text-transform:uppercase;color:#fff;padding:13px 18px;background:var(--prussian)}
|
|
104
|
+
.panel.b .ph{background:var(--teal)} .panel.c .ph{background:var(--ink-faint)} .panel.warn .ph{background:var(--rose)}
|
|
105
|
+
.panel .pb{padding:16px 20px;font-size:.9rem;color:var(--ink-soft);flex:1}
|
|
106
|
+
.panel .pb b{color:var(--ink)}
|
|
107
|
+
.panel .price{font-family:var(--serif);font-size:1.3rem;color:var(--t1);margin:2px 0 10px}
|
|
108
|
+
.panel ul{list-style:none;margin-top:8px} .panel li{padding:5px 0 5px 18px;position:relative;line-height:1.5}
|
|
109
|
+
.panel li::before{content:"";position:absolute;left:2px;top:12px;width:5px;height:5px;border-radius:50%;background:var(--t1)}
|
|
110
|
+
.panel .pr{display:grid;grid-template-columns:110px 1fr;gap:12px;padding:11px 0;border-bottom:1px solid var(--line-soft)}
|
|
111
|
+
.panel .pr:last-child{border-bottom:none} .panel .pr .k{font:500 .68rem/1.4 var(--mono);color:var(--ink-faint);text-transform:uppercase;letter-spacing:.4px}
|
|
112
|
+
.panel .pf{padding:12px 20px;border-top:1px solid var(--line-soft);font:500 .68rem/1.5 var(--mono);color:var(--ink-faint)}
|
|
113
|
+
.verdict-band{background:var(--t2-bg);border:1px solid var(--t2);border-radius:12px;padding:16px 22px;font:500 .82rem/1.7 var(--mono);color:var(--ink)}
|
|
114
|
+
.verdict-band b{color:var(--t2)}
|
|
115
|
+
|
|
116
|
+
/* ── highlight callout ── */
|
|
117
|
+
.hl{background:var(--t2-bg);border:1px solid var(--t2);border-radius:14px;padding:22px 26px;margin:18px 0}
|
|
118
|
+
.hl.brass{background:var(--t1-bg);border-color:var(--t1)} .hl.rose{background:var(--t3-bg);border-color:var(--t3)}
|
|
119
|
+
.hl .k{font:600 .66rem/1 var(--mono);letter-spacing:1.5px;text-transform:uppercase;color:var(--t2)}
|
|
120
|
+
.hl.brass .k{color:var(--t1)} .hl.rose .k{color:var(--t3)}
|
|
121
|
+
.hl h3{font-family:var(--serif);font-weight:500;font-size:1.3rem;margin:8px 0 10px}
|
|
122
|
+
.hl p{font-size:.96rem} .hl .num{font-family:var(--serif);font-style:italic;color:var(--ink)}
|
|
123
|
+
|
|
124
|
+
/* ── Q/A ledger ── */
|
|
125
|
+
.ledger{margin:24px 0;border-top:1px solid var(--line)}
|
|
126
|
+
.ledger .row{display:grid;grid-template-columns:230px 1fr;gap:24px;padding:16px 4px;border-bottom:1px solid var(--line-soft)}
|
|
127
|
+
@media(max-width:680px){.ledger .row{grid-template-columns:1fr}}
|
|
128
|
+
.ledger .q{font:500 .78rem/1.5 var(--mono);color:var(--ink-faint);padding-top:3px}
|
|
129
|
+
.ledger .a{font-size:.95rem;color:var(--ink-soft)} .ledger .a b{color:var(--ink)}
|
|
130
|
+
|
|
131
|
+
/* ── numbered steps ── */
|
|
132
|
+
.steps{margin:24px 0;counter-reset:st}
|
|
133
|
+
.step{display:grid;grid-template-columns:40px 1fr;gap:16px;padding:14px 0;border-bottom:1px solid var(--line-soft)}
|
|
134
|
+
.step:last-child{border-bottom:none}
|
|
135
|
+
.step .b{counter-increment:st;font-family:var(--serif);font-size:1.25rem;color:var(--t1)} .step .b::before{content:counter(st,decimal-leading-zero)}
|
|
136
|
+
.step h4{font-family:var(--serif);font-weight:500;font-size:1.05rem;margin-bottom:3px} .step h4 .min{font:500 .64rem/1 var(--mono);color:var(--ink-faint);letter-spacing:.5px;margin-left:8px}
|
|
137
|
+
.step p{font-size:.9rem}
|
|
138
|
+
|
|
139
|
+
/* ── feature rows w/ trailing badges ── */
|
|
140
|
+
.feat{display:grid;grid-template-columns:1fr auto;gap:14px 20px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--line-soft)}
|
|
141
|
+
.feat:last-child{border-bottom:none} .feat .fx{font-size:.98rem;color:var(--ink-soft)} .feat .fx b{color:var(--ink);font-weight:600}
|
|
142
|
+
.feat .fb{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
|
|
143
|
+
|
|
144
|
+
/* ── checkbox thread list (decisions) ── */
|
|
145
|
+
.threads{list-style:none;margin:24px 0}
|
|
146
|
+
.threads li{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--line-soft);font-size:.98rem;color:var(--ink-soft);align-items:baseline}
|
|
147
|
+
.threads li::before{content:"";flex:0 0 auto;width:12px;height:12px;border:1.5px solid var(--t1);border-radius:3px;transform:translateY(1px)}
|
|
148
|
+
.threads b{color:var(--ink)}
|
|
149
|
+
|
|
150
|
+
/* ── gap / negative callout ── */
|
|
151
|
+
.gap{background:var(--t3-bg);border:1px solid var(--t3);border-radius:14px;padding:22px 26px;margin:22px 0}
|
|
152
|
+
.gap h3{font-family:var(--serif);font-weight:500;font-size:1.15rem;color:var(--t3);margin-bottom:12px}
|
|
153
|
+
.gap ul{list-style:none} .gap li{padding:5px 0 5px 20px;position:relative;font-size:.94rem;color:var(--ink-soft)}
|
|
154
|
+
.gap li::before{content:"×";position:absolute;left:2px;color:var(--t3);font-weight:600} .gap li b{color:var(--ink)}
|
|
155
|
+
|
|
156
|
+
/* ── status / summary table ── */
|
|
157
|
+
.sumtable{width:100%;border-collapse:collapse;margin:24px 0;font-size:.9rem}
|
|
158
|
+
.sumtable th{text-align:left;font:600 .64rem/1 var(--mono);letter-spacing:.8px;text-transform:uppercase;color:var(--ink-faint);padding:0 12px 12px;border-bottom:1px solid var(--line)}
|
|
159
|
+
.sumtable th.c,.sumtable td.c{text-align:center}
|
|
160
|
+
.sumtable td{padding:11px 12px;border-bottom:1px solid var(--line-soft);color:var(--ink-soft);vertical-align:middle}
|
|
161
|
+
.sumtable tr td:first-child{color:var(--ink);font-weight:500}
|
|
162
|
+
.sumtable .tier{font:500 .64rem/1 var(--mono);text-transform:uppercase;letter-spacing:.4px;color:var(--ink-faint)}
|
|
163
|
+
.dot{display:inline-block;width:18px;height:18px;line-height:18px;border-radius:50%;font-size:.72rem;font-weight:700}
|
|
164
|
+
.dot.ok{background:var(--t2-bg);color:var(--t2)} .dot.half{background:var(--t1-bg);color:var(--t1)} .dot.no{background:var(--t3-bg);color:var(--t3)} .dot.neu{background:var(--paper-2);color:var(--ink-faint)}
|
|
165
|
+
|
|
166
|
+
/* ── accent-left readout ── */
|
|
167
|
+
.readout{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--t1);border-radius:4px;padding:20px 24px;margin:28px 0;font-size:1rem;color:var(--ink-soft)}
|
|
168
|
+
.readout b{color:var(--ink)}
|
|
169
|
+
|
|
170
|
+
/* ── footer ── */
|
|
171
|
+
footer{padding:64px 0 90px;font:400 .74rem/1.8 var(--mono);color:var(--ink-faint)}
|
|
172
|
+
footer .tags{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
|
|
173
|
+
footer .tg{border:1px solid var(--line-soft);border-radius:6px;padding:3px 10px;background:var(--card)}
|
|
174
|
+
</style>
|
|
175
|
+
</head>
|
|
176
|
+
<body>
|
|
177
|
+
<svg class="contours" width="100%" height="100%" preserveAspectRatio="none" viewBox="0 0 1400 900"><path d="M-50,160 C300,90 700,240 1450,130"/><path d="M-50,440 C400,360 900,540 1450,420"/><path d="M-50,720 C350,660 800,820 1450,710"/></svg>
|
|
178
|
+
<main>
|
|
179
|
+
<nav>
|
|
180
|
+
<span class="brand">EGREGORE · <b>__BRAND__</b></span>
|
|
181
|
+
<div class="links"><!-- NAV: one <a href="#anchor">Short label</a> per section --></div>
|
|
182
|
+
<button class="toggle" onclick="__t()">◐ <span id="tl">nocturne</span></button>
|
|
183
|
+
</nav>
|
|
184
|
+
|
|
185
|
+
<div class="wrap col">
|
|
186
|
+
|
|
187
|
+
<header class="hero">
|
|
188
|
+
<div class="series">__SERIES_KICKER__</div>
|
|
189
|
+
<h1>__LEAD__. <em>__ACCENT_PHRASE__</em></h1>
|
|
190
|
+
<p class="standfirst">__STANDFIRST__</p>
|
|
191
|
+
<div class="chips"><!-- CHIPS: from status/meta --></div>
|
|
192
|
+
</header>
|
|
193
|
+
|
|
194
|
+
<!-- COMPONENTS: compose sections here. Each section:
|
|
195
|
+
<hr class="rule"><section id="anchor">
|
|
196
|
+
<div class="seclabel"><span class="n">01</span> LABEL</div>
|
|
197
|
+
<h2>Statement title — the finding, not the raw heading.</h2>
|
|
198
|
+
… pick from the kit: .ledger .tagcard .claims .panels+.verdict-band
|
|
199
|
+
.hl .steps .feat .threads .gap .sumtable .readout …
|
|
200
|
+
</section>
|
|
201
|
+
-->
|
|
202
|
+
|
|
203
|
+
<footer>
|
|
204
|
+
__FOOTER_LINE__
|
|
205
|
+
<div class="tags"><span class="tg">__KIND__</span><span class="tg">__AUTHOR__</span><span class="tg">ugi · __TRAIL__</span><span class="tg">composed</span></div>
|
|
206
|
+
</footer>
|
|
207
|
+
|
|
208
|
+
</div>
|
|
209
|
+
</main>
|
|
210
|
+
<script>
|
|
211
|
+
(function(){
|
|
212
|
+
var saved=localStorage.getItem('eg-theme-mode');
|
|
213
|
+
var prefersDark=window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
214
|
+
var t=saved==='dark'||(saved!=='light'&&prefersDark)?'nocturne':'vellum';
|
|
215
|
+
apply(t);
|
|
216
|
+
window.__t=function(){apply(document.documentElement.dataset.theme==='vellum'?'nocturne':'vellum',true)};
|
|
217
|
+
function apply(theme,persist){document.documentElement.dataset.theme=theme;var el=document.getElementById('tl');if(el)el.textContent=theme==='vellum'?'nocturne':'vellum';if(persist)localStorage.setItem('eg-theme-mode',theme==='nocturne'?'dark':'light')}
|
|
218
|
+
})();
|
|
219
|
+
</script>
|
|
220
|
+
</body>
|
|
221
|
+
</html>
|