Version: 1.8.4
MICA Contract: 0.2.4
Status: Active operational memory contract
The memory/ directory is the MICA memory layer for STEM BIO-AI.
It is not a generated cache. It is not disposable release residue. It is not a substitute for the public result schema.
Its role is to:
- pin the active protocol state for agent sessions
- preserve versioned archive snapshots across releases
- keep drift rules, lessons, and operating playbooks aligned with the current release
- provide a portable invocation contract for session startup
- provide package-contract self-tests through the MICA PCT runner
The active memory layer is selected by memory/mica.yaml.
STEM BIO-AI already had a working memory package before this upgrade.
This release does not replace the archive model.
It upgrades the package to the non-breaking MICA v0.2.4 runtime and validation contract.
That means:
memory/mica.yamlnow declaresmica_spec: "0.2.4"- the active archive JSON now carries
mica_spec/mica_schema_version0.2.4 tools/mica_pct.pyis available for package validationtools/mica_runtime.pyis available for portable runtime summariesinvocation_protocol.hook_outputis now declared inmemory/mica.yaml- DI
bindingremains a progressive maturity feature, not a forced rewrite
This is a runtime/contract uplift, not a wholesale archive redesign.
memory/mica.yaml is the active composition contract.
It selects exactly three live files:
- archive JSON
- playbook markdown
- lessons markdown
For the current release the active set is:
memory/stem-ai.mica.v1.8.4.jsonmemory/stem-ai-playbook.v1.8.4.mdmemory/stem-ai-lessons.v1.8.4.md
The working tree intentionally keeps only this active trio. Older release-memory snapshots are preserved through Git-tagged release history unless explicitly retired by a documented archive-policy change.
Two runtime tools are now part of the package:
python tools/mica_pct.py .python tools/mica_runtime.py . --format textpython tools/mica_runtime.py . --format session-reportpython tools/mica_invoke.py . --mode guided --format jsonmica_invoke.bat . --mode forced
Recommended session-start sequence:
- load
memory/mica.yaml - run
python tools/mica_pct.py . - run
python tools/mica_runtime.py . --format text - run
python tools/mica_runtime.py . --format session-report - if the host supports preflight, use
python tools/mica_invoke.py . --mode guided --format json - if the session must be hard-gated, start via
mica_invoke.bat . --mode forced - load the archive referenced by
mica.yaml - load the playbook referenced by
mica.yaml - load lessons on demand
Expected posture:
- PCT-001 through PCT-004 must be clean
- PCT-007 / PCT-009 should indicate a closed package
- PCT-010 WARN is acceptable during progressive DI binding rollout
- PCT-011 WARN is acceptable only when a declared
lesson_refpath has not yet been repaired
MICA v0.2.4 adds stronger support for DI binding, but STEM BIO-AI is using it in the intended conservative way.
Critical design invariants are not being mass-rewritten with speculative binding blocks.
The rule is:
- add
binding.origin_episodewhen a real violation or operating lesson exists - add
binding.lesson_refonly when the referenced lesson file actually exists - do not fabricate incident lineage just to satisfy a schema
This keeps the memory layer evidence-based rather than ceremonial.
The active invocation_protocol keeps:
primary_pattern: readme_protocol
So normal STEM BIO-AI sessions do not require a hook-capable runtime.
However, hook_output is now declared for forward portability:
hook_output:
max_di_lines: 3
di_filter: violations_onlyMeaning:
- future hook adapters can emit terse summaries
- low-signal stable DIs do not flood the session preamble
- violated critical invariants stay visible first
This is a portability improvement, not a change to scan semantics.
There are two different entry surfaces:
README.md: public project contract and operator-facing overviewSKILL.md: agent-facing entry point and load order
They should not duplicate full memory contents. They should point to the active contract.
Required linkage:
README.mdlinks here for memory policy.SKILL.mdtells agents to loadmemory/mica.yamlfirst.SKILL.mdshould prefer the files referenced bymica.yamlrather than hard-coding stale filenames.SKILL.mdshould reference the current PCT range and current[MICA READY]output surface.
Historical memory provenance is intentionally kept in Git.
Reasons:
- they are part of release provenance
- they preserve drift history and patch rationale
- they allow exact reconstruction of prior agent operating state
Because of that, memory/ should not be added to .gitignore.
What stays stable:
- Git-tagged release history remains the archive of prior memory states
- only
memory/mica.yamldecides what is active - the visible working-tree surface keeps only the current archive/playbook/lessons trio
What changes on each release-memory rotation:
memory/mica.yaml- the new versioned archive/playbook/lessons trio
- any doc or skill surface that hard-codes active memory filenames
When the release version changes and memory is updated:
- create new versioned memory snapshots from the previous active layer
- update release-specific version strings inside the new snapshots
- point
memory/mica.yamlto the new active files - verify
SKILL.mdstill followsmica.yaml - run
python tools/mica_pct.py . - run
python tools/mica_runtime.py . --format text - verify README and docs still point to the current memory policy
- keep older snapshots in tagged Git history rather than as parallel working-tree files unless an explicit archive-policy change says otherwise
Minimum checks for the memory layer:
memory/mica.yamlexists- each required layer path in
mica.yamlexists - the archive
project.versionmatches the current release mica_specaligns betweenmica.yamland the active archiveSKILL.mddoes not hard-code stale active memory filenamesREADME.mdlinks to the current MICA policy docpython tools/mica_pct.py .returns a closed package state
The MICA layer does not:
- replace the public API contract
- replace
README.md - define score math by itself
- justify hiding old memory files from version control
- turn the scanner into a runtime enforcement engine
It is an operational memory contract for agent sessions, not a substitute for the scanner's public result schema.