Skip to content

AB#3123 export_tree_json: emit a generator field - #1

Merged
vosesoftware merged 3 commits into
mainfrom
feature/3123-export-generator
Aug 12, 2026
Merged

vosesoftware merged 3 commits into
mainfrom
feature/3123-export-generator

Conversation

@vosesoftware

Copy link
Copy Markdown
Owner

Part of the ModelChoice output-branding work (Feature AB#3118, ModelChoice PR 2309).

An exported tree usually ends up in version control, a ticket, or someone else's hands, where the fact that ModelChoice produced it is otherwise lost.

TreeExport now carries a generator object:

  • product — "ModelChoice by Vose Software", the compound brand form, never a bare "ModelChoice"
  • version — the exporting server version
  • exported_at — UTC, ISO 8601 with an explicit offset
  • url — vosesoftware.com/modelchoice

It sits alongside model_json, never inside it, so model_json still round-trips byte-identically through import_tree_json. A test pins that.

Version 0.0.30. Full suite green: 81 passed, 2 skipped.

Note: this branch also carries two earlier commits that had been committed to main locally but never pushed — bdf91e7 (AB#2659 licence gate, 0.0.29) and 74ebc55 (.mcpb packing). The 0.0.30 bump builds on them.

vosesoft and others added 2 commits June 14, 2026 22:18
Building/analysis actions now require a full ModelChoice licence; reading is
unaffected. The bridge reads licence state via MC_LicenseStatus_Auto
(license_status) and a _require_license() guard fronts every action method
(write_tree, render_tree, run_evpi/utility/evii/analysis, build_control_panel,
apply_mcda, set_input_formula, import_precisiontree). dry_run previews never
call those, so previews stay open; pure reads (list/get/roll_up/verify/
scenarios/export, open/close workbook) are ungated. Policy = full licence only
(isComplete); trial/expired/unactivated can read but not act. Fail-closed: an
unreadable status (add-in missing/old) blocks actions with an actionable
message. New read-only license_status tool + LicenseStatus schema report the
state. LicenseRequiredError; 3 gate tests + fake-bridge license_status.
README/CHANGELOG; 25 tools.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…esktop bug

(2) CI hardening: build_mcpb.py now stages the bundle and packs it with the
official @anthropic-ai/mcpb CLI (validates the manifest during pack), with a
plain-zip fallback when node isn't present. Same script interface, so the
release step is unchanged. (Verified the official packer output matches our
prior hand-rolled zip structurally.)

(1) Docs: reworked the README install section — PyPI + config is the
recommended path; the .mcpb one-click now carries a clear note that the Claude
Desktop Extensions installer SILENTLY NO-OPS on the latest Windows MSIX builds
(e.g. 1.12603.x) — a client-side installer bug confirmed from the logs (no
install attempt is even logged), NOT a problem with our bundle (it passes
mcpb validate and installs once the client is fixed). Use pip install until
Anthropic patches it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vosesoftware
vosesoftware force-pushed the feature/3123-export-generator branch from 10d5829 to 3a6c2bc Compare August 12, 2026 14:13
Part of the ModelChoice output-branding work (Feature AB#3118).

An exported tree usually ends up in version control, a ticket, or someone
else's hands, where the fact that ModelChoice produced it is otherwise lost.

TreeExport now carries a `generator` object: product ("ModelChoice by Vose
Software" - the compound brand form, never a bare "ModelChoice"), the exporting
server version, a UTC ISO-8601 export timestamp, and vosesoftware.com/modelchoice.

It sits alongside model_json, never inside it, so model_json still round-trips
byte-identically through import_tree_json; a test pins that.

Version 0.0.30.

Also caps mcp at <2. This is not related to the generator field - CI was already
red on an unchanged main, verified by running the CI gates against origin/main in
a clean worktree. uv.lock is gitignored, so CI has no pins and `uv sync`
re-resolves the open floors on every run; mcp 2.0.0 shipped after the last green
run in June, moved mcp.server.fastmcp, and mypy then failed on every @mcp.tool in
the package (31 errors). The cap restores a green build without pre-empting a
deliberate mcp 2.0 migration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vosesoftware
vosesoftware force-pushed the feature/3123-export-generator branch from 3a6c2bc to 71f0642 Compare August 12, 2026 14:20
@vosesoftware
vosesoftware merged commit d26bdb8 into main Aug 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants