Source importers: lstat before open so FIFOs no longer hang the directory walk; replace the quadratic Rust macro regex with a linear scan. Three-way sync: report page add/add and delete-vs-modify as conflicts instead of silently overwriting or resurrecting; canonical comparison so key order is not a change; the sync action withholds output and fails on conflicts unless --force. Story publishing escapes <, >, & and U+2028/9 inside the embedded JSON. Views: drop parentId of unselected containers, re-layout instead of manual geometry, validate before serialising; flatten() merges identical nodes repeated across pages so C4 output works with every analysis action. Dark theme edge labels get a background; tube-map corridors sit above the stations; C4 containers keep the swimlane style and orphan relationships land on the matching page; router keeps container header bands as obstacles; sequence self-messages loop on one side. Docs: SKILL.md lists all 23 CLI actions and how each capability family is invoked, task wrappers for query/test/what-if/doctor, capability tables and --page scope corrected, maintenance snippet uses the real synchronous action signature, duplicated rule bullets moved to the rule references, coverage matrix wording made verifiable. Co-Authored-By: Claude Code <noreply@anthropic.com>
17 KiB
Agents365 capability coverage
Evidence basis: internal comparison against a 42-entry peer-tool feature list (tool names as listed in the matrix; no version or commit was recorded, so the comparison is not independently verifiable). Peer source and bundled assets were not copied. The "Native evidence" column points to files in this repository and is verifiable; the "Remaining gap" column reflects the internal feature list only.
Reading the classifications
- Implemented — full mapped peer acceptance contract is available.
- Partial — useful native behavior is implemented, but some peer options, adapters, or Command-Line Interface (CLI) exposure remain.
- Optional deferred — environment-heavy capability remains outside the mandatory offline core.
- Rejected — capability was deliberately excluded from this phase.
These are strict peer-parity labels. A partial row can still contain substantial production-ready native functionality.
Aggregate
| Classification | Count |
|---|---|
| Implemented | 0 |
| Partial | 29 |
| Optional deferred | 11 |
| Rejected | 2 |
| Total | 42 |
Capability matrix
| Peer tool | Classification | Native evidence | Remaining gap |
|---|---|---|---|
aiicons.py |
optional-deferred | scripts/src/services/shape-catalog/shape-catalog.tsscripts/src/services/shape-catalog/shape-catalog.test.ts |
Only an eight-entry generic offline shape catalog exists; there is no AI/LLM brand manifest, variant selection, embedding adapter, URL allowlist, or CLI action. |
autolayout.py |
partial | scripts/src/services/layout/layout-engine.tsscripts/src/services/layout/layout-engine.test.tsscripts/src/actions/build/action.ts |
Deterministic native layouts exist, but there is no peer-compatible graph-JSON adapter, group-tree contract, monochrome mode, or objective TB/LR tuning action. |
buildup.py |
partial | scripts/src/services/profiles/buildup.tsscripts/src/services/profiles/buildup.test.ts |
The service computes deterministic cumulative IR frames, but it does not parse Draw.io through a buildup action, render PNG frames, publish the player HTML, encode GIF, or expose CLI availability semantics. |
c4.py |
partial | scripts/src/services/profiles/c4.tsscripts/src/services/profiles/c4.test.tsscripts/src/services/profiles/index.ts |
The service validates hierarchy and creates linked C4 pages, but no C4 CLI/action or input-file adapter is registered, and canonical peer style/direction options are not fully exposed. |
ciimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
The service imports a bounded generic jobs/needs object, but lacks CLI registration, repository workflow discovery, triggers, runners, matrices, reusable workflows, GitLab stages, and inferred stage dependencies. |
composeimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
Services, depends_on, and simple named volumes are covered through a service API; links, volumes_from, long-form mounts, network grouping, conventional-file discovery, and CLI exposure remain absent. |
compress.py |
partial | scripts/src/services/profiles/compression.tsscripts/src/services/profiles/compression.test.ts |
A deterministic BFS clustering service emits summary and full IR pages, but there is no Draw.io-facing action, exact loss-aware detail-file workflow, label-propagation parity, or member-cell drill-down target contract. |
dbxicons.py |
optional-deferred | scripts/src/services/shape-catalog/shape-catalog.tsinternal peer feature-list comparison (not independently verifiable) |
No licensed Databricks manifest, aliases, variants, pinned-ref embedding, refresh operation, host allowlist, or CLI action was delivered. |
diagram_ir.py |
partial | scripts/src/model/diagram-ir.tsscripts/src/services/semantic-lifecycle/import-drawio.tsscripts/src/services/semantic-lifecycle/analysis.tsscripts/src/services/semantic-lifecycle/sync.tsscripts/src/services/semantic-lifecycle/publishing.ts |
Versioned IR, loss-aware import, views, query, policies, failure impact, sync, and story publishing exist, but articulation analysis, a unified architecture-review contract, contrast analysis, multilingual labeling, and explicit peer-IR-v1 compatibility are incomplete. |
diagramctl.py |
partial | scripts/src/cli/commands.tsscripts/src/cli/semantic-lifecycle.test.tsscripts/src/actions/doctor/action.tsscripts/src/actions/sync/action.ts |
Lifecycle actions are registered in the existing --action CLI, but integrated importer, profile, transform, and reverse-export services are not registered. There is no uniform peer-equivalent result envelope. |
diagramctl_mcp.py |
optional-deferred | scripts/src/cli/commands.tsinternal peer feature-list comparison (not independently verifiable) |
No optional MCP package, JSON-RPC initialization, tools/list, tools/call bridge, closed schemas, timeout handling, or MCP entrypoint exists. |
dockerimports.py |
optional-deferred | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
The importer registry has Docker Compose but no Docker inspect snapshot kind, container/network/volume instance normalization, redaction contract, stdin parity, or action. |
drawio2mermaid.py |
partial | scripts/src/services/transforms/reverse.tsscripts/src/services/transforms/reverse.test.tsscripts/src/services/semantic-lifecycle/import-drawio.ts |
A deterministic IR-to-Mermaid service exists, but there is no Draw.io-to-Mermaid CLI/action, shape-form mapping, direction/fence controls, or lossy-conversion report. |
drawio2pptx.py |
optional-deferred | scripts/src/cli/commands.tsinternal peer feature-list comparison (not independently verifiable) |
No optional Draw.io renderer adapter, per-page raster loop, PPTX writer, slide sizing, scale option, or structured unavailable result exists. |
drawiodiff.py |
partial | scripts/src/services/transforms/semantic-diff.tsscripts/src/services/transforms/semantic-diff.test.tsscripts/src/services/semantic-lifecycle/import-drawio.ts |
The IR service classifies added, removed, changed, moved, and rerouted entities, but no CLI/action composes Draw.io import with diffing, no by-label ambiguity mode exists, and no color-coded graph output or summary diagram is emitted. |
drawiohtml.py |
optional-deferred | scripts/src/services/semantic-lifecycle/publishing.tsscripts/src/actions/story/action.ts |
Story HTML is a different semantic publisher; there is no page-to-SVG export adapter, SVG sanitizer, tabbed viewer, pan/zoom/search UI, drill-down link rewrite, or publish-viewer action. |
edgeports.py |
rejected | scripts/src/services/authoring-router/orthogonal-router.tsscripts/src/services/authoring-router/orthogonal-router.test.tsinternal peer feature-list comparison (not independently verifiable) |
Only routing during authoring exists. The post-import boundary-port editor, pinned-port preservation, dry-run, idempotence, and transactional Draw.io write path were not selected for this post-phase implementation. |
encode_drawio_url.py |
optional-deferred | scripts/src/cli/commands.tsscripts/package.json |
Compression primitives are available transitively, but there is no byte-compatible URL encoder, viewer/edit modes, size policy, privacy warning, or CLI action. |
explain.py |
partial | scripts/src/services/transforms/reverse.tsscripts/src/services/transforms/reverse.test.ts |
Structured Markdown for IR pages, nodes, and flows exists as a service, but no Draw.io-facing explain action, tier/type inference, C4 context, unknown-section reporting, or output-file contract is exposed. |
goimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
Bounded Go import extraction exists, but it emits imported paths as library nodes rather than resolving only intra-module packages; module discovery, grouping, transitive reduction, and CLI exposure are absent. |
heatmap.py |
partial | scripts/src/services/transforms/heatmap.tsscripts/src/services/transforms/heatmap.test.ts |
The IR service validates bounded metrics and applies deterministic accessible colors with legend metadata, but it lacks CSV/JSON loading, label matching, geometry scaling, a rendered legend node, Draw.io transactional output, and CLI exposure. |
jsimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
A bounded scanner handles static import/export and require while avoiding tested comments and strings, but dynamic string imports, project module resolution, external exclusion, directory grouping, transitive reduction, and CLI exposure remain incomplete. |
k8simports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
Local object/YAML parsing, namespace-qualified identity, Service selectors, Secret references, and Secret payload redaction are tested. Ingress, ConfigMap, PVC, HPA, list-wrapper normalization, ambiguity diagnostics, icon suppression/grouping, stdin action parity, and CLI registration remain absent. |
openapiimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
OpenAPI operations and local component-schema references are imported through a service API, but Swagger 2 definitions, nested schema-to-schema edges, method styling, tag groups, no-schema projection, version diagnostics, and CLI exposure are missing. |
prdiff.py |
optional-deferred | scripts/src/services/transforms/semantic-diff.tsscripts/src/cli/commands.ts |
Semantic IR diff alone does not provide scoped git revision discovery, A/M/D classification, safe extraction, Draw.io rendering, artifact naming, Markdown reporting, or unavailable-render handling. |
pyclasses.py |
rejected | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
The Python importer extracts imports only. Class declarations, inheritance resolution, multiple inheritance, nested module grouping, ambiguity diagnostics, and transitive reduction were not implemented or registered. |
pyimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
Bounded import/from extraction and dynamic-import diagnostics exist, but relative and absolute intra-project resolution, stdlib/third-party exclusion, package grouping, transitive reduction, syntax-error diagnostics, and CLI exposure are absent. |
raster2drawio.py |
partial | scripts/src/actions/build/action.tsscripts/src/authoring/ir-to-drawio.tsscripts/src/services/layout/layout-engine.tsscripts/src/model/diagram-ir.ts |
Generic IR build supports explicit geometry, styles, edges, and automatic layout, but there is no raster-extracted graph compatibility schema/action, x/y/w/h shorthand conversion, partial-coordinate policy, confidence/provenance convention, or extraction-warning envelope. |
relabel.py |
partial | scripts/src/services/transforms/relabel.tsscripts/src/services/transforms/relabel.test.ts |
A strict complete-map IR relabel service preserves non-label structure, but there is no extraction mode, page-name handling, UserObject traversal contract, partial-map/unmatched reporting, Draw.io transactional write, or CLI action. |
repair_png.py |
optional-deferred | scripts/src/cli/commands.tsinternal peer feature-list comparison (not independently verifiable) |
No PNG chunk validator, signature-specific repair, atomic in-place replacement, idempotence gate, version gate, or optional action exists. |
restyle.py |
partial | scripts/src/services/themes/theme-service.tsscripts/src/services/themes/theme-service.test.ts |
Five validated built-in themes and immutable IR application exist, but the peer-style palette-slot schema, user preset loader, hue/neutral color remapping, global extras, versioned JSON schema, Draw.io transactional action, and CLI exposure are incomplete. |
runbook.py |
partial | scripts/src/services/profiles/runbook.tsscripts/src/services/profiles/runbook.test.ts |
The service emits escaped self-contained interactive HTML from an explicit RunbookGraph, but it does not parse Draw.io, infer node types/start nodes/choices, report fallback selection, or expose a publish-runbook action. |
rustimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
A bounded subset recognizes mod and simple use roots and diagnoses macros, but crate/self/super resolution, module-file discovery, complete brace expansion, external-crate exclusion, grouping, reduction, and CLI exposure are absent. |
seqlayout.py |
partial | scripts/src/services/profiles/sequence.tsscripts/src/services/profiles/sequence.test.ts |
Participants, ordered messages, lifelines, activations, return validation, and editable geometry are implemented as a service, but notes are unsupported and no sequence schema file, input action, direction/options contract, or CLI registration exists. |
shapesearch.py |
partial | scripts/src/services/shape-catalog/shape-catalog.tsscripts/src/services/shape-catalog/shape-catalog.test.ts |
Deterministic exact/alias/fuzzy search exists for eight hand-curated generic shapes, not the licensed 10k+ palette index; compound/tag/Soundex ranking, dimensions, gzip integrity controls, expected ecosystem queries, and CLI output are missing. |
sqlerd.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
A narrow line-oriented subset finds simple tables and REFERENCES edges, but columns/types, PK/FK markers, quoted/schema identifiers, composite keys, schema grouping, crow's-foot styles, unsupported-syntax diagnostics, and CLI exposure are missing. |
svgflow.py |
optional-deferred | scripts/src/cli/commands.tsinternal peer feature-list comparison (not independently verifiable) |
No optional Draw.io SVG export adapter, SVG parser/sanitizer, connector detection, animation injection, reduced-motion handling, or export-flow-svg action exists. |
tfimports.py |
partial | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
A bounded line-oriented resource/reference subset exists, but modules, multiline/nested HCL handling, comments/string false-positive guarantees, diagnostics for dynamic expressions, cloud styles, grouping, transitive reduction, no-icons mode, and CLI exposure are incomplete. |
tfstate.py |
optional-deferred | scripts/src/services/source-importers/index.tsscripts/src/services/source-importers/index.test.ts |
No Terraform show-JSON snapshot source kind, nested module traversal, count/for_each instance expansion, sensitive-value redaction, state relationship extraction, stdin parity, or optional action exists. |
timelapse.py |
partial | scripts/src/services/profiles/timelapse.tsscripts/src/services/profiles/timelapse.test.ts |
The service classifies changes across caller-supplied IR snapshots, but it has no scoped git history/archive adapter, deterministic commit sampling, importer allowlist, Draw.io frame rendering, HTML player, resource limits, or CLI action. |
tubemap.py |
partial | scripts/src/services/profiles/tube-map.tsscripts/src/services/profiles/tube-map.test.ts |
The native service provides deterministic grid-aligned octilinear routes, interchange semantics, validation, and tested obstacle avoidance, but no versioned input schema, build-tubemap action, file adapter, or CLI exposure exists. |
validate.py |
partial | scripts/src/actions/validate/action.tsscripts/src/actions/quality/action.tsscripts/src/actions/page-connectors-validation/action.tsscripts/src/actions/page-shape-bbox-validation/action.tsscripts/src/actions/page-orphans/action.ts |
Structural compilation and several specialized quality checks exist, but findings remain fragmented rather than one stable code/severity/subject/fix schema; duplicate/reserved ID, parent, off-grid, strict-warning, JSON projection, and comparable readability-score acceptance coverage is incomplete. |
Architectural boundary
The retained implementation stays in the existing TypeScript/Node.js stack with pnpm, Taskfile, @maxgraph/core, and the established action-based CLI. Python, Graphviz, Eclipse Layout Kernel (ELK), Model Context Protocol (MCP), browser services, network icon retrieval, and Draw.io Desktop are not mandatory dependencies. Optional adapters must report availability honestly.