Changelog¶
Single project changelog. All entries live here (rendered on site under Development).
[Unreleased]¶
[2026-03-21]¶
Changed¶
- Decision-perch subscript: \(\circ\) → \(\sim\) (repo-wide):
Adopted
\simas the canonical math subscript for the decision perch, replacing\circ. This aligns bellman-ddsl with SolvingMicroDSOPs notation and frees\circfor its standard use as function composition. Updated across all spec pages, theory docs, examples, formal MDPs, dev-specs, working notes, and the Matsya system prompt. symbols-conventions.md: perch index table, filtration definition, Rosetta Stone, all transition subscripts (\(\mathrm{g}_{\prec\sim}\), \(\mathrm{g}_{\sim\succ}\))- Syntax-semantic-rules:
01,06,07,08 - Theory:
03-symbol-system,05-bellman-theory,06-representation-maps,07-execution-pipeline,MDP-foundations/index,dolo-sym-to-ddsl-core-mapping - Examples:
solving-conjugates,unemployment/index, formal MDPs (noport_stage_mdp,unemployment_branching_mdp) - Dev-specs:
spec_0.1l-branching-theory,spec_0.1eA-stage-operators-to-dolo - References:
ddsl_schema,dolo-to-doloplus-syntax-changes - AI/working:
dolo-plus.md,T-calc-core.md, session notes, perch-index exploration - Matsya prompt (
Bellman-DDSL.md): transition notation, branching notation - Matsya system prompt fixes (HIGH + MEDIUM severity):
max_{c}()vsmax_{c}{}: now accepts both; braces are canonical for operator bodies, parentheses accepted for named-operator arguments- ShadowBellman: removed false "DEPRECATED" claim —
ShadowBellmanis valid indcsn_to_arvl_mover;MarginalBellmanis valid incntn_to_dcsn_mover [~]decision tag: softened prohibition — unmarked is preferred,[~]accepted as explicit marker- Unicode parameters: softened mandate — both
β/ρandbeta/rhoare valid _opralias: noted as valid synonym for_mover(used by canonicalconsumption_savings_iidexample)V_cntnbranching notation: replaced with spec 0.1l canonicalV[>][label]sugar (looked up viavalues.V[>]map)
Key Insights¶
- \(\sim\) over \(\circ\) for decision perch: Using
\simeliminates ambiguity with function composition (\mathbb{I} \circ \mathbb{B}). The tilde visually suggests "approximately here" or "the reference point" — the decision perch is the unmarked default from which\precand\succare defined. SolvingMicroDSOPs already uses\sim; adopting it in bellman-ddsl unifies the notation across the two repositories.
[2026-02-12]¶
Added¶
- spec 0.2a (compiler pipeline architecture): Lean 4-inspired architectural spec for the full dolo-plus compiler pipeline.
docs/development/dolo-plus-impl/spec_0.2a-compiler-pipeline-architecture.md- 8-stage pipeline (Parse → Validate → Υ → Methodize → Calibrate → Ρ → Solve → Analyze) with typed intermediate representations at each stage.
- Operator registry with attribute-based registration (pluggable methods as Lean-style tactics).
- Immutable environment threading (scoped extensions pattern).
- Template-driven Ρ-map code generation.
- Multi-error validation following Lean's collect-all-errors approach.
- Composition pipeline design for periods and nests.
- Lean 4 ≈ CORE elaboration note: added analogy connecting Lean 4's elaboration pipeline to the φ (SYM → CORE) translation in
08-sym-core-architecture.md,for-engineers.md, and homepage. AI/matsya.md: added Matsya RAG configuration file to repo.
Changed¶
- Perch tag propagation (repo-wide):
- Parser (
packages/dolang/dolang/grammar.py): addednormalize_perch_glyphs()pre-parse step —[<]/[>]glyph tags normalize to canonical[_arvl]/[_cntn]before Lark parsing. - Parser (
packages/dolo/dolo/compiler/doloplus_translator/transforms.py): defensive normalization inperch_to_time()andshift_perch_tags(). - MDP foundations (
docs/theory/MDP-foundations/index.md): full notation rewrite — subscript → superscript perch indices (\(x_{\prec}\) → \(x^{\prec}\)), transition functions (\(\mathrm{g}_{\prec}/\mathrm{g}_{\succ}\) → \(\mathrm{f}/\mathrm{g}\)), preferred SYM tags ([<]/unmarked/[>]). - Homepage, for-engineers, language guide, dolo-dynare-relationship, stage-structure-and-timing: updated to preferred perch tags and superscript notation.
- Canonical naming: "Dolo+" → "dolo-plus": global rename across 51 files (387 occurrences). Updated
CLAUDE.mdcanonical terminology table accordingly. - Value object perch tags:
V→V[-]anddV→dV[-]in all YAML snippets where decision-perch value objects appeared bare. Value objects that exist at all three perches require explicit[-]tag at the decision perch (unlike controls/states where unmarked = decision by convention). Updated in homepage, symbols-conventions, for-engineers, consumption_savings_iid example doc, ddsl_foundations proposal.
Key Insights¶
- Elaboration ≈ φ (SYM → CORE): Lean 4's elaboration (surface
Syntax→ kernelExpr) is the precise analogue of the Bellman-calculus φ map (dolo-plus YAML → normalized typed stage IR). The kernel/elaboration separation principle means CORE should be small and trusted; all complexity lives in the SYM-to-CORE desugaring. - Unmarked ≠ bare for value objects: The "unmarked = decision" convention works for controls and states (which live at exactly one perch), but value objects (
V,dV) that span multiple perches must always carry an explicit perch tag. This is a measurability distinction:V[-]asserts "V evaluated at the decision σ-algebra", which differs fromV[<]andV[>]. - Pluggable methods as tactics: Lean's tactic framework (registered proof strategies dispatched by name) maps directly to the DDSL operator registry (registered solver methods dispatched by method tag). The
@register_methoddecorator pattern enables extensibility without modifying core pipeline code. - Persistent IRs prevent black-box pipelines: Every pipeline stage should produce a serializable, inspectable intermediate representation. This makes debugging, diffing, and testing tractable — you can inspect a methodized stage without running calibration.
- Immutable environment threading: Following Lean's scoped extensions, each pipeline stage should extend (never mutate) the symbol/method environment. This is especially important for composition, where each stage in a period has its own scope joined by connector renames.
Added (prior)¶
- Semiconjugate solve (spec 0.1eA implementation): full pipeline from dolo-plus split-file stages through accretive nest build to EGM solve with Stachurski's semiconjugate transform.
explore/semiconjugate_solve.py— three solve methods (egm black-box, egm per-period, manual loop), all verified to exact match.explore/semiconjugate_solve.ipynb— hand-holdy notebook with Stachurski references, iterates lemma, per-cell math explanations.return_internalsforegm()(dolo): returns rawsa0/xa0/zarrays alongsideEGMResult, enabling per-period EGM calls without cubic-resampling error accumulation.make_egm_dr0_from_internals()(dolo): builds a linear-interpolation dr0 callable from raw EGM internals — matches whategm()uses between its own internal iterations.mapping_set()(dolang):yaml_nodes.mapping_set(m, key, value_node)for setting/updating keys in YAML MappingNode data.- spec_0.1p (intermediate-variable indexing): placeholder spec for
c[_a],m_d[_a]bracket syntax — intermediate variables as local perch indices within mover sub-equations. docs/development/dolo-plus-impl/spec_0.1p-intermediate-variable-indexing.md- Deliverables addendum:
docs/deliverables-AAS-Feb2026.md— polished Feb–Apr 2026 SOW addendum with tags and repo links.
Fixed¶
Model.set_calibration()(dolo): now works with MappingNode data fromyaml.compose(). Previously crashed withTypeError: 'MappingNode' object is not subscriptable.
Changed¶
- solving-conjugates.md: front-to-back review — fixed Ŝ vs S operator labelling, rewrote pseudocode to use real repo APIs (
doloplus_to_dolo,egm()), added "level values vs EGM objects" conceptual seam, removed nonexistent helpers. - spec_0.1eA: fixed β-placement convention (β in
direct_response_egm, notexpectation), addedimport numpy, renamed Step 4 to reflectmr(a)output. - noport_stage_mdp.md:
\mathrm{T}→\mathbf{T},E→\mathbf{E}. - CLAUDE.md: added single-changelog rule (no root
CHANGELOG.md).
[2026-02-11]¶
Docs¶
- MDP foundations rewrite: rewrote
theory/MDP-foundations/index.mdwith ≺/·/≻ perch notation, B/I backward movers, intra-stage branching diagrams, and clean forward/backward separation. - Nav restructure: restructured mkdocs nav to match folder layout; added network scroll animation.
- Homepage: updated homepage algebra section with Bellman calculus identity.
[2026-02-09]¶
Docs¶
- Condensed MDP foundations, reordered Theory nav, toned down nav CSS.
- Added branding assets; removed legacy operator YAMLs.
- Embedded Matsya (MatsΥa) chatbot on homepage (MatsΥa (AI) button).
- Refreshed site landing page, nav, and RAG demo.
[2026-02-07]¶
Added¶
- DDSL YAML schema:
docs/dolo-plus-spec/reference/ddsl_schema.mdwith v0.1 stage/period/nest field definitions. - Discrete housing grid:
XH: "@def linspace(H_min, H_max, n_H)"in housing_owner space declaration (design principle: grid defines the mathematical space → parameters, not settings).
Docs¶
- Comprehensive example documentation for all models (consumption_savings_iid, housing_owner, port_with_shocks, formal MDPs).
- Combined port_with_shocks and period-nests into single page.
- Updated period-nests doc to use actual period YAML files.
- Fleshed out core ideas on index page; restructured documentation sections.
- Dark teal Material theme with custom CSS overrides.
Fixed¶
- Broken anchor link in port_stage.md.
- Missing link to port-with-shocks in examples index.
.gitkeepfor overrides dir so CI can findcustom_dir.- Normalised notebook format via nbconvert.
[2026-02-06]¶
Added¶
- spec 0.1eA (stage-to-operator translation): implemented generic translator + backward step orchestrator.
explore/transformations/egm-stage-operators-to-dolo/translate_stage_to_operator.pyexplore/transformations/egm-stage-operators-to-dolo/backward_step_noport_cons.py- Mapping tables for cons and noport operators.
test_stage_operators.py— regression test against vanilla Dolo.- DDSL overview presentation: docs aimed at DSAI audience.
- Compiled stage operators as vanilla Dolo models.
- mkdocs-callouts plugin in CI workflow.
Docs¶
- Comprehensive review of spec 0.1eA (stage operators).
- Added intelligent perch offset handling to translator note.
- Added overview section with new docs to index.
- Quick Summary link in Overview section.
[2026-02-05]¶
Docs¶
- Obsidian/MkDocs dual rendering: Added
mkdocs-calloutsplugin to automatically convert Obsidian-style callouts (> [!type]) to MkDocs admonitions during build. - spec_0.1h restructured: Converted nested callouts to collapsible
??? typedetails sections for proper HTML rendering while preserving Obsidian compatibility. - Warning block with open questions now uses expandable sections for each decision point
- Separated nested
[!note]from[!important]callout
[2026-01-29]¶
Added¶
- spec_0.1g (bare symbol resolution): Allow bare symbols in adc-stage equations without explicit perch indices.
packages/dolang/dolang/perch_resolver.py— AST walker for native perch inferencepackages/dolang/dolang/grammar.lark— bare symbol support in assignment LHSpackages/dolo/dolo/compiler/model.py— integration for adc-stage dialect- argmax grammar support: Added
argmax_{}syntax mirroring existingmax_{}structure. packages/dolang/dolang/grammar.lark— argmaximization rulepackages/dolang/dolang/grammar.py— argmaximization printer method- port-with-shocks library bindings:
calibration.yaml— parameter values (β, ρ, R, shock parameters)settings.yaml— numerical settings (grid sizes, quadrature nodes, simulation)methodization.yml— scheme/method pairings for all three stages- Explore scripts:
explore/stage_explorer.py— inspect stage files (symbols, equations, metadata)explore/stage_pipeline.py— run methodize/calibrate/configure pipelineexplore/stage_pipeline.ipynb— notebook demonstrating accretion approach
Docs¶
- Updated
spec_0.1-overview.mdwith implementation status table for all milestones (0.1a–0.1h). - Documented implementation locations and example files for each completed spec.
[2026-01-25]¶
Added¶
- Repository-level
CHANGELOG.mdplus rendereddocs/changelog.mdpage and MkDocs nav entry. AI/working/AAS/25012026/session.md(today’s working log).
Docs¶
- Refined
docs/specs/dolo-plus-v0.1/syntax-semantic-rules/periods-and-models.md: - Made twisters explicitly core model-level DDSL syntax (inter-period wiring), including an indexed/template form (
t,t+1). - Clarified the DDSL/orchestration boundary: DDSL specifies artifact interfaces, not construction procedures.
- Clarified “bindings are immutable once instantiated” (no hidden state / referential transparency stance).
Changed¶
- Added/updated internal process guidance:
AI/claude.mdnow points toAI/road-map-todo.md(roadmap/decision tracker) and records the proposed periods/models instantiation boundary as pending team review.AI/road-map-todo.mdincludes a rename note (replacing olderAI/todo.md).
[2026-01-24]¶
Docs¶
- Introduced/expanded “0.4 Periods and models (assembly)” to formalize:
- Syntax collections (template libraries) vs instantiated model instances (time-expanded constructions).
- Orchestration-layer responsibility for time-indexing, per-period calibration binding, and inter-period wiring.
- The
twisters.yamlconcept for inter-period variable and value-function wiring, including a loop-generatedconnections:pattern. - Polished internal consistency across Dolang+ syntax/semantics docs (terminology: period template vs period instance; connectors vs twisters; what lives in SYM vs orchestration).
- Updated
05-methodization.mdframing to align with the “syntax collection / orchestration” separation.
Added¶
- Working-note digest: Pflug & Pichler (2014) multistage stochastic optimization concepts relevant to scenario trees, information structure, and nonanticipativity.
[2026-01-23]¶
Added¶
- New Dolang+ example syntax collection:
packages/dolo/examples/models/doloplus/port-with-shocks/ - Stage templates:
noport_stage.yaml,port_stage.yaml,cons_stage.yaml - Period templates:
cons_period.yaml,port_cons_period.yaml,cons_port_period.yaml - README documenting “optimal” period YAML direction and identity/rename connector conventions.
Docs¶
- Restructured Dolang+ syntax/semantics documentation into a flat, numbered set of pages under:
docs/specs/dolo-plus-v0.1/syntax-semantic-rules/- Added “From syntax to formal problem definition” and “Methodization” as numbered overview pages.
- Updated MkDocs navigation to make:
- dolo-plus a top-level section with separate implementation and Dolang+ syntax and semantics groupings.
- Unified-framework sections render as separate pages under a “Unified Framework” group.
- “Example: Portfolio Choice with Correlated Shocks” grouped under a single navigation subsection.
- Added custom sidebar styling via
docs/stylesheets/extra.cssto visually distinguish major nav section headers.