rosetta-archaeology plugin¶
Four-phase Project Archaeology pipeline. Takes an engagement discovery
dossier and the Project Archaeology Manual v1.3 and produces a Digital
Twin for that engagement — leaf KnowledgeDomain, three-layer Context
Artifacts, DecisionTraces with the full v1.3 schema, an eleven-dimension
readiness verdict, the delivery spine, a Site Package, and
PromotionCandidate analysis — and applies it to the graph as twin.json
through rosetta-app-server's twin:apply (ADR-PL-024).
- Latest bundle:
rosetta-archaeology-0.13.3.zip - Slash commands:
/rosetta-archaeology:run-all(recommended for end-to-end processing),/rosetta-archaeology:survey,/rosetta-archaeology:excavate,/rosetta-archaeology:classify,/rosetta-archaeology:preserve(per-phase, fallback for incremental re-runs),/rosetta-archaeology:inheritance-tree-render(Phase 1 render skill — emits the inheritance-tree artifact;make inheritance-tree-render ENGAGEMENT=<key>is the equivalent in-repo invocation) - Skills:
digital-twin-archaeology,inheritance-tree-render(first Option-B local render skill — canonical content inventory + inheritance-tree renderer) - License: Proprietary — © 2026 Keenan Vision LLC (see the repo LICENSE)
For the full method spec, unzip the bundle and read its inner
README.md and
skills/digital-twin-archaeology/SKILL.md. Source-of-truth methodology
is the Project Archaeology Manual v1.3 — the plugin requires it as an
upload on every phase.
What's new in v0.13.0 — the switch: twin.json through twin:apply is the delivery¶
The DT-RX-036 switch (platform E9-S2-WP1; ADR-PL-024 in effect) made the
production graph the system of record for content and engagements, and
db/seeds/ and db/engagements/ left main (the frozen baseline tag
v0.27.0 keeps them). The --target=ingestion shape is now the only
shape: Phase 4's twin.json carries the whole run, and Phase 4 applies
it through twin:apply (rosetta_apply_engagement_twin, REST fallback)
after the operator confirms the target, creating the engagement first
if it does not exist. --publish applies in the run; without it Phase 4
asks. The bundle's db/engagements/<key>/ Cypher is the review stack
twin.json is derived alongside: no phase writes it into a checkout,
and nothing loads or commits it. Canonical content and existing
engagements are read from the live graph (the rosetta MCP read tools;
offline, a local graph restored from a content snapshot), and the
Inheritance Tree's §1 is now the Canonical Content Inventory.
--target=ingestion is a no-op for one release; --target=seeds is a
hard fail that points at v0.27.0.
What's new in v0.12.0 — fixed phase timestamps and the whole run in the target's twin.json¶
Every run now writes one fixed RFC 3339 timestamp per phase emit, recorded in
MANIFEST.md, in place of datetime() on the leaf's createdDate, the Context
Artifact and DecisionTrace clocks, ProvenanceEntry capturedDate and the
promotedDate Phase 4 now names; the leaf MERGE is create-only (platform
E9-S1-WP17; app-server twin-apply-archaeology-lane.md Q-I-1). Under
--target=ingestion, Phase 4's twin.json carries the whole run: the leaf,
every property (uid, projectId and traceKey included), each
DecisionTrace's promotion transition, the REFERENCES {via}, CA DEPENDS_ON,
CA → leaf BELONGS_TO and DT GOVERNS edges and engagement.lifecycleStage,
for an app-server that carries the archaeology lane (api 1.15.0). The default
twin.json is unchanged.
What's new in v0.11.0 — ingestion target and a publishable default twin.json¶
Every run's Phase 4 twin.json now leaves PromotionCandidates out (twin:apply
refuses the label, so one would refuse the whole document), and Phase 3 writes
the canvas and readiness uids as the lowercased merge key, as twin:apply
does, so --publish no longer fails on them (platform E9-S1-WP14;
docs/decision-traces/e9-s1-wp2-plugin-ingestion.md Q-B-1).
--target=ingestion (off by default; manifest E9-S1-WP2) keeps the
db/engagements/<key>/ Cypher and makes Phase 4's twin.json the run's
ingestion payload on the twin:apply lane, and
MANIFEST.md names every output the lane cannot carry yet
(skills/digital-twin-archaeology/references/twin-document.md § "Ingestion
target"). Before the DT-RX-036 switch the target submits only to a local
app-server named by --ingest-url, after the operator confirms the graph
target, and a run may not combine it with --publish; --publish alone keeps
its ADR-PA-010 meaning. Without the flag a run is the 0.10.9 run apart from the
two default-path changes above and the metamodel path (v1.17.0).
What's new in v0.9.1 — rebound client-edge emit + existing-client check¶
v0.9.1 (E3-S4-WP21; ratified in
docs/decision-traces/client-engagement-linkage-remediation.md part (f))
fixes the §9.1 Client + Engagement block's edge emit and adds a Phase-1
existing-client check:
- Rebound edge emit. The §9.1 template previously emitted a bare
MERGE (cl)-[:HAS_ENGAGEMENT]->(eng);as its own statement, relying oncl/engbindings carried over from prior semicolon-terminated statements. cypher-shell executes statements independently, so the MERGE actually created an anonymous, label-less node pair with the edge between them — the exact defect found on all 8 prod engagements. The edge emit now explicitly re-MATCHes both endpoints in its own statement (MATCH (cl:Client ...) MATCH (eng:Engagement ...) MERGE (cl)-[:HAS_ENGAGEMENT]->(eng) SET eng.clientUid = cl.uid), mirroring the already-correctBELONGS_TO_DOMAINblock. - Existing-client check (create-or-link). Before minting any
MERGE (cl:Client ...)block, Phase 1 now inventories existing:Clientnodes from the repo snapshot'sdb/engagements/*/00-domain.cypherplus the discovery dossier, presents the candidates to the operator, and records an explicit link-vs-create decision insurvey-brief.md. Minting a newCL-<KEY>without that recorded decision is a Phase-1 gate failure.
What's new in v0.6.0 — spine + readiness emit¶
v0.6.0 implements ADR-PL-022 producer path 2 (ratified in
docs/decision-traces/archaeology-delivery-spine-readiness-emit.md,
2026-06-10): the pipeline now emits the delivery spine and the
readiness/d360 dimensions as engagement Cypher, closing the
production empty-leg classes where the Engagement Canvas scorecard
and the engagement-scoped spec-manifest compile read nothing unless
the operator hand-compiled after the run.
- Phase 3 emits
20-d360-dimensions.cypher(the ADR-PL-021 d360 advisory labels, schema 38–41 closed enums) and21-engagement-readiness.cypher(the eleven-dimension verdict compiled toEngagementReadiness). The markdown verdict (classification-readiness-verdict.md) stays in the bundle as the human review surface; the Cypher is the canonical projection (C-2). - Phase 4 emits
30-delivery-spine.cypher— Wave → Epic → Sprint → Work Packet with the four locked ADR-PL-022 labels, Building-Block Epics 1:1 from the Context Artifacts (REALIZES_ARTIFACTby displayId), the terminal CA-lessPOV CompleteEpic, gate-aligned Sprints, and acyclicDEPENDS_ON. Every node'spurpose:is authored at emit review — the runtime never generates purpose boilerplate; a missing purpose halts the emit (stop-and-ask, not filler; INV-D28). - Both emits are canonical (no WARNING fallback) and load behind the
INV-D20..D33 invariant gates.
delivery-overlay.yamlremains the seed-input bridge for pre-existing overlays during the ADR-PL-022 one-cycle deprecation window. - v0.6.0 also lands the ratified CA five-field supersession
(
docs/decision-traces/archaeology-ca-five-field-supersession.md): every emitted ContextArtifact carries the five-field identity block plusuidper ADR-PL-020 / metamodel v1.9.0 §5.1.
Sibling to rosetta-research¶
The two plugins share a target repo but operate on different parts of the metamodel:
- rosetta-research authors canonical content
(
projectId='SYSTEM') and submits it to the app-server's content:ingest API. - rosetta-archaeology authors engagement-scoped instances
(
projectId='<ENGAGEMENT-KEY>') and applies them through twin:apply.
Both can be installed simultaneously.
Installation¶
Auto-loaded inside this repo (recommended for repo work)¶
When you run claude from a rosetta-platform checkout, this plugin
is auto-discovered via
.claude/settings.json. The
/rosetta-archaeology:* slash commands become available automatically
(/rosetta-archaeology:run-all is the recommended entry point);
first-run users get a "trust this folder?" prompt, subsequent runs
are silent. No install step beyond the trust prompt.
This is the right path for plugin authoring and repo-internal use. Cowork upload (next section) is the right path for production archaeology sessions against an engagement dossier.
Claude (web / Cowork)¶
- Open a Cowork chat.
- Customize → Plugins → + → upload
rosetta-archaeology-0.13.3.zip. - Confirm
/rosetta-archaeology:run-alland/rosetta-archaeology:surveyappear in the slash-command palette.
Claude Code (CLI)¶
The bundle uses the standard plugin layout
(.claude-plugin/plugin.json, commands/, skills/), so it can also
be loaded as a local Claude Code plugin:
mkdir -p ~/.claude/plugins
unzip -o util/plugins/rosetta-archaeology/rosetta-archaeology-0.13.3.zip \
-d ~/.claude/plugins/
Restart your Claude Code session and the /rosetta-archaeology:* commands
become available. Refer to the Claude Code plugin documentation for
marketplace-style registration if you prefer a managed install path.
The rosetta MCP connector (or REST access to the app-server) is needed:
the phases read canonical content and existing engagements from the
live graph through it, and Phase 4 applies twin.json through it.
Inputs every session expects¶
Drop these in the chat's uploads area before invoking the slash command:
| Invocation | Required uploads |
|---|---|
end-to-end — /rosetta-archaeology:run-all |
repo zip + Manual + dossier (no per-phase bundles) |
1 — /rosetta-archaeology:survey |
repo zip + Manual + dossier |
2 — /rosetta-archaeology:excavate |
repo zip + Manual + dossier + rosetta-archaeology-<engagement>-phase1-*.zip |
3 — /rosetta-archaeology:classify |
repo zip + Manual + dossier + Phase 2 bundle |
4 — /rosetta-archaeology:preserve |
repo zip + Manual + dossier + Phase 3 bundle |
/rosetta-archaeology:run-all is the recommended invocation for
first-pass engagement processing. State accumulates through the
Cowork conversation context across all four phases; only the final
cumulative bundle is emitted. Halts at the first failing phase gate
and emits a partial bundle reflecting work completed through the
halt point.
Use the per-phase commands as a fallback for incremental re-runs
when a run-all invocation surfaces an issue at a specific phase —
upload the most recent per-phase bundle along with the standard
inputs and re-run only the requested phase.
Where:
- Repo zip is produced from a clean checkout:
cd ~/path/to/rosetta-platform git archive --format=zip HEAD > /tmp/rp.zip - Manual is
Project-Archaeology-Manual-v1.3.docx(or a zip of the manual). Required every phase. - Dossier is the engagement's discovery materials, either as
*dossier*.zipor as the docs uploaded individually. Required every phase. - Prior-phase bundle is the most recent zip the plugin emitted. Required for Phases 2–4.
Each phase emits ONE cumulative zip; Phase 4's bundle contains everything from Phases 1–3 plus the partner-certification request and validation checklist. Re-upload the latest bundle as input to the next phase.
Phase 1 (Survey) ships a skill-rendered
research/inheritance-tree.md artifact: a canonical content inventory
(read from the live graph) plus inheritance-tree for the engagement's
leaf KnowledgeDomain, with a
deterministic §3 inheritance-candidate inventory that replaces the
former ad-hoc grep survey step. The same artifact is produced
in-repo by /rosetta-archaeology:inheritance-tree-render <key> or
make inheritance-tree-render ENGAGEMENT=<key>, both of which
dispatch to the inheritance-tree-render skill.
Delivering the twin¶
Phase 4 emits a VALIDATION-CHECKLIST.md, a
PARTNER-CERTIFICATION-REQUEST.md and twin.json, and applies
twin.json through twin:apply once the operator confirms the target
(the app-server and the engagement uid). The bundle is the run's record:
never unzip it into a checkout, and never commit or load its
db/engagements/<engagementKey>/ Cypher (the review stack). MANIFEST.md
records whether the twin was applied (twin_applied) and every
failures[] entry; the bundle's VALIDATION-CHECKLIST.md has the
checks before and after the apply (the static leaf check, the twin
read-back, the scheduled read-only production gates).
After the apply, send PARTNER-CERTIFICATION-REQUEST.md to a
senior partner architect for Gate 3 certification. After
certification, the engagement team submits PromotionCandidates to
Gate 4 governance review per
ADR-PL-014 and
ADR-PL-015. Both
gates are out of scope for this plugin.
Methodological invariants (from Manual v1.3)¶
The plugin enforces these and will refuse to advance if they fail:
- Trajectory and DecisionTrace are distinct (Ch. 4) — trajectories are raw, DecisionTraces are governed.
- Existing configuration is evidence, not truth (Ch. 5).
- Negative criteria are mandatory on every DecisionTrace (Ch. 7) — empty list is a hard fail.
alternativesConsidered≥ 2 entries (Ch. 7).- Readiness, not goodness — Phase 3's eleven-dimension verdict is scoped to a specific intended action (Ch. 6).
ADR-PA-008 compliance¶
ADR-PA-008 establishes that plugin runtime
outputs (manifests, validation checklists, eval invocation scripts,
run logs, human-readable working notes) land at
outputs/plugins/rosetta-archaeology/<engagementKey>/ in the repo
root, gitignored, never auto-promoted.
Compliance landed in v0.2.0 and holds for all later releases.
The bundle's internal layout places non-canonical artifacts under
outputs/plugins/rosetta-archaeology/<engagementKey>/:
MANIFEST.md(cumulative across phases)VALIDATION-CHECKLIST.md(Phase 4)EVAL-INVOCATION-CHECKLIST.md(Phase 4)research/{survey-brief,excavation-inventory,classification-readiness-verdict,preservation-promotion-analysis}.mdresearch/inheritance-tree.md— Phase 1 skill-rendered repo/seed inventory + inheritance-tree artifact (six sections, per-sectionrendered:flags, the §3 inheritance-candidate inventory, and the §Open Items «TBD-N» inventory); emitted by theinheritance-tree-renderskill, sibling ofsurvey-brief.md
Inside the bundle, the review stack and the Site Package keep their repo-shaped paths; neither is committed to the repo since the switch (ADR-PL-024):
- the engagement Cypher review stack at
db/engagements/<engagementKey>/ - Site Package (including
partner-validation/PARTNER-CERTIFICATION-REQUEST.md, which is part of the Manual Chapter 15 Site Package layout) atsite-packages/<partnerKey>/<engagementKey>/
Run-identifier per ADR-PA-008 §Decision item 1 is <engagementKey>,
shared by all four phases — the cumulative bundle accumulates research
notes and replaces the manifest in place.
Constitutional alignment¶
The plugin operates within the rosetta-platform invariants
(CLAUDE.md), as ADR-PL-024 amends them at the switch: the graph is the
system of record for content, C-4 (Make is the user surface), C-5
(five-field identity), C-6 (ProvenanceEvent on every mutation), C-7
(producer-only — it imports nothing from rosetta-app-server and calls
its API only at runtime).
It produces; you confirm. The plugin never invokes make,
cypher-shell, mysql, docker, or any command on your machine,
writes the graph only through twin:apply and the engagement create after
you confirm the target, and will not advance through phases without the
prior bundle uploaded.
Reporting issues¶
File against this repo with tag [archaeology-plugin]. Include:
- the bundle filename (carries the version),
- which phase you were running,
- the engagement key,
- the upload manifest the plugin echoed in its first response,
- any failing assertion text from the Phase 4
VALIDATION-CHECKLIST.md.
This page as Markdown — for pasting into Claude or another assistant · llms.txt