diff --git a/docs/evidence/gen2-028-v1-compatibility-inventory-2026-08-30.json b/docs/evidence/gen2-028-v1-compatibility-inventory-2026-08-30.json new file mode 100644 index 0000000..78d06aa --- /dev/null +++ b/docs/evidence/gen2-028-v1-compatibility-inventory-2026-08-30.json @@ -0,0 +1,98 @@ +{ + "evidence_id": "gen2-028-v1-compatibility-inventory-2026-08-30", + "task_id": "GEN2-028", + "task_revision": 2, + "source_revision": "93feb9bf2df8f2e2cfd4d0259d39c869b19cad08", + "scope": "static repository inventory plus read-only production container and Supervisor observations; no code, schema, or runtime mutation", + "canonical_writer_rule": "unchanged; no second Memory owner and no writer cutover performed", + "production_observation": { + "deployment_revision": "3182092d5cc758f5a536ce10f5428b5d782bb961", + "core_container": "running, restart_count=0; /healthz=200", + "cognitive_worker": "running, restart_count=0, health=healthy", + "lifeboat": "running, restart_count=0, health=healthy", + "supervisor": "running, restart_count=0, health=healthy", + "traffic_mode": "CANDIDATE", + "last_known_good": "3182092d5cc758f5a536ce10f5428b5d782bb961", + "legacy_named_runtime_containers": "none observed" + }, + "inventory": [ + { + "id": "personal-memory-context-text", + "paths": ["modules/interaction/domain/personal_memory.go", "modules/interaction/domain/gen2_context.go", "cmd/core-runtime/main.go"], + "role": "V1 rebuildable context projection and deterministic preference recall", + "runtime_status": "ACTIVE_COMPATIBILITY_PATH", + "evidence": ["BuildScopedGen2Context is called from the production chat handler", "CompilePersonalMemory and ContextText remain in that call path", "empty Gen2 projection returns personal-memory-v1-fallback", "targeted gen2_context and personal_memory tests exist"], + "retirement": "KEEP_LONGER", + "rollback": "retain the existing read fallback and revert the reader switch without deleting utterance history" + }, + { + "id": "active-project-focus", + "paths": ["adapters/postgres/situation_repository.go", "cmd/core-runtime/main.go", "contracts/situation/types.go"], + "role": "V1 project-centric focus compatibility projection", + "runtime_status": "ACTIVE_READ_AND_WRITE_COMPATIBILITY_PATH", + "evidence": ["core chat loads ActiveProjectFocus for each authenticated message", "core persists it after semantic interpretation", "PostgreSQL adapter reads and upserts situation.active_project_focus", "Focus V2 projection exists but does not remove these callers"], + "retirement": "KEEP_LONGER", + "rollback": "keep the projection readable and restore the prior focus reader if a V2 reader is rolled back" + }, + { + "id": "truth-bundles", + "paths": ["adapters/postgres/epistemics_repository.go", "modules/epistemics/application/persisted_research.go", "database/migrations/034_epistemics_truth_bundles.sql", "tests/research_contracts/truth_persistence_sql_test.go"], + "role": "V1 denormalized epistemic compatibility/status and research persistence", + "runtime_status": "ACTIVE_WRITER_AND_READ_COMPATIBILITY_PATH", + "evidence": ["SaveTruthBundle remains an application repository contract used by persisted research", "TruthRuntimeStatus reads counts and grouped status from epistemics.truth_bundles", "migration 034 and its contract test are retained", "no production evidence permits declaring the reader unused"], + "retirement": "KEEP_LONGER", + "rollback": "retain table and reader; revert normalized reader selection without deleting historical bundles" + }, + { + "id": "ordinary-env-configuration", + "paths": ["cmd/core-runtime/main.go", "cmd/work-graph-runtime/main.go", "cmd/reflection-worker/main.go", "cmd/notification-receiver/main.go"], + "role": "ENV configuration and secret/bootstrap resolution", + "runtime_status": "ACTIVE_MIXED_BOOTSTRAP_AND_NON_BOOTSTRAP_READS", + "evidence": ["production composition supplies runtime settings through process configuration", "source contains direct os.Getenv reads for listener, database, provider and runtime settings", "secret values were not read or emitted", "no complete production observation proves every non-bootstrap consumer is unused"], + "retirement": "KEEP_LONGER", + "rollback": "restore the prior ENV fallback for a single setting while Configuration remains authoritative" + }, + { + "id": "skill-profile-v1", + "paths": ["adapters/postgres/capability_repository.go", "cmd/core-runtime/learning.go", "contracts/capability/resolution.go"], + "role": "V1 SkillProfile storage/read compatibility and FastPath learning", + "runtime_status": "ACTIVE_READ_AND_WRITE_PATH", + "evidence": ["core exposes RecentSkillProfiles and records FastPath decline learning", "learning.go loads and saves SkillProfile", "PostgreSQL adapter writes and joins capability.skill_profiles", "explicit Skill/Reflex types exist but do not prove these callers are dead"], + "retirement": "KEEP_LONGER", + "rollback": "retain SkillProfile rows and reader; revert Skill V2 selection without data deletion" + }, + { + "id": "implicit-fast-path", + "paths": ["modules/capability/domain/skill.go", "modules/capability/domain/reflex.go", "cmd/core-runtime/learning.go"], + "role": "V1 FastPath behavior and fallback-to-thinking compatibility", + "runtime_status": "ACTIVE_COMPATIBILITY_PATH", + "evidence": ["FastPath decisions are implemented and tested", "core records FastPath decline experiences", "ReflexFallback explicitly maps escalation to skill->reasoning", "no runtime telemetry separates all FastPath invocations from explicit Reflex use"], + "retirement": "KEEP_LONGER", + "rollback": "restore FastPath decline/escalation behavior; preserve evidence and Skill/Reflex revisions" + }, + { + "id": "migration-feature-switches", + "paths": ["development/GEN2_MIGRATION_MAP.md", "runtime/**", "modules/**"], + "role": "documented migration switch family and compatibility strategy", + "runtime_status": "UNKNOWN_NO_DEDICATED_RUNTIME_TELEMETRY_FOUND", + "evidence": ["migration map defines switch names such as Focus, Context, Epistemics, Config and Skill strategies", "repository scan found no complete operational switch registry/telemetry proving zero production use", "test-only legacy mode references are not sufficient production evidence"], + "retirement": "KEEP_LONGER", + "rollback": "do not remove a switch until production observation identifies its callers and a reversible disable path" + } + ], + "coverage": { + "searched": ["modules", "contracts", "cmd", "adapters", "runtime", "platform", "tests", "docs", "database/migrations"], + "terms": ["PersonalMemory", "CompilePersonalMemory", "ContextText", "ActiveProjectFocus", "truth_bundles", "skill_profiles", "FastPath", "os.Getenv", "LookupEnv", "compatibility", "legacy", "feature switch"], + "limitations": ["No secret values were inspected", "Container logs and Supervisor state provide no per-path legacy usage counters", "A code reference is evidence of availability/callability, not a claim that every branch executed in the observation window"] + }, + "retirement_list": [ + {"path": "personal-memory-context-text", "decision": "KEEP_LONGER", "reason": "active production chat fallback and no usage counter"}, + {"path": "active-project-focus", "decision": "KEEP_LONGER", "reason": "core read/write callers remain active"}, + {"path": "truth-bundles", "decision": "KEEP_LONGER", "reason": "research writer and status reader remain active"}, + {"path": "ordinary-env-configuration", "decision": "KEEP_LONGER", "reason": "mixed bootstrap/non-bootstrap consumers remain"}, + {"path": "skill-profile-v1", "decision": "KEEP_LONGER", "reason": "core learning and repository read/write callers remain active"}, + {"path": "implicit-fast-path", "decision": "KEEP_LONGER", "reason": "active learning/fallback path and no complete production telemetry"}, + {"path": "migration-feature-switches", "decision": "KEEP_LONGER", "reason": "no complete runtime observation evidence"} + ], + "conclusion": "GEN2-028 EXIT: every inventoried legacy surface is classified ACTIVE_COMPATIBILITY_PATH, ACTIVE_READ_AND_WRITE_COMPATIBILITY_PATH, or UNKNOWN_NO_DEDICATED_RUNTIME_TELEMETRY_FOUND. No surface is SAFE_TO_RETIRE on current evidence; GEN2-029 must not perform irreversible deletion or disablement based on this inventory." +}