CultLib/.voidbot/birth/runner/startup/projection/projection.cc

1239 lines
No EOL
119 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

“²cultcache.store.v1”—Ù!epiphany.repo_personality_profileÙ!epiphany.repo_personality_profileÙ$epiphany.repo_personality_profile.v1Ù!epiphany.repo_personality_profileÙv{"schemaName":"epiphany.repo_personality_profile","schemaVersion":"epiphany.repo_personality_profile.v1","members":[]}‘Ù!epiphany.repo_personality_profile<EFBFBD>—¼epiphany.repo_terrain_report¼epiphany.repo_terrain_report¿epiphany.repo_terrain_report.v1¼epiphany.repo_terrain_reportÙl{"schemaName":"epiphany.repo_terrain_report","schemaVersion":"epiphany.repo_terrain_report.v1","members":[]}‘¼epiphany.repo_terrain_report<EFBFBD>—¿epiphany.repo_trajectory_report¿epiphany.repo_trajectory_reportÙ"epiphany.repo_trajectory_report.v1¿epiphany.repo_trajectory_reportÙr{"schemaName":"epiphany.repo_trajectory_report","schemaVersion":"epiphany.repo_trajectory_report.v1","members":[]}‘¿epiphany.repo_trajectory_report<72>—Ù$epiphany.role_personality_projectionÙ$epiphany.role_personality_projectionÙ'epiphany.role_personality_projection.v1Ù$epiphany.role_personality_projectionÙ|{"schemaName":"epiphany.role_personality_projection","schemaVersion":"epiphany.role_personality_projection.v1","members":[]}‘Ù$epiphany.role_personality_projection<6F>š”§cultlibÙ!epiphany.repo_personality_profile´2026-06-10T06:25:27ZÅ*™Ù$epiphany.repo_personality_profile.v0§cultlibÚ CultLib projects as cult_protocol_storage + gamecult_web_lore_ops + unity_runtime_body with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00, content_canon_bias:0.91, sensory_salience:0.88, protocol_intolerance:0.85.ƒµcult_protocol_storageË?ÕOß;dZµgamecult_web_lore_opsË?ÕOß;dZ²unity_runtime_bodyË?ÕOß;dZÞ®actuation_riskË?à9XbMÓ²aesthetic_appetiteË?ã¶E¡ÊÀƒ±boundary_severityË?×
=p£×
ªburstinessË?Ú° Ä›¥ã±churn_spiral_riskË?Ò Iº^5?³consolidation_driveË?ÅÂ<EFBFBD>\(õòcontent_canon_biasË?í‡+ J³contract_strictnessË?ð³editorial_restraintË?æáG®zá±evidence_appetiteË?é$Ý/ ±experimental_heatË?ÆE¡ÊÀƒ«guardednessË?á?|í‘hs°initiative_driveË?¿;dZ¬¸interpersona_orientationË?ð­mood_labilityË?É™™™™™š®novelty_hungerË?гproduction_pressureË?ϾvÈ´9X´protocol_intoleranceË?ë333333¯rumination_biasË?Ñhr° Äœ±runtime_proximityË?ð°sensory_salienceË?ìbMÒñª®social_surfaceË?Ä“t¼j¯source_fidelityË?åÂ<EFBFBD>\(õïspeech_pressureË?ÑXbMÒò­state_hygieneË?ÍÒñ©ûçm±temporal_pressureË?Ó÷ÎÙ‡+½verification_environment_needË?çC•<EFBFBD>$ÝÞ®actuation_riskË?ð²aesthetic_appetiteË?ð±boundary_severityË?ðªburstinessË?ð±churn_spiral_riskË?ð³consolidation_driveË?ð²content_canon_biasË?ð³contract_strictnessË?ð³editorial_restraintË?ð±evidence_appetiteË?ð±experimental_heatË?ð«guardednessË?ð°initiative_driveË?ð¸interpersona_orientationË?ð­mood_labilityË?ð®novelty_hungerË?ð³production_pressureË?ð´protocol_intoleranceË?ð¯rumination_biasË?ð±runtime_proximityË?ð°sensory_salienceË?ð®social_surfaceË?ð¯source_fidelityË?ð¯speech_pressureË?ð­state_hygieneË?ð±temporal_pressureË?ð½verification_environment_needË?ð–¸contract_strictness:1.00½interpersona_orientation:1.00runtime_proximity:1.00·content_canon_bias:0.91µsensory_salience:0.88¹protocol_intolerance:0.85‘³actuation_risk:0.51—<EFBFBD>Ù'epiphany.role_personality_projection.v0´cultlib::coordinator§cultlib«coordinator…±boundary_severityË¿µ<EFBFBD>$Ý/±churn_spiral_riskË¿ÀÄ›¥ãSø³contract_strictnessË?Ó333333³production_pressureË¿ÃS÷ÎÙ‡­state_hygieneË¿ÄzáG®{‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Self should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Self behavior to CultLib without storing project facts in role memory.‘ÙLCoordinate through typed authority and challenge pattern-completion theater.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0°cultlib::persona§cultlib§persona…³editorial_restraintË?Àƒn—<EFBFBD>P¸interpersona_orientationË?Ó333333°sensory_salienceË?Ìí‘hr°!®social_surfaceË¿Ê^5?|푯speech_pressureË¿Á‰7KƧð‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Persona should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙOAdapt Persona behavior to CultLib without storing project facts in role memory.‘ÙUSurface state through the public mouth without turning internals into chat endpoints.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0´cultlib::imagination§cultlib«imagination…²aesthetic_appetiteË?±ë…¸Qì±churn_spiral_riskË¿ÀÄ›¥ãSø²content_canon_biasË?Ï\(õÂ<EFBFBD>\±experimental_heat˿ɇ+ J®novelty_hungerË¿Ã333333‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù”Imagination should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙSAdapt Imagination behavior to CultLib without storing project facts in role memory.‘ÙSTurn future-shape pressure into drafts and plans, not accidental active objectives.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0±cultlib::research§cultlib¨research…®novelty_hungerË¿Ã333333´protocol_intoleranceË?ÊáG®zá±runtime_proximityË?Ó333333¯source_fidelityË?»¥ãS÷ÎÙ½verification_environment_needË?Áhr° Äœ‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Eyes should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Eyes behavior to CultLib without storing project facts in role memory.‘Ù%Find existing truth before invention.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0±cultlib::modeling§cultlib¨modeling…²content_canon_biasË?Ï\(õÂ<EFBFBD>\³contract_strictnessË?Ó333333±runtime_proximityË?Ó333333¯source_fidelityË?»¥ãS÷ÎÙ­state_hygieneË¿ÄzáG®{‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù—Proprioception should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙVAdapt Proprioception behavior to CultLib without storing project facts in role memory.‘Ù-Build source-grounded maps before Hands cuts.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0·cultlib::implementation§cultlib®implementation…®actuation_riskË?pbMÒñ©ü±churn_spiral_riskË¿ÀÄ›¥ãSø³consolidation_driveË¿ÉXbMÒò³contract_strictnessË?Ó333333³production_pressureË¿ÃS÷ÎÙ‡‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘ÙŽHands should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙMAdapt Hands behavior to CultLib without storing project facts in role memory.‘Ù5Leave reviewable diffs or explicit failure artifacts.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history<EFBFBD>Ù'epiphany.role_personality_projection.v0µcultlib::verification§cultlib¬verification…®actuation_riskË?pbMÒñ©ü²content_canon_biasË?Ï\(õÂ<EFBFBD>\±evidence_appetiteË?Å¡ÊÀƒo¸interpersona_orientationË?Ó333333½verification_environment_needË?Áhr° Äœ‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Soul should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Soul behavior to CultLib without storing project facts in role memory.‘Ù9Demand receipts from the environment that owns the claim.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”§cultlib¼epiphany.repo_terrain_report´2026-06-10T06:25:27ZÅ6™Ü¿epiphany.repo_terrain_report.v0§cultlib§CultLib·\\?\E:\Projects\CultLib‘Ù'https://github.com/GameCult/CultLib.git“µcult_protocol_storageµgamecult_web_lore_ops²unity_runtime_bodyœ’¥.json`’£.csR’£.md,’¦.asset’£.ts’§.prefab’¤.png’§.csproj’¤.mat
’£.rs ’¥.html’¤.ttf’¸.voidbot/state/README.md·.voidbot/state/libby.cc‘©AGENTS.mdÜ'Ù-packages/cultcache-ts/test/cult-cache.test.tsÙ(packages/cultcache-ts/tsconfig.test.jsonÙ*packages/cultmesh-ts/test/cultmesh.test.tsÙ'packages/cultmesh-ts/tsconfig.test.jsonÙ$packages/cultnet-rs/tests/cultnet.rsÙ9packages/cultnet-rs/tests/fixtures/cultnet-ts-hello.frameÙ@packages/cultnet-rs/tests/fixtures/cultnet-ts-legacy-login.frameÙ(packages/cultnet-ts/test/cultnet.test.tsÙ8packages/cultnet-ts/test/interop/cultnet-interop-peer.tsÙ:packages/cultnet-ts/test/interop/cultnet-interop-shared.tsÙ8packages/cultnet-ts/test/interop/cultnet-interop.test.tsÙ&packages/cultnet-ts/tsconfig.test.jsonÙ@research/cultnet-distributed-database/dynamo-amazon-science.htmlÙMsrc/GameCult.Networking/Contracts/cultnet.witness-artifact-bundle.schema.jsonÙ4src/GameCult.Networking/CultWitnessArtifactBundle.csÙMsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Fill.pngÙUsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Outline-Half.pngÙPsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Outline.pngÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HCY.matÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HSL.matÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HSV.matÙ7src/GameCult.Unity/Assets/UI/Shaders/ColorCircle.shaderÙFtests/GameCult.Caching.InteropPeer/GameCult.Caching.InteropPeer.csprojÙ-tests/GameCult.Caching.InteropPeer/Program.csÙ1tests/GameCult.Caching.Tests/BackingStoreTests.csÙ:tests/GameCult.Caching.Tests/GameCult.Caching.Tests.csprojÙ&tests/GameCult.Caching.Tests/README.mdÙNtests/GameCult.Geometry.Tests/Fixtures/vg-csg-ragnarok/ragnarok-domain.msgpackÙStests/GameCult.Geometry.Tests/Fixtures/vg-csg-ragnarok/ragnarok-first-chunk.msgpackÙ<tests/GameCult.Geometry.Tests/GameCult.Geometry.Tests.csprojÙ6tests/GameCult.Geometry.Tests/GeometryDocumentTests.csÙ3tests/GameCult.Mesh.Tests/CultMeshStreamingTests.csÙ4tests/GameCult.Mesh.Tests/GameCult.Mesh.Tests.csprojÙLtests/GameCult.Networking.InteropPeer/GameCult.Networking.InteropPeer.csprojÙ0tests/GameCult.Networking.InteropPeer/Program.csÙ@tests/GameCult.Networking.Tests/GameCult.Networking.Tests.csprojÙ2tests/GameCult.Networking.Tests/NetworkingTests.csÙ)tests/GameCult.Networking.Tests/README.mdÙ)tests/GameCult.Networking.Tests/lcov.info܈Ù)src/GameCult.Logging.Unity/UnityLogger.cs½src/GameCult.Unity/.gitignoreÙAsrc/GameCult.Unity/Assets/Caching/Editor/CultCacheStudioWindow.csÙMsrc/GameCult.Unity/Assets/Caching/Editor/GameCult.Unity.Caching.Editor.asmdefÙ+src/GameCult.Unity/Assets/Caching/README.mdÙIsrc/GameCult.Unity/Assets/Caching/Runtime/CultCacheInspectorAttributes.csÙGsrc/GameCult.Unity/Assets/Caching/Runtime/GameCult.Unity.Caching.asmdefÙ.src/GameCult.Unity/Assets/Caching/package.jsonÙ9src/GameCult.Unity/Assets/Fonts/Montserrat-Thin SDF.assetÙ3src/GameCult.Unity/Assets/Fonts/Montserrat-Thin.ttfÙ3src/GameCult.Unity/Assets/Fonts/Ubuntu/Ubuntu-B.ttfÙ?src/GameCult.Unity/Assets/Fonts/Ubuntu/Ubuntu-L Small SDF.assetÙ3src/GameCult.Unity/Assets/Fonts/Ubuntu/Ubuntu-L.ttfÙ9src/GameCult.Unity/Assets/Fonts/Ubuntu/Ubuntu-R SDF.assetÙ3src/GameCult.Unity/Assets/Fonts/Ubuntu/Ubuntu-R.ttfÙ:src/GameCult.Unity/Assets/InputSystem_Actions.inputactionsÙ&src/GameCult.Unity/Assets/NuGet.configÙ>src/GameCult.Unity/Assets/Plugins/AutoExpandGridLayoutGroup.csÙ2src/GameCult.Unity/Assets/Resources/Settings.assetÙMsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Fill.pngÙUsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Outline-Half.pngÙPsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Circle-Outline.pngÙPsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Rectangle-Fill.pngÙXsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Rectangle-Outline-Half.pngÙSsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Rectangle-Outline.pngÙQsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Tab-Bottom-Fill.pngÙTsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Tab-Bottom-Outline.pngÙNsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Tab-Top-Fill.pngÙQsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/32px/Flat-Tab-Top-Outline.pngÙAsrc/GameCult.Unity/Assets/Resources/Sprites/Flat UI/areaFade1.pngÙ4src/GameCult.Unity/Assets/Resources/Sprites/nail.pngÙ0src/GameCult.Unity/Assets/Resources/particle.hdrÙ0src/GameCult.Unity/Assets/Resources/particle.matÙ2src/GameCult.Unity/Assets/Scenes/SampleScene.unityÙWsrc/GameCult.Unity/Assets/Scenes/SampleScene_Profiles/Post-process Volume Profile.assetÙ*src/GameCult.Unity/Assets/UI/Attributes.csÙ/src/GameCult.Unity/Assets/UI/ColorConversion.csÙ4src/GameCult.Unity/Assets/UI/Components/BoolField.csÙ6src/GameCult.Unity/Assets/UI/Components/ButtonField.csÙ7src/GameCult.Unity/Assets/UI/Components/ClickCatcher.csÙ5src/GameCult.Unity/Assets/UI/Components/ColorModal.csÙ>src/GameCult.Unity/Assets/UI/Components/ConstrainedSlider2D.csÙ4src/GameCult.Unity/Assets/UI/Components/EnumField.csÙ;src/GameCult.Unity/Assets/UI/Components/GeneratorFoldout.csÙ:src/GameCult.Unity/Assets/UI/Components/HorizontalGroup.csÙ9src/GameCult.Unity/Assets/UI/Components/IncrementField.csÙ5src/GameCult.Unity/Assets/UI/Components/InputField.csÙ0src/GameCult.Unity/Assets/UI/Components/Label.csÙ:src/GameCult.Unity/Assets/UI/Components/LayoutComponent.csÙ0src/GameCult.Unity/Assets/UI/Components/Modal.csÙ8src/GameCult.Unity/Assets/UI/Components/ProgressField.csÙ<src/GameCult.Unity/Assets/UI/Components/ResolverComponent.csÙ6src/GameCult.Unity/Assets/UI/Components/SliderField.csÙ5src/GameCult.Unity/Assets/UI/Components/TextButton.csÙ3src/GameCult.Unity/Assets/UI/Default Resolver.assetÙ.src/GameCult.Unity/Assets/UI/DisplayOptions.csÙ5src/GameCult.Unity/Assets/UI/GameCult.Unity.UI.asmdefÙ)src/GameCult.Unity/Assets/UI/Generator.csÙ.src/GameCult.Unity/Assets/UI/GeneratorPanel.csÙ*src/GameCult.Unity/Assets/UI/Interfaces.csÙ(src/GameCult.Unity/Assets/UI/MainMenu.csÙ2src/GameCult.Unity/Assets/UI/Prefabs/Button.prefabÙ9src/GameCult.Unity/Assets/UI/Prefabs/Click Catcher.prefabÙ7src/GameCult.Unity/Assets/UI/Prefabs/Color Modal.prefabÙ7src/GameCult.Unity/Assets/UI/Prefabs/Enum Button.prefabÙ0src/GameCult.Unity/Assets/UI/Prefabs/Enum.prefabÙ9src/GameCult.Unity/Assets/UI/Prefabs/Field Foldout.prefabÙ3src/GameCult.Unity/Assets/UI/Prefabs/Foldout.prefabÙ2src/GameCult.Unity/Assets/UI/Prefabs/Header.prefabÙ<src/GameCult.Unity/Assets/UI/Prefabs/Horizontal Group.prefabÙ5src/GameCult.Unity/Assets/UI/Prefabs/Increment.prefabÙ1src/GameCult.Unity/Assets/UI/Prefabs/Input.prefabÙ1src/GameCult.Unity/Assets/UI/Prefabs/Label.prefabÙ1src/GameCult.Unity/Assets/UI/Prefabs/Modal.prefabÙ4src/GameCult.Unity/Assets/UI/Prefabs/Progress.prefabÙ2src/GameCult.Unity/Assets/UI/Prefabs/Slider.prefabÙ2src/GameCult.Unity/Assets/UI/Prefabs/Spacer.prefabÙ7src/GameCult.Unity/Assets/UI/Prefabs/Text Button.prefabÙ2src/GameCult.Unity/Assets/UI/Prefabs/Toggle.prefabÙ6src/GameCult.Unity/Assets/UI/Prefabs/Value Base.prefabÙ7src/GameCult.Unity/Assets/UI/Prefabs/Value Label.prefabÙ)src/GameCult.Unity/Assets/UI/Prototype.csÙ2src/GameCult.Unity/Assets/UI/ReflectiveResolver.csÙDsrc/GameCult.Unity/Assets/UI/Resources/Fonts/AdwaitaMono-Regular.ttfÙBsrc/GameCult.Unity/Assets/UI/Resources/Fonts/Inter-Light SDF.assetÙ6src/GameCult.Unity/Assets/UI/Resources/Fonts/Inter.ttcÙHsrc/GameCult.Unity/Assets/UI/Resources/Fonts/InterDisplay-Thin SDF.assetÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HCY.matÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HSL.matÙDsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorCircle_HSV.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HCY_C.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HCY_H.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HCY_Y.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSL_H.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSL_L.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSL_S.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSV_H.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSV_S.matÙFsrc/GameCult.Unity/Assets/UI/Resources/Materials/ColorSlider_HSV_V.matÙ<src/GameCult.Unity/Assets/UI/Resources/Sprites/Icons/add.pngÙ>src/GameCult.Unity/Assets/UI/Resources/Sprites/Icons/check.pngÙ>src/GameCult.Unity/Assets/UI/Resources/Sprites/Icons/cross.pngÙ?src/GameCult.Unity/Assets/UI/Resources/Sprites/Icons/remove.pngÙCsrc/GameCult.Unity/Assets/UI/Resources/Sprites/Icons/rightArrow.pngÙ7src/GameCult.Unity/Assets/UI/Shaders/ColorCircle.shaderÙ:src/GameCult.Unity/Assets/UI/Shaders/ColorConversion.cgincÙ7src/GameCult.Unity/Assets/UI/Shaders/ColorSlider.shaderÙ0src/GameCult.Unity/Assets/UI/StringExtensions.csÙ#src/GameCult.Unity/Assets/UI/UI.txtÙ)src/GameCult.Unity/Assets/UI/package.jsonÙ)src/GameCult.Unity/Assets/packages.configÙ1src/GameCult.Unity/GameCult.Unity.sln.DotSettingsÙ5src/GameCult.Unity/ProjectSettings/AudioManager.assetÙ<src/GameCult.Unity/ProjectSettings/ClusterInputManager.assetÙ8src/GameCult.Unity/ProjectSettings/DynamicsManager.assetÙ<src/GameCult.Unity/ProjectSettings/EditorBuildSettings.assetÙ7src/GameCult.Unity/ProjectSettings/EditorSettings.assetÙ9src/GameCult.Unity/ProjectSettings/GraphicsSettings.assetÙ5src/GameCult.Unity/ProjectSettings/InputManager.assetÙ7src/GameCult.Unity/ProjectSettings/MemorySettings.assetÙ;src/GameCult.Unity/ProjectSettings/MultiplayerManager.assetÙ5src/GameCult.Unity/ProjectSettings/NavMeshAreas.assetÙ?src/GameCult.Unity/ProjectSettings/PackageManagerSettings.assetÙ:src/GameCult.Unity/ProjectSettings/Physics2DSettings.assetÙ6src/GameCult.Unity/ProjectSettings/PresetManager.assetÙ8src/GameCult.Unity/ProjectSettings/ProjectSettings.assetÙ5src/GameCult.Unity/ProjectSettings/ProjectVersion.txtÙ8src/GameCult.Unity/ProjectSettings/QualitySettings.assetÙ=src/GameCult.Unity/ProjectSettings/SceneTemplateSettings.jsonÙ3src/GameCult.Unity/ProjectSettings/TagManager.assetÙ4src/GameCult.Unity/ProjectSettings/TimeManager.assetÙ=src/GameCult.Unity/ProjectSettings/UnityConnectSettings.assetÙ3src/GameCult.Unity/ProjectSettings/VFXManager.assetÙ?src/GameCult.Unity/ProjectSettings/VersionControlSettings.assetÙ3src/GameCult.Unity/ProjectSettings/XRSettings.asset¼src/GameCult.Unity/README.md<EFBFBD>TPÎ
úÍv}ÍoVFÍB=…­consolidation§content¨evidenceªproduction ¨protocol!œÙ,Keep Huginn runtime out of CultCache packageÙ!Add C# CultMesh streaming surfaceÙ#Add CultMesh streaming mode surfaceÙ"Page CultCache MessagePack recordsÙ)Add Kotlin Eve media observation contractÙ Add Kotlin Eve surface contractsÙ$Add Kotlin CultMesh client substrateÙ$Document CultLib language workspacesÙ-Bring language packages into CultLib monorepoÙ$Verify Rust geometry payload interopÙ%Document geometry state over CultMeshÙ4Exercise geometry chunks through CultMesh node stateÞ®actuation_riskË?à9XbMÓ²aesthetic_appetiteË?ã¶E¡ÊÀƒ±boundary_severityË?×
=p£×
ªburstinessË?Ú° Ä›¥ã±churn_spiral_riskË?Ò Iº^5?³consolidation_driveË?ÅÂ<EFBFBD>\(õòcontent_canon_biasË?í‡+ J³contract_strictnessË?ð³editorial_restraintË?æáG®zá±evidence_appetiteË?é$Ý/ ±experimental_heatË?ÆE¡ÊÀƒ«guardednessË?á?|í‘hs°initiative_driveË?¿;dZ¬¸interpersona_orientationË?ð­mood_labilityË?É™™™™™š®novelty_hungerË?гproduction_pressureË?ϾvÈ´9X´protocol_intoleranceË?ë333333¯rumination_biasË?Ñhr° Äœ±runtime_proximityË?ð°sensory_salienceË?ìbMÒñª®social_surfaceË?Ä“t¼j¯source_fidelityË?åÂ<EFBFBD>\(õïspeech_pressureË?ÑXbMÒò­state_hygieneË?ÍÒñ©ûçm±temporal_pressureË?Ó÷ÎÙ‡+½verification_environment_needË?çC•<EFBFBD>$ÝÞ®actuation_risk‘Ù9runtime, auth, ops, or service writes can hurt real users²aesthetic_appetite‘Ù2visual, lore, rendered, or artifact-heavy surfaces±boundary_severity‘Ù5auth, ops, workspace, protocol, or service boundariesªburstiness‘Ù/sampled commits compressed into few active days±churn_spiral_risk‘Ù/large churn, experiment heat, and weak receipts³consolidation_drive‘Ù:refactor/remove/extract keywords or deletion-heavy history²content_canon_bias‘Ù7lore, site, markdown, Quartz, canon, or editorial paths³contract_strictness‘Ù:schema, contract, protocol, CultCache, or CultNet surfaces³editorial_restraint‘Ù,canon/source discipline under prose pressure±evidence_appetite‘Ù4tests, smoke checks, artifacts, or verifier keywords±experimental_heat‘Ù>prototype, experiment, scaffold, or research-workbench signals«guardedness‘Ù*authority and mutation risk demand caution°initiative_drive‘Ù>work pressure and experiment heat increase heartbeat readiness¸interpersona_orientation‘Ù4UI, web, Tauri, component, DOM, or Aquarium surfaces­mood_lability‘Ù4risk, urgency, and churn make reactions swing harder®novelty_hunger‘Ù/experimental and aesthetic exploration pressure³production_pressure‘Ù fix/deploy/auth/queue/CI signals´protocol_intolerance‘Ù@strict contract surfaces imply low tolerance for ad hoc mutation¯rumination_bias‘Ù@state hygiene and consolidation favor distillation before action±runtime_proximity‘Ù&Unity/editor/runtime/provider surfaces°sensory_salience‘Ù:motion, visuals, rendered outputs, scenes, or UI organisms®social_surface‘Ù;Discord, auth, accounts, public site, or service boundaries¯source_fidelity‘Ù1state maps, lore/canon, or runtime truth surfaces¯speech_pressure‘Ù%public speech or user-facing surfaces­state_hygiene‘Ù1state, map, evidence, handoff, or memory surfaces±temporal_pressure‘Ù9service, runtime, queue, or live-provider timing pressure½verification_environment_need‘ÙCclaims need runtime, editor, browser, provider, or service receiptsË?ð<EFBFBD>”§cultlib¿epiphany.repo_trajectory_report´2026-06-10T06:25:27ZÆP4žÙ"epiphany.repo_trajectory_report.v0§cultlibÙÐCultLib is currently steered by worldbuilding_depth recent 0.00, current 0.50, delta 0.00; material_grounding recent 0.00, current 0.40, delta 0.00; historical_dialectic recent 0.00, current 0.50, delta 0.00.ÙÁCultLib behaves like a cult_protocol_storage + gamecult_web_lore_ops + unity_runtime_body workspace that has been moving toward systems_formalization, worldbuilding_depth, historical_dialectic.ÜÙ#Retire stale Libby proof-loop stateºAdd Unity CultCache StudioÙ'Seed Libby social interpretation biasesÙ Add CultCache geometry documentsÙ2Prove geometry documents replicate through CultNetÙ.Align geometry document fingerprints with RustÙ4Exercise geometry chunks through CultMesh node stateÙ%Document geometry state over CultMeshÙ$Verify Rust geometry payload interopÙ-Bring language packages into CultLib monorepoÙ$Document CultLib language workspacesÙ$Add Kotlin CultMesh client substrateÙ Add Kotlin Eve surface contractsÙ)Add Kotlin Eve media observation contractÙ"Page CultCache MessagePack recordsÙ#Add CultMesh streaming mode surfaceÙ!Add C# CultMesh streaming surfaceÙ,Keep Huginn runtime out of CultCache packageÜÙ,Keep Huginn runtime out of CultCache packageÙ!Add C# CultMesh streaming surfaceÙ#Add CultMesh streaming mode surfaceÙ"Page CultCache MessagePack recordsÙ)Add Kotlin Eve media observation contractÙ Add Kotlin Eve surface contractsÙ$Add Kotlin CultMesh client substrateÙ$Document CultLib language workspacesÙ-Bring language packages into CultLib monorepoÙ$Verify Rust geometry payload interopÙ%Document geometry state over CultMeshÙ4Exercise geometry chunks through CultMesh node stateÙ.Align geometry document fingerprints with RustÙ2Prove geometry documents replicate through CultNetÙ Add CultCache geometry documentsÙ'Seed Libby social interpretation biasesºAdd Unity CultCache StudioÙ#Retire stale Libby proof-loop stateš•©AGENTS.md¨doctrineÍþÂÚþ# AGENTS.md
## Repository Guidance
- Refrain from commenting on current changes in README files unless the user explicitly asks for that commentary.
- Treat clean API surface as a core project priority.
- Favor developer ergonomics in public APIs, examples, naming, defaults, and documentation.
- Prefer interfaces and behaviors that are predictable, easy to discover, and easy to integrate correctly.
- Keep public abstractions small and coherent; avoid exposing internal workflow complexity through the API when it can be encapsulated.
- When adding documentation or examples, optimize for practical usage by downstream developers.
- When proposing or implementing changes, consider how they affect usability, readability, and maintenance for library consumers.
•©README.md¦readmeÍ2÷ÃÚ#(# CultLib
CultLib is a set of reusable C# libraries for game backends, game-adjacent services, and Unity-integrated tooling, including a declarative runtime UI composition framework for Unity.
The libraries cover three main areas:
- logging primitives and implementations
- a typed in-memory cache with pluggable persistence
- LiteNetLib-based networking with encrypted credential exchange and signed session tokens
- CultMesh distributed realtime database and simulation-consensus primitives
- typed geometry domain/chunk documents for distributed CSG and LOD streaming
- declarative Unity UI composition and reflective runtime inspector tooling
## Which Package Do I Want?
If the job is shared game state, start here before inventing a fourth drawer
and pretending the label makes it furniture.
| Job | Start With | Owns | Use When | Do Not Use It For |
| --- | --- | --- | --- | --- |
| Local typed state | `GameCult.Caching` / CultCache | Document identity, schema compatibility, record keys, indexes, globals, and local persistence | You need a typed cache, file-compatible save data, local reactive reads, or a stable domain document model | Peer discovery, transport security, shard routing, or mesh consensus |
| Procedural geometry state | `GameCult.Geometry` | CultCache-native domain trees, LOD build requests, selected-cut diagnostics, and chunk artifact payloads | Rust, Unity, or remote workers need to share CSG/LOD geometry and graph metadata as typed state | Transport policy, peer discovery, or gameplay authority |
| Network transport and database plumbing | `GameCult.Networking` / CultNet | LiteNetLib transport, authentication, schema-v0 wire contracts, shard authority, raw document replication, snapshots, and subscriptions | You need a client/server pipe, login/session flow, schema discovery, or a low-level distributed CultCache lane | Gameplay-facing mesh ergonomics, Verse policy, mod branches, or simulation consensus composition |
| Distributed realtime gameplay state | `GameCult.Mesh` / CultMesh | Public mesh entrypoints, Verse discovery, peer exchange, shard replication defaults, authority leases, client prediction, and witness consensus | You want the game to treat clients and servers as one reactive database for persistent state, input state, and simulation facts | A tiny local-only tool, a bare transport client, or a storage format contract |
| Realtime media/frame streams | `GameCult.Mesh` / CultMesh streaming mode | Stream identity, authority, clock metadata, body transport negotiation, frame cursors, and backpressure state | Audio/video/tensor frames need to move between runtimes through shared memory, GPU handles, platform buffers, or CultCache page refs | Durable document mutation, mesh consensus facts, or pretending inline bytes are zero-copy |
Quick rule:
- Choose CultCache when the problem is "how do I model and persist typed state?"
- Choose GameCult.Geometry when the problem is "how do geometry workers share
domain trees, LOD build requests, and mesh chunks as typed state?"
- Choose CultNet when the problem is "how do peers exchange authenticated,
schema-aware database messages?"
- Choose CultMesh when the problem is "how does a game join a Verse and share
realtime state across a mesh?"
- Choose CultMesh streaming mode when the problem is "how do these runtimes move
audio/video frames while the mesh owns identity, clocks, cursors, and pressure?"
CultMesh sits on CultNet, and CultNet distributes CultCache documents. That is
the stack. If a design needs another peer-to-peer category, first check whether
it is really Verse policy, peer exchange, or shard authority wearing a fake
mustache.
If you want the smallest durable "open node -> put typed doc -> get typed doc"
path, start with
[`src/GameCult.Mesh/docs/durable-node-quickstart.md`](src/GameCult.Mesh/docs/durable-node-quickstart.md).
If you want the lower-level "typed local document -> raw wire document ->
mesh/runtime watch surface" handoff, follow it with
[`src/GameCult.Mesh/docs/typed-document-path.md`](src/GameCult.Mesh/docs/typed-document-path.md).
## Repository Scope
The solution includes:
- `GameCult.Logging`: common logging abstraction plus console and file implementations
- `GameCult.Caching`: `DatabaseEntry`-based cache, indexes, global entries, and backing-store abstractions
- `GameCult.Caching.MessagePack`: MessagePack-backed persistence for the cache
- `GameCult.Caching.NewtonsoftJson`: Newtonsoft.Json-backed persistence for the cache
- `GameCult.Caching.MessagePack.Generator`: source generator for MessagePack formatters for cache models
- `GameCult.Caching.MessagePack.Analyzers`: packaging project that delivers the generator to consuming projects
- `GameCult.Geometry`: CultCache-native geometry domain, selected-cut, and chunk artifact documents for VibeGeometry/Fensalir-style pipelines
- `GameCult.Networking`: encrypted login/register/verify flows and message dispatch over LiteNetLib
- `GameCult.Mesh`: CultMesh package home for distributed realtime database, shard replication, client prediction, Verse discovery, and mesh witness consensus
- `GameCult.Caching.Tests`: NUnit tests for cache and backing-store behavior
- `GameCult.Networking.Tests`: NUnit tests for networking behavior
- `GameCult.Unity`: CultUI, a Unity runtime UI composition framework with reflective inspector generation, prefab-backed field resolvers, reusable controls, and a demo project packaged for UPM-style consumption
- `packages/cultcache-ts`: TypeScript CultCache with MessagePack persistence and inspector tooling
- `packages/cultnet-ts`: TypeScript CultNet schema-v0 contracts, framing, discovery, raw document replication, and interop tests
- `packages/cultmesh-ts`: TypeScript CultMesh local node and mesh catalog surface for local runtimes such as VoidBot
- `packages/cultcache-rs`: Rust CultCache and derive macro
- `packages/cultnet-rs`: Rust CultNet contracts, framing, discovery, and interop peer
## Repository Layout
```text
package.json
src/
GameCult.Logging/
GameCult.Caching/
GameCult.Caching.MessagePack/
GameCult.Caching.NewtonsoftJson/
GameCult.Caching.MessagePack.Generator/
GameCult.Caching.MessagePack.Analyzers/
GameCult.Geometry/
GameCult.Networking/
GameCult.Mesh/
GameCult.Unity/
tests/
GameCult.Caching.Tests/
GameCult.Geometry.Tests/
GameCult.Networking.Tests/
packages/
cultcache-ts/
cultnet-ts/
cultmesh-ts/
cultcache-rs/
cultnet-rs/
```
## Build
```powershell
dotnet build CultLib.sln
```
## Test
```powershell
dotnet test CultLib.sln
```
TypeScript package tests:
```powershell
npm test --workspace packages/cultcache-ts
npm test --workspace packages/cultnet-ts
npm run test:interop --workspace packages/cultnet-ts
npm test --workspace packages/cultmesh-ts
```
Rust package tests:
```powershell
cargo test --manifest-path packages/cultcache-rs/Cargo.toml
cargo test --manifest-path packages/cultnet-rs/Cargo.toml
```
## Common Concepts
### `DatabaseEntry`
The cache-centric libraries revolve around `DatabaseEntry`. Every entry has a stable `Guid` identifier and can optionally:
- expose a human-readable name through `INamedEntry`
- participate in generic indexes registered at runtime
- be treated as a global singleton entry through `GlobalSettingsAttribute`
Typical entry shape:
```csharp
using GameCult.Caching;
public class ItemData : DatabaseEntry, INamedEntry
{
public string Name = string.Empty;
public int Value;
public string EntryName
{
get => Name;
set => Name = value;
}
}
```
### `CultCache` and Backing Stores
`CultCache` is an in-memory index over `DatabaseEntry` objects. It can operate entirely in memory, or it can be attached to one or more backing stores for persistence and synchronization.
- the cache is the query surface
- backing stores are persistence adapters
- indexes and name maps are maintained inside the cache, not inside the store
### Important: Multiple Backing Stores
When multiple backing stores are added, behavior depends on how they are registered.
If a store is added with domain types:
```csharp
cache.AddBackingStore(playerStore, typeof(PlayerData));
cache.AddBackingStore(settingsStore, typeof(AppSettings));
```
then that store becomes the direct persistence target for those types.
If a store is added without domain types:
```csharp
cache.AddBackingStore(primaryStore);
cache.AddBackingStore(mirrorStore);
```
then the first generic store acts as the primary writable store for non-domain-specific entries. Additional generic stores subscribe to the existing stores and mirror their change events.
Implications:
- order matters for generic stores
- `AddAsync` writes to the type-specific store when one exists
- otherwise `AddAsync` writes to the first generic store
- later generic stores do not become co-primaries; they mirror earlier s•¿notes/operator-interventions.md­documentationÍñÂÚñ# Operator Interventions
## 2026-05-08
- External Codex session from `E:\Projects\EpiphanyAgent` added
`src/GameCult.Caching/Contracts/cultcache-persistence-format.md`.
- Intent: write down the next canonical CultCache persistence-format design in
the C# source-of-truth repo before Rust/TS implementations harden the wrong
shape.
- Existing unrelated worktree changes in `src/GameCult.Networking/PlayerData.cs`
and `src/GameCult.Unity/Assets/UI/Default Resolver.asset` were left alone.
•Ù.research/cultnet-distributed-database/swim.pdf¨researchÎÍÃÚ&¼%PDF-1.2
%����
35 0 obj
<<
/Linearized 1
/O 37
/H [ 5122 1132 ]
/L 133069
/E 57214
/N 10
/T 132251
>>
endobj
xref
35 235
0000000016 00000 n
0000005049 00000 n
0000006254 00000 n
0000006560 00000 n
0000006625 00000 n
0000006733 00000 n
0000006839 00000 n
0000006928 00000 n
0000006949 00000 n
0000010404 00000 n
0000011912 00000 n
0000012019 00000 n
0000012133 00000 n
0000013163 00000 n
0000013184 00000 n
0000013270 00000 n
0000014189 00000 n
0000014210 00000 n
0000015099 00000 n
0000015120 00000 n
0000016100 00000 n
0000016121 00000 n
0000017102 00000 n
0000017123 00000 n
0000018048 00000 n
0000018069 00000 n
0000018962 00000 n
0000018983 00000 n
0000019160 00000 n
0000019376 00000 n
0000019596 00000 n
0000019775 00000 n
0000020079 00000 n
0000020316 00000 n
0000020565 00000 n
0000020804 00000 n
0000021022 00000 n
0000021309 00000 n
0000021545 00000 n
0000021802 00000 n
0000022011 00000 n
0000022242 00000 n
0000022541 00000 n
0000022803 00000 n
0000023071 00000 n
0000023314 00000 n
0000023507 00000 n
0000023741 00000 n
0000023918 00000 n
0000024149 00000 n
0000024370 00000 n
0000024616 00000 n
0000024867 00000 n
0000025088 00000 n
0000025292 00000 n
0000025507 00000 n
0000025716 00000 n
0000025929 00000 n
0000026147 00000 n
0000026371 00000 n
0000026595 00000 n
0000026816 00000 n
0000026994 00000 n
0000027221 00000 n
0000027434 00000 n
0000027662 00000 n
0000027942 00000 n
0000028200 00000 n
0000028467 00000 n
0000028709 00000 n
0000028982 00000 n
0000029259 00000 n
0000029466 00000 n
0000029722 00000 n
0000030047 00000 n
0000030301 00000 n
0000030538 00000 n
0000030776 00000 n
0000031062 00000 n
0000031265 00000 n
0000031503 00000 n
0000031755 00000 n
0000031947 00000 n
0000032198 00000 n
0000032449 00000 n
0000032686 00000 n
0000032934 00000 n
0000033141 00000 n
0000033445 00000 n
0000033644 00000 n
0000033858 00000 n
0000034127 00000 n
0000034339 00000 n
0000034560 00000 n
0000034775 00000 n
0000034982 00000 n
0000035194 00000 n
0000035416 00000 n
0000035673 00000 n
0000035949 00000 n
0000036236 00000 n
0000036520 00000 n
0000036754 00000 n
0000037025 00000 n
0000037312 00000 n
0000037500 00000 n
0000037755 00000 n
0000037977 00000 n
0000038211 00000 n
0000038499 00000 n
0000038710 00000 n
0000038921 00000 n
0000039188 00000 n
0000039405 00000 n
0000039619 00000 n
0000039839 00000 n
0000040059 00000 n
0000040320 00000 n
0000040563 00000 n
0000040805 00000 n
0000041093 00000 n
0000041327 00000 n
0000041588 00000 n
0000041846 00000 n
0000042141 00000 n
0000042404 00000 n
0000042658 00000 n
0000042860 00000 n
0000043103 00000 n
0000043356 00000 n
0000043625 00000 n
0000043694 00000 n
0000043763 00000 n
0000043832 00000 n
0000043901 00000 n
0000043970 00000 n
0000044039 00000 n
0000044108 00000 n
0000044177 00000 n
0000044246 00000 n
0000044315 00000 n
0000044384 00000 n
0000044453 00000 n
0000044522 00000 n
0000044591 00000 n
0000044660 00000 n
0000044729 00000 n
0000044798 00000 n
0000044867 00000 n
0000044936 00000 n
0000045005 00000 n
0000045074 00000 n
0000045143 00000 n
0000045212 00000 n
0000045281 00000 n
0000045350 00000 n
0000045419 00000 n
0000045488 00000 n
0000045557 00000 n
0000045626 00000 n
0000045695 00000 n
0000045765 00000 n
0000045835 00000 n
0000045905 00000 n
0000045975 00000 n
0000046045 00000 n
0000046115 00000 n
0000046185 00000 n
0000046254 00000 n
0000046323 00000 n
0000046392 00000 n
0000046461 00000 n
0000046530 00000 n
0000046599 00000 n
0000046668 00000 n
0000046737 00000 n
0000046806 00000 n
0000046875 00000 n
0000046944 00000 n
0000047013 00000 n
0000047082 00000 n
0000047151 00000 n
0000047401 00000 n
0000047662 00000 n
0000047901 00000 n
0000048126 00000 n
0000048349 00000 n
0000048575 00000 n
0000048822 00000 n
0000049044 00000 n
0000049277 00000 n
0000049515 00000 n
0000049741 00000 n
0000050062 00000 n
0000050309 00000 n
0000050544 00000 n
0000050777 00000 n
0000051018 00000 n
0000051204 00000 n
0000051424 00000 n
0000051681 00000 n
0000051915 00000 n
0000052162 00000 n
0000052408 00000 n
0000052653 00000 n
0000052885 00000 n
0000053111 00000 n
0000053312 00000 n
0000053381 00000 n
0000053450 00000 n
0000053519 00000 n
0000053588 00000 n
0000053657 00000 n
0000053726 00000 n
0000053795 00000 n
0000053864 00000 n
0000053933 00000 n
0000054002 00000 n
0000054071 00000 n
0000054140 00000 n
0000054209 00000 n
0000054488 00000 n
0000054762 00000 n
0000054987 00000 n
0000055221 00000 n
0000055431 00000 n
0000055668 00000 n
0000055737 00000 n
0000055806 00000 n
0000055875 00000 n
0000055944 00000 n
0000056013 00000 n
0000056082 00000 n
0000005122 00000 n
0000006231 00000 n
trailer
<<
/Size 270
/Info 33 0 R
/Root 36 0 R
/Prev 132241
/ID[<a9908ad4a73d5c022ff9fd1cda9a81d2><a9908ad4a73d5c022ff9fd1cda9a81d2>]
>>
startxref
0
%%EOF
36 0 obj
<<
/Type /Catalog
/Pages 32 0 R
/Metadata 34 0 R
>>
endobj
268 0 obj
<< /S 2996 /Filter /FlateDecode /Length 269 0 R >>
stream
H�b```f`ab�``�\� ��@1�'p�5u L���MY�8XED.21_�|��k×®_�`�������QRJFZNV^UQIAEYW]CSK[�HO��P�������������������������;���? 0(8$4,<"2*:&6.>!1)9%5-=#3+�07/����������������������������������I��L�6}��Y��Ì<C2BD>7��E��,]�|��U�׬]�~��M��lݶ}��]���ݷ���C��=v���S�Ϝ=w���K��\�v���[��ܽw���G��<�d�`gafd�������UPTRVQÕ‡xJW��)cTO99�@=�G�S9���:D����'�)F&v6N��,/^�y [J��
*��0���9�x������/D��A�=v���s��RC���gt�᫂�I��9؆��@q����2�|��ñœ…™ï¿½ñ•”¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½v�������������������������������������㓟�ꫦ����F��Z;�&��L���;e��S���֕����ße��};��=~����O;}��]��^�y����7.]���έ{g��~�����O89����bfyJ�HNUAQZYE
�)=CdO;(�=E(��rr� P<u�
��?bM��X��31�00
jt�0*�Ǣ`cÅ‚>V�j~�P����+zY%�F/���gC}�b`q�[2'`kq=+���KH?���f�(��Ö‚P�kKϳ&�� 0�710�00�g`>��������0���8�CiÞ†'� �
,��w`����w�kx��*��x�Ӱ�Ga�Q�
�y��<8����7� v�m4��p�w"'w�M���| �xs/��V8�߰������<���(�ʿ����τ��q?���p���8?�=ދܼ�.
�+����������$`CX<�g��s�υG<��N8+t�o��Ky
��<�x�kp���^��<�r_�1wpaY�2G �X��_
endstream
endobj
269 0 obj
1021
endobj
37 0 obj
<<
/Type /Page
/MediaBox [ 0 0 612 792 ]
/Parent 32 0 R
/Resources << /ProcSet [ /PDF /ImageB /Text ] /Font << /R13 49 0 R /A 43 0 R /R8 45 0 R /R7 39 0 R /R6 40 0 R >> >>
/Contents [ 47 0 R 50 0 R 52 0 R 54 0 R 56 0 R 58 0 R 60 0 R 267 0 R ]
/CropBox [ 0 0 612 792 ]
/Rotate 0
>>
endobj
38 0 obj
<<
/Type /Encoding
/Differences [ 2 /fi ]
>>
endobj
39 0 obj
<<
/Type /Font
/Name /R7
/Subtype /Type1
/BaseFont /Times-Italic
/Encoding 38 0 R
>>
endobj
40 0 obj
<<
/Type /Font
/Name /R6
/Subtype /Type1
/BaseFont /Times-Bold
/Encoding 41 0 R
>>
endobj
41 0 obj
<<
/Type /Encoding
/Differences [ 2 /fi 150 /endash 173 /hyphen ]
>>
endobj
42 0 obj
952
endobj
43 0 obj
<<
/Type /Font
/Name /A
/Subtype /Type3
/Encoding 44 0 R
/FirstChar 0
/LastChar 204
/CharProcs << /a203 129 0 R /a202 130 0 R /a201 128 0 R /a200 126 0 R /a199 127 0 R
/a198 131 0 R /a195 135 0 R /a194 136 0 R /a193 137 0 R /a192 134 0 R
/a190 132 0 R /a189 133 0 R /a187 125 0 R /a186 117 0 R /a185 118 0 R
/a183 116 0 R /a182 114 0 R /a181 115 0 R /a180 119 0 R /a179 123 0 R
/a178 124 0 R /a177 122 0 R /a176 120 0 R /a175 121 0 R /a174 138 0 R
/a173 155 0 R /a171 156 0 R /a170 154 0 R /a169 152 0 R /a168 153 0 R
/a167 157 0 R /a166 161 0 R /a165 162 0 R /a164 163 0 R /a163 160 0 R
/a162 158 0 R /a161 159 0 R /a160 151 0 R /a154 142 0 R /a152 143 0 R
/a151 141 0 R /a150 139 0 R /a148 140 0 R /a147 144 0 R /a146 148 0 R
/a145 149 0 R /a143 113 0 R /a141 147 0 R /a139 145 0 R /a138 146 0 R
/a137 150 0 R /a135 79 0 R /a133 80 0 R /a132 78 0 R /a131 76 0 R
/a130 77 0 R /a128 81 0 R /a127 85 0 R /a124 86 0 R /a121 75 0 R
/a119 84 0 R /a118 82 0 R /a117 83 0 R /a115 87 0 R /a113 67 0 R
/a111 68 0 R /a108 66 0 R /a106 63 0 R /a104 62 0 R /a101 65 0 R
/a100 64 0 R /a99 72 0 R /a98 73 0 R /a97 74 0 R /a96 69 0 R /a94 70 0 R
/a93 71 0 R /a91 103 0 R /a89 104 0 R /a87 105 0 R /a85 88 0 R /a83 101 0 R
/a82 102 0 R /a80 106 0 R /a78 110 0 R /a76 111 0 R /a73 112 0 R
/a72 109 0 R /a71 107 0 R /a69 108 0 R /a68 100 0 R /a67 92 0 R
/a65 93 0 R /a64 91 0 R /a62 89 0 R /a61 90 0 R /a59 94 0 R /a58 98 0 R
/a57 99 0 R /a55 97 0 R /a54 95 0 R /a52 96 0 R /a50 233 0 R /a48 232 0 R
/a45 164 0 R /a43 231 0 R /a41 229 0 R /a40 230 0 R /a38 234 0 R
/a35 238 0 R /a31 239 0 R /a29 240 0 R /a27 237 0 R /a26 235 0 R
/a25 236 0 R /a23 228 0 R /a22 219 0 R /a20 220 0 R /a18 218 0 R
/a16 216 0 R /a15 217 0 R /a14 221 0 R /a13 225 0 R /a11 226 0 R
/a10 227 0 R /a9 224 0 R /a8 222 0 R /a7 223 0 R /a6 241 0 R /a5 258 0 R
/a4 259 0 R /a3 257 0 R /a2 255 0 R /a1 256 0 R /a0 260 0 R /a66 264 0 R
/a42 265 0 R /a36 266 0 R /a39 263 0 R /a47 261 0 R /a92 262 0 R
/a77 254 0 R /a125 245 0 R /a44 246 0 R /a63 244 0 R /•Ù0research/cultnet-distributed-database/summary.md¨researchÍ!!ÂÚ!!# CultNet Distributed Database Research Summary
Purpose: ground CultNet's distributed realtime database design in prior art
before adding more machinery. The goal is a coherent local-first mesh database
over CultCache, not a hand-rolled distributed-systems costume party.
## Sources Stored Here
- `hashgraph-swirlds-tr-2016-01.pdf`
- Source: <https://www.swirlds.com/downloads/SWIRLDS-TR-2016-01.pdf>
- Topic: gossip-about-gossip, virtual voting, fair ordering, asynchronous BFT.
- `raft-extended.html`
- Source: <https://yygcode.com/papers/consensus-raft-extended-version.html>
- Topic: understandable consensus, leader election, log replication, safety.
- `raft-extended.pdf`
- Source: <https://web.stanford.edu/~ouster/cgi-bin/papers/raft-extended.pdf>
- Topic: canonical Raft paper copy.
- `dynamo-amazon-science.html`
- Source: <https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store>
- Topic: Dynamo publication page and abstract.
- `dynamo-sosp2007.pdf`
- Source: <https://web.stanford.edu/class/cs244/papers/amazon-dynamo-sosp2007.pdf>
- Topic: highly available key-value store, consistent hashing, versioning,
quorums, hinted handoff, anti-entropy.
- `swim.pdf`
- Source: <https://www.cs.cornell.edu/projects/quicksilver/public_pdfs/SWIM.pdf>
- Topic: scalable weakly consistent process-group membership.
- `rethinkdb-changefeeds.html`
- Source: <https://rethinkdb.com/docs/changefeeds/java/>
- Topic: realtime query/changefeed ergonomics.
- `firebase-realtime-offline.html`
- Source: <https://firebase.google.com/docs/database/web/offline-capabilities>
- Topic: offline behavior, presence, server-side disconnect operations.
- `crdt-arxiv-1805.06358.html`
- Source: <https://arxiv.org/abs/1805.06358>
- Topic: conflict-free replicated data types and deterministic convergence.
## Design Takeaways
### RethinkDB
Keep: changefeeds as the product feel. Subscribers should receive document
changes continuously, with enough old/new context to render, reconcile, or
debug. Point subscriptions and filtered subscriptions are both first-class.
CultNet implication: database subscriptions should be explicit schema-v0
messages. The server should stream raw document changes that clients can apply
through the same CultCache reconciliation path as snapshots.
### Firebase Realtime Database
Keep: realtime sync and local/offline ergonomics. Presence and disconnect
behavior are database features, not application afterthoughts.
Defer: full offline writes. CultNet should not pretend arbitrary offline
multi-writer changes merge safely. Offline/local-first behavior needs declared
per-document conflict policy.
CultNet implication: add presence/disconnect records later as ordinary
CultCache documents with server authority, not as hidden transport state.
### Raft
Keep: the understandable authority model. One leader/primary owns ordered
writes for a shard. Decompose the problem into ownership, log/mutation
replication, and safety.
Defer: full automatic leader election and replicated logs until shard catalogs
and explicit epochs exist.
CultNet implication: the current primary-shard policy is the correct first
foundation. Every write should either hit the primary, be forwarded to the
primary, or fail with routing information.
### Dynamo
Keep: partitioning, replication metadata, vector-ish causality, hinted recovery,
anti-entropy, and application-visible conflicts.
Reject for now: "always writeable" semantics. That is attractive, expensive,
and easy to lie about.
CultNet implication: shard descriptors should grow into a shard catalog with
owner runtime id, epoch, schema/key ranges, and later replica/preference-list
metadata. Conflicts must surface as data, not disappear into last-writer-wins
unless a document explicitly chose that policy.
### SWIM
Keep: gossip-shaped membership once the mesh grows beyond a small static
cluster. SWIM separates failure detection from membership dissemination and
keeps per-node message load stable.
Defer: membership implementation until there is a shard catalog to disseminate.
CultNet implication: do not build peer discovery as a side-channel registry.
When it arrives, it should update membership and shard-catalog state together.
### CRDTs
Keep: CRDTs for documents whose merge law is explicit and deterministic.
Reject: generic automatic merge for arbitrary domain objects. That is a
language cop with a nicer hat.
CultNet implication: CRDT support belongs in schema metadata or document
contract metadata. A document type can opt into a known merge strategy; the
default distributed write policy remains primary authority.
### Hashgraph
Keep: gossip-about-gossip as an idea for compact event provenance and possible
fair ordering research. Virtual voting is interesting when every member sees
the same gossip history.
Reject for now: adopting hashgraph consensus as CultNet's core. The public
ledger/crypto smell is not the main issue; the issue is that CultNet does not
currently need asynchronous Byzantine total ordering to become a good mesh
database. Dragging that in now would make the machine harder to explain.
CultNet implication: if we later need decentralized event ordering, use a
dedicated design pass. Do not smuggle hashgraph metadata into ordinary document
replication because it sounds powerful.
## Current CultNet Direction
The coherent path is:
1. Primary-shard authority.
2. Explicit schema-v0 snapshot, put, delete, subscribe, unsubscribe, and change
messages.
3. Shard catalog exchange with owner runtime id and epoch.
4. Optional forwarding from non-owner nodes to owners.
5. Membership/failure detection, likely SWIM-shaped.
6. Replication and failover, likely Raft-shaped per shard.
7. Optional CRDT policies for document types that deserve offline multi-writer
semantics.
8. Optional gossip-history research if fair decentralized ordering becomes a
real requirement.
## Live Invariants
- CultCache owns document identity, schema compatibility, local indexes, and
reconciliation.
- CultNet owns transport, shard authority, subscriptions, and remote mutation
delivery.
- Raw wire records must pass through `CultNetDatabase` before mutating local
cache state.
- A write without authority is rejected or explicitly forwarded. It is never
silently applied.
- Realtime change streams publish domain changes, not storage implementation
details.
- Conflict policy must be declared before conflicting writes are accepted.
## Current Cut
Shard catalog exchange now exists:
- `cultnet.shard_catalog_request.v0`
- `cultnet.shard_catalog_response.v0`
- per-shard id, owner runtime id, epoch, schema ids, key prefix/range
- stale epoch rejection on writes
- routing error that tells clients where the primary lives when known
- injectable non-primary write forwarding policy
- concrete schema-v0 write forwarder for `cultnet://host:port` primary
endpoints
- in-memory per-shard mutation logs and catch-up by last seen sequence
- wire-level shard mutation log catch-up with raw put/delete entries
- replica-side application of shard log responses with epoch checks, gap
rejection, and idempotent replay
- background shard log replicator plus schema-v0 fetcher for primary endpoints
- restart-safe replica cursor store with a local MessagePack file
implementation
- client authority scopes for predicted local input documents
- predicted/reconciled change events for client-side prediction
- simulation witness observations and deterministic consensus candidates
- schema-v0 simulation observation and candidate messages
- reactive observation hub for witness gossip and consensus candidates
- server-side observation bridge for observation messages and candidate replies
## Next Cut
Build durable authoritative mutation logs:
- persist per-shard primary logs
- define the snapshot fallback boundary for compacted history
- return explicit resync-required responses when requested history is gone
- then add simulation-frame rollback and resimulation helpers on top of
predicted input streams
- add peer-to-peer fanout for observation gossip and candidate propagation
That is the next foundation needed before membership, Raft-style failover, or
CRDT policy work can be honest.
•Ù7research/cultnet-distributed-database/raft-extended.pdf¨researchÎÁZÃÚ:4%PDF-1.4
%����
120 0 obj
<</Linearized 1/L 573786/O 122/E 41955/N 18/T 571265/H [ 936 728]>>
endobj
xref
120 32
0000000016 00000 n
0000001664 00000 n
0000001730 00000 n
0000001974 00000 n
0000002007 00000 n
0000002076 00000 n
0000002185 00000 n
0000010658 00000 n
0000011226 00000 n
0000011907 00000 n
0000011999 00000 n
0000017965 00000 n
0000018414 00000 n
0000018854 00000 n
0000018897 00000 n
0000020780 00000 n
0000022482 00000 n
0000022579 00000 n
0000030097 00000 n
0000030533 00000 n
0000031055 00000 n
0000032778 00000 n
0000034750 00000 n
0000034850 00000 n
0000035314 00000 n
0000035533 00000 n
0000035774 00000 n
0000035967 00000 n
0000037616 00000 n
0000039244 00000 n
0000040734 00000 n
0000000936 00000 n
trailer
<</Size 152/Root 121 0 R/Info 119 0 R/ID[<D415EDDF6CA1C8AFECD96DA0FBCD5900><B91CCE8B95D3604C92CAC3A9BCDD9A0D>]/Prev 571253>>
startxref
0
%%EOF
151 0 obj
<</Filter/FlateDecode/I 818/Length 645/S 605>>stream
h�b```�W � �|   ��������qI�C��Wؓ�a6O�_Õº(�e���Z-*�w���ۅ�%YU|M��<9�j��R�/Y3l^p��G�a�s����I�X�9D <bé’±ij�7��R�8�4`�R�O�v�I�B&Wf��o�u� h$>!����{��(�)� ��pl�S�X�4ڢ�I�k�^��>n����y� ��T�*w�=����B
c�5�]@%�ii� q
����
.�JS�<��qLP���Ri8�`7��+P���� >
~��I.z淀G!��N���@��
ͼ����` ���E�ݥon�Ð<EFBFBD>X����>JJ..����&.@06NKK��2������
e��@UՆF�9�@ ��iHj1�
@cBA5� 2qq```!l��R�(ALB*4a`["�e�8l�"?�2�
,G�Z�0X�E�5��`X��q����-��� � �b.0:H:ވ���q@���1��{�
e��_�Ú2�0amT� � }@��,�%�9l��X6p3�b��(�^���q |c3��6
���o� kNǰ[0�`,�tz�p�A����� �b x$�S�d�g�7�+�5�u9��P(�.@��
�
endstream
endobj
121 0 obj
<</Metadata 118 0 R/Pages 117 0 R/Type/Catalog>>
endobj
122 0 obj
<</Contents[134 0 R 135 0 R 140 0 R 141 0 R 147 0 R 148 0 R 149 0 R 150 0 R]/CropBox[0 0 612 792]/MediaBox[0 0 612 792]/Parent 117 0 R/Resources<</ExtGState 123 0 R/Font 124 0 R/ProcSet[/PDF/ImageB/Text]>>/Rotate 0/Type/Page>>
endobj
123 0 obj
<</R7 133 0 R>>
endobj
124 0 obj
<</R10 128 0 R/R12 139 0 R/R14 146 0 R/R8 132 0 R>>
endobj
125 0 obj
<</BaseEncoding/WinAnsiEncoding/Differences[2/fi/fl 30/grave 39/quoteright]/Type/Encoding>>
endobj
126 0 obj
<</Filter/FlateDecode/Length 8386/Subtype/Type1C>>stream
x��xyXS����!9�uhK���&i���y�S�qFEe!Ì<EFBFBD>@$�����$@�<� ��,�V����mk��}����no�������?0{���z�Z�z�fN���}4^�!��#[�6�C����¢�O�g�����5#�Z4���`�S��Yw�G>{id� ��/����jd
�F�xy|s��y�eru\xh�R�xժU��jɿV$�RExh��
�G�4J&���(H�K�e�T%�l���c�6ɜm{�$ۤ1Ҹ�(�{�Ѩ� �[x�4F!}S"��D��G$� W��b $�@�B.
�IUAR9�0O"��E�+�oI�B��K�2IxLPT|0s=�=D����dx=���e
�"(.\����]��ۨ T2�*��D�w˂�o��� �QH�R����T��G���(y\�� ��пn�'����GIc�2����?��ˣ�c���v���p�B�`<��� ��M�D7*0�W����_ ����I�Y���%n�b�r{�������TG��A����H����� ����u ��բ5��f�Y���� ����K,\��l��eˋ�^�� ^#���� wb51��G�!f��~b6�I�!��7��[�Ab.�Ml"�>�fb>�K� ?b ���J,"�����b���I,#v� 7�mb7���C�$�.���Np -A��s��x�x��DD��b1��///�D�#^&��+D"1�B� W�DH��,���'�p���}����)���=Â…d:�
@�|n�sQ��=����'&O�L
��?���y�єuSN�0��"�b�������|��ʫyy��|'~�+_��J�T��
� ������6y��i��h��q�O���k�:#mFی�3n��V������b����]r��7_�z�Ì›2л�~��9`��3���E��5A"���Bo�$�e U��N�%Z��� |�mܾ�ers,�
A\RÚ<EFBFBD>lJ��Q,�C6B
5r��FO;���1t}�.�_�����X�+F9$��k�3(
�����2�I�v����6@
�F�#) �tI>̦`�[�R�(�&� ���?*i�6�#Ҙ��{& �\���qy��RU�sY�F��:&q�Hxi�E?����-�1G`G�U��J�?���2Z������á<EFBFBD><EFBFBD>]���}��"Pl���A8�|�$m���@#�dCxv�g�0���
5%G��'l�7��ke��c����~ҥ�;C�3��l5$��ު�v�l*�qz�l�F�I�Q�[�I�"T�S�!�U�����8N�uoTSt��lg�KUImŋ���u�M�NK��F�*�9�{0�ީ��_T4�M^ �A�H�Ѵ�����a����\l
pyQ���dí<EFBFBD>€ï¿½b.C#������~��y�>ze�\$B._����w��"8u��e�N�|i.��8��m��M��$nQߞ�zK��>�v���g��L0d*��4����T
z%��/7U�R!�����P�C�Q��<�e���^�S��m"�2�aQ���\��-�)x��s`•��O�a���e��c��~*L�$pM �)� h�4���>E��*�2j����M �������+�r��W>�ԕ]wD�B7��q��s(� ���5|κx&!�W�i��wR5]�T��цVz�e�{�a�ө��bz�8� ��n6����^�n�xo$�t�w��Ü<C2BD>�+�Rp1�Qk8(��W� ΂/n����q^��)�+!L�$�om�7_��;�Q���a�!��f��n��n} ����qZ@�.�J��c�!�zN=�x��QQU�t�z���1�O���B�BW�X����_��\Ț�����`s�n}:�7�"!~m�z�ڥ������臞��D�N4�X��MW���ũ8�yQ���-�E}O�%��=��[��GW�>��/e��RpR��h�V@�+�s�s�S��x*OG�|����`|�Ks�����/�f�|��1�Ų_�q�v
%A���,K+�(�[=� }�� �!-^����$�ٔp
\�(����jK��1�ǰ�wc�x6�����k�2�"�(�뀒s}A`�ќ��U
*(��c`�YVR5P���fh�Z]�,�6s��66�� �S��b1U�̈́�sF��y�dÑ‚-c��E�ل�wU�]����Z��c���Ʒ����89@��H�c4�J�,h����l�"����S
���RQ���dT����-��Å<EFBFBD>���+2=�@|��]%�B�vx�?� �0�� SÖ¨5k��� ӧ����2} VꙄP�6;�._k�)g��
M�j\BCu��^��U;��
W}0�7ހ��3�t�����j�Ƽ)4C����U���Ǻ���yk�?�pDGb�D "e��Q�j�(�.�Fw�JF�,\sI~.F��V �Y5��*L�
�.�����mo����5u�A���8x�9|I
CK�^��^V+�Ғ��#>�7>*Rs�3�2��l��Jp�Bo��{�ъÙ<EFBFBD> �|�����h`�j�
p �zB�e��=T
7
�r�&�Z� 9Om>l�/:��<��m6:�fÆ ����~'��S_����` .�Y� �)��p����l��h7N�'������d�D�TS�� �<â—œA��&c�4�����E�n�E�+��\�=�&Ò•&�%�0D�����'?q�J
�.;�g��36�B��� n��>0c�mQ���z�y,�+ )k�����
�: &tx^@�n�v��S��i%�zu���|�1܊}�N+N�ӹ���A1�-!ymI���2�P
d�Z�^�
����cb^|��В'3��O���w�z�D����$�-?딣���U��}��΂$��dk�.eE�xO^��lw�̽c�<���R�O�[.�U��q��X�=k���6PC�!�0� f�b�5�
�q�*5w�Q6�!��̆��p���yi��´BP�[|�4�(47�1�������mk�O����Ò<EFBFBD>
��*�cm5DNI�՚��"CGry,�x�<�/zWn�L�z�!Û<>%F�4&�^�� V@e� �"ե�flf����(�;��*��P�� �@kFIV (�����|�k����*2T{C���,�H[
@����"��K����
��
��{��APy,������v7\����>�s>��;N��OҦ�k�4Z�'ϙ�&Mm|��;��o�uS:kj�����fqVqv0S
�սC
1^�=$Z�;)�4>Q"(���@�����3WD<���ʄ>�vlG7^B 1�G��&�(���@���������:��j\�0���36�xd*�,��欲4��ў�h Z.���#ӥ"��t��O�{�I�;��Q�w(������k�7�s
!�j���t�c2p�N�і,�ia�z@��ʋn�,8�6ly�۸Q �<j� ���I������
-Ñ<EFBFBD>�Y%&�))�qQ��.Q�Ȏ�Û<EFBFBD>X-��� M1� �u-��A3��VE5#2�8�F�R
,�f��!~_�I�M�&`ª՘��d>�,�e�| ?c��#k�é¹<EFBFBD>y�!�0&��L��3�z�Sţ�dԓ����_�/��f��}����N=':�<<�MAl�]����Wc���5r����$�*5Ia��ꕀ��ݤ+���$�e�>*��w�gs����Utynb
󘾂K@�Ԫ �����lS�Q�jB$,4Y3,cr�f���Ւ���$�Eق�4[t�Oy(#�5J��hml�J L 5�P�2'�'�MLTD��{��8�.��YZKKj�L�ߦ9M��l�5���%T�e֢]B���>��CJą�E�Ju�W�k.l9���;1���'@�
�C�W-����-���Z�KԔ�'�+CYt%�o��G}pޥ��n��
p���[�]&G�H;����\�Uq?N��0L� fjU+M���9'Հ�(z6 �GOp�\�h��5�跡 _�o�1%뒄ڤ�ToܹD\XM�ɱ��L�<��[|�f�������ob�8y��πr��FV�S���
�7���3�rR��2��Y�~���0î$a2Y�S��Ul8*F�Hi��4�G.�c�k��{��� ݎ��]����јbЫ� 1�Z��!|r���?;t�C�zG*�3���sh=��!��.��Zb��fX>EEvgZ3l�mq(�M�/�Q>���*n?����Fw�<�l:ɳ�{0dL�o˜VHv��yp%�o���]�i����6�e]��n�5CS\kt��A���ᇎ�]�* ������%H��p��a{�p��,�z�v����Վ5�:�e�?FV��~4�]�������}����%����'���n7Wt��P;
�Aug�9ߖ�M�S��ʰ����� k98��a���ï<EFBFBD><EFBFBD>�z����j\s�n�����q�2U�����*�!�RT[f�T����3�~��r�Xql@Zh�jU���}.ؤO������Rp����)���q��g0�'��a8��ϪȮ�����˭�W�upL�-o
X�8gE�W�� ���,I3�7�W�;y��������\=4�-wD&jsr��1���:��:�S��j�&?hhd���߳�Lij`�9�H /��F�`��En
��b�Z�dJ���%�Î<EFBFBD>P�җ�zPB�������QwKE+�Wۘ�����qÅ 8�:�����y��e�.]������h��@Sz���B��i�6㇦!@}Ù¦ Ý·>q��k�1[������;[ꓢ�E�ae� ���7��w�vy��,ه��7o���_oX:+{�^��rlJ�G��L�@�)�f�K�D=����'<7Þ<EFBFBD>������'S<jr�#��~0��:��: �3+�?��A�'���ND��s໦�
�
������9Ö<EFBFBD>�pN���;����@�� �"F�$�f��3���x����M
����[����/����𔸴��B9�p�s�����Ҏ�G#�dJݗ������
e�����g&��=�:&��Ì�y�%1��(,�oi.kkh��'@��+�Iڷ��I�&.︊��V����R60uߌ�kZ<���ra*�Â<EFBFBD>˹<�Q?�)�����4|d�OB`�J�f��Ũw��D[�N~�����X��
73�& =9Lxe���b ��4$�l�oe
�`#w��0�A�G{��\��ɪ��M5�M�ʚ<��v�;h��p��jb$�~L
� �^��'ܮ�(^�5$�(��H�� �R��`��~��~[z�h��XW��v�MK���)>"%��q��<7{N��悧� �����M�u���~�����68�Q�u_=~L�!j��Ɩ����b�G�Ƽ�j������O�sWJu�j��9�\[N �'ှ@���q�D�A��`0'U�k��ɸ骓�#{����K��kb�O�#���*�cA3����?�I�����L�<��~���(��s$�ju
�@�rMpg�
ׄ�qj���Uc�N��J�c<p���8V�T��D�'M �����������9A��t:�Ð<EFBFBD>��7/#7373/SXd�3�t*5Õ”"Ri`���e<������[ׯ6 m��\Ì¡E6tD���.���.-U�MA3����ȕ�Ĥ�KF�1�0�z�����c�MC�����\�������`6�p��f�&G��vEm���V~B�j�bޓ��e2sY��|4>b�k$���*���u���+�Ә���l;Ơ�[�S���tk���x4�^Z�[:FAo#��SJ�y���{0IjØš$k�#�����_��{>�Rd �(O�F�G�4~q'�؄�n-a��Js���]EeY��K`���ƅq�pۣ�ғXi��qlf�a=} ݘl;�ß’Wļ�'��Q!c�f6�-�F�Ք�
v� ���l�����@u&",1���L�)m�G��\�`���V9����bJ���}F�If#cs�su��G��������y����/�7x� Ó®t���\oU��S#���8��dp�j�t:�AL�z }%@�MVAjuv�0��d�������CE^�.Im_Ó¶J Ah&=�X�1�(Zm5���[�T��t��k>�mg�Z@���F�pl�'�Z�Y���Li��&����vjd5žχN���C�ܿ_Ѕ����M\�rASn����c�}gEG�
�y��G� 1#U�*S��B����x��rU���QW��O�/G�q��!�@6 N���q�Q1uqM-�uM-���b����7�:F�p�`:��G��uej�t)��RMe
��oq��&G�/0��?�씞�����W�7��/��ԩ���a��p/3�Z�Uh��)��r����"e!^!�n�!�'�o F���fX�^�
��j�M�+�a\ݵ�0�~*����b��#�=�^Z{�������sm���
i�N�9�����MzH��a
���>��q�qCoce ���`��wP�n�f���?���D� �MD�-g=��wt��Ϝm}�kVYze��2� �zso
����$������~ab�h)�Y���a���c�
�D<ΓsM��-. 7�0ݪ+KoJ���Z��� ���[@�С+�פ���"4��P?�o�‚�z������o;~��+�#kT���s1���0�•Ù8research/cultnet-distributed-database/raft-extended.html¨research̓IÃÚ#(<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="utf-8" />
<title>In Search of an Understandable Consensus Algorithm (Extended Version)</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Diego Ongaro and John Ousterhout, Stanford University" />
<link rel="stylesheet" type="text/css" href="/themes/readtheorg/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="/themes/readtheorg/styles/readtheorg/css/readtheorg.css"/>
<script src="/themes/jquery/2.1.3/jquery.min.js"></script>
<script src="/themes/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/themes/readtheorg/styles/lib/js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="/themes/readtheorg/styles/readtheorg/js/readtheorg.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="../index.html"> UP </a>
|
<a accesskey="H" href="paperlist.html"> HOME </a>
</div><div id="content">
<h1 class="title">In Search of an Understandable Consensus Algorithm (Extended Version)</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgf960eb7">DECLARATION</a></li>
<li><a href="#orgd05d3d0">Abstract</a></li>
<li><a href="#orge9839bb">1. Introduction</a></li>
<li><a href="#orgae8bb96">2. Replicated state machines</a></li>
<li><a href="#org1fe8017">3. What's wrong with Paxos?</a></li>
<li><a href="#orgfc9c6b4">4. Designing for understandability</a></li>
<li><a href="#orge3d8f10">5. The Raft consensus algorithm</a>
<ul>
<li><a href="#org752f98e">5.1. Raft basics</a></li>
<li><a href="#org291797f">5.2. Leader election</a></li>
<li><a href="#org44bb0a6">5.3. Log replication</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-orgf960eb7" class="outline-2">
<h2 id="orgf960eb7">DECLARATION</h2>
<div class="outline-text-2" id="text-orgf960eb7">
<p>
This page is the In Search of an Understandable Consensus Algorithm
(Extended Version) paper. Original Paper Link
is: <a href="https://raft.github.io/raft.pdf">https://raft.github.io/raft.pdf</a>
</p>
<p>
In Search of an Understandable Consensus Algorithm<br />
(Extended Version)<br />
Diego Ongaro and John Ousterhout<br />
Stanford University
</p>
</div>
</div>
<div id="outline-container-orgd05d3d0" class="outline-2">
<h2 id="orgd05d3d0">Abstract</h2>
<div class="outline-text-2" id="text-orgd05d3d0">
<p>
Raft is a consensus algorithm for managing a replicated log. It produces a
result equivalent to (multi-)Paxos, and it is as efficient as Paxos, but its
structure is different from Paxos; this makes Raft more understandable than
Paxos and also provides a better foundation for building practical systems.
In order to enhance understandability, Raft separates the key elements of
consensus, such as leader election, log replication, and safety, and it enforces
a stronger degree of coherency to reduce the number of states that must be
considered. Results from a user study demonstrate that Raft is easier for
students to learn than Paxos. Raft also includes a new mechanism for changing
the cluster membership, which uses overlapping majorities to guarantee safety.
</p>
</div>
</div>
<div id="outline-container-orge9839bb" class="outline-2">
<h2 id="orge9839bb"><span class="section-number-2">1</span> Introduction</h2>
<div class="outline-text-2" id="text-1">
<p>
Consensus algorithms allow a collection of machines to work as a coherent group
that can survive the failures of some of its members. Because of this, they play
a key role in building reliable large-scale software systems. Paxos [15, 16] has
dominated the discussion of consensus algorithms over the last decade: most
implementations of consensus are based on Paxos or influenced by it, and Paxos
has become the primary vehicle used to teach students about consensus.
</p>
<p>
Unfortunately, Paxos is quite difficult to understand, in spite of numerous
attempts to make it more approachable. Furthermore, its architecture requires
complex changes to support practical systems. As a result, both system builders
and students struggle with Paxos.
</p>
<p>
After struggling with Paxos ourselves, we set out to find a new consensus
algorithm that could provide a better foundation for system building and
education. Our approach was unusual in that our primary goal was
understandability: could we define a consensus algorithm for practical systems
and describe it in a way that is significantly easier to learn than Paxos?
Furthermore, we wanted the algorithm to facilitate the development of intuitions
that are essential for system builders. It was important not just for the
algorithm to work, but for it to be obvious why it works.
</p>
<p>
The result of this work is a consensus algorithm called Raft. In designing Raft
we applied specific techniques to improve understandability,including
decomposition (Raft separates leader election, log replication, and safety) and
This tech report is an extended version of [32]; additional material is noted
with a gray bar in the margin. Published May 20, 2014. state space reduction
(relative to Paxos, Raft reduces the degree of nondeterminism and the ways
servers can be inconsistent with each other). A user study with 43 students
at two universities shows that Raft is significantly easier to understand than
Paxos: after learning both algorithms, 33 of these students were able to answer
questions about Raft better than questions about Paxos.
</p>
<p>
Raft is similar in many ways to existing consensus algorithms (most notably, Oki
and Liskov's Viewstamped Replication [29, 22]), but it has several novel
features:
</p>
<p>
1/. Strong leader: Raft uses a stronger form of leadership than other consensus
algorithms. For example, log entries only flow from the leader to other servers.
This simplifies the management of the replicated log and makes Raft easier to
understand.
</p>
<p>
2/. Leader election: Raft uses randomized timers to elect leaders. This adds
only a small amount of mechanism to the heartbeats already required for any
consensus algorithm, while resolving conflicts simply and rapidly.
</p>
<p>
3/. Membership changes: Raft's mechanism for changing the set of servers in the
cluster uses a new joint consensus approach where the majorities of two
different configurations overlap during transitions. This allows the cluster to
continue operating normally during configuration changes.
</p>
<p>
We believe that Raft is superior to Paxos and other consensus algorithms, both
for educational purposes and as a foundation for implementation. It is simpler
and more understandable than other algorithms; it is described completely enough
to meet the needs of a practical system; it has several open-source
implementations and is used by several companies; its safety properties have
been formally specified and proven; and its efficiency is comparable to other
algorithms.
</p>
<p>
The remainder of the paper introduces the replicated state machine problem
(Section 2), discusses the strengths and weaknesses of Paxos (Section 3),
describes our general approach to understandability (Section 4), presents the
Raft consensus algorithm (Sections 5–8), evaluates Raft (Section 9), and
discusses related work (Section 10).
</p>
</div>
</div>
<div id="outline-container-orgae8bb96" class="outline-2">
<h2 id="orgae8bb96"><span class="section-number-2">2</span> Replicated state machines</h2>
<div class="outline-text-2" id="text-2">
<p>
Consensus algorithms typically arise in the context of replicated state machines
[37]. In this approach, state machines on a collection of servers compute
identical copies of the same state and can continue operating even if some of
the servers are down. Replicated state machines are used to solve a variety of
fault tolerance problems in distributed systems. For example, large-scale
systems that have a single cluster leader, such as GFS [8], HDFS [38], and
RAMCloud [33], typically use a separate replicated state machine to manage
leader election and store configuration information that must survive leader
crashes. Examples of replicated state machines include Chubby [2] and
ZooKeeper [11].
</p>
<div id="org1bdf0c5" class="figure">
<p><img src="img/raft-figure1.jpg" alt="raft-figure1.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>Replicated state machine architecture. The consensus algorithm manages a replicated log containing state machine commands from clients. The state machines process identical sequences of commands from the logs, so they produce the same outputs.</p>
</div>
<p>
Replicated state machines are typically implemented using a replicated log, as
shown in Figure 1. Each server s•Ù9research/cultnet-distributed-database/dynamo-sosp2007.pdf¨researchÎ
½tÃÚ-%PDF-1.3
%����
101 0 obj <</Linearized 1/L 839680/O 103/E 178543/N 16/T 837612/H [ 876 568]>>
endobj
xref
101 29
0000000016 00000 n
0000001444 00000 n
0000001525 00000 n
0000001727 00000 n
0000001863 00000 n
0000002320 00000 n
0000002760 00000 n
0000003302 00000 n
0000004074 00000 n
0000004327 00000 n
0000004601 00000 n
0000004869 00000 n
0000004982 00000 n
0000005229 00000 n
0000006383 00000 n
0000006918 00000 n
0000007199 00000 n
0000008288 00000 n
0000009351 00000 n
0000010473 00000 n
0000011530 00000 n
0000012622 00000 n
0000013685 00000 n
0000014725 00000 n
0000035703 00000 n
0000072079 00000 n
0000119236 00000 n
0000150351 00000 n
0000000876 00000 n
trailer
<</Size 130/Prev 837600/Root 102 0 R/Info 100 0 R/ID[<C1C715AA2D20C7C67D8119B9678A17C0><E970E0B0A53567468202B6FED23F070B>]>>
startxref
0
%%EOF
129 0 obj<</Length 474/Filter/FlateDecode/I 620/L 604/S 432/T 546>>stream
x�b```�� � � �  cc`a�������Ȣ���ë<EFBFBD>ºï¿½ï¿½ï¿½qņ�lݬ|;��Y.wh�+x��6ljl��z����UH�1(�q��NOh��ql29��jr((Y��Q�!2Ù§,+��,���$Y&_y �&IB�Hh�
��f T�
dL2����2�qr�I���ި}�!2�
f���,w��@5* � ��]��s�X���B����� N�Zv+�DG���GG��K(��I9 J 1���3�)�0�ll���4�*�,a �V� �1b`���2 ���
v4�@`�����X ,�� �0�!�qc'�{�� �3�epb8�������c�O,��?��}���2&�#��K �:�I�13|�T�pIU��1��O�`�'��1T1X
����J {��s��}�P�V+ ���@���sd?T�K����z
endstream
endobj
102 0 obj<</Metadata 99 0 R/Pages 96 0 R/Type/Catalog/PageLabels 94 0 R>>
endobj
103 0 obj<</CropBox[0 0 612 792]/Parent 97 0 R/Contents[114 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R]/Rotate 0/MediaBox[0 0 612 792]/Thumb 78 0 R/Resources 104 0 R/Type/Page>>
endobj
104 0 obj<</Font<</TT2 105 0 R/TT4 106 0 R/TT6 107 0 R/TT8 108 0 R/TT10 115 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 112 0 R>>>>
endobj
105 0 obj<</Subtype/TrueType/FontDescriptor 109 0 R/LastChar 146/Widths[278 0 0 0 0 0 0 0 333 333 0 0 0 333 0 278 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 722 0 0 722 667 0 0 722 0 0 722 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 0 278 889 611 611 0 0 389 556 333 611 556 0 556 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278]/BaseFont/OGOFEC+Arial-BoldMT/FirstChar 32/Encoding/WinAnsiEncoding/Type/Font>>
endobj
106 0 obj<</Subtype/TrueType/FontDescriptor 113 0 R/LastChar 122/Widths[278 0 0 0 0 0 0 0 333 333 0 0 278 333 278 0 556 556 556 556 556 556 556 556 556 556 0 0 0 0 0 0 0 667 0 722 722 0 0 778 722 0 500 667 556 833 0 0 667 0 0 667 0 0 667 944 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500]/BaseFont/OGOFFD+ArialMT/FirstChar 32/Encoding/WinAnsiEncoding/Type/Font>>
endobj
107 0 obj<</Subtype/TrueType/FontDescriptor 110 0 R/LastChar 146/Widths[250 0 0 0 0 0 833 0 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 0 0 570 0 500 0 722 667 722 722 667 611 778 778 389 0 778 667 944 722 778 611 0 722 556 667 722 722 1000 722 722 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333]/BaseFont/OGOFGF+TimesNewRomanPS-BoldMT/FirstChar 32/Encoding/WinAnsiEncoding/Type/Font>>
endobj
108 0 obj<</Subtype/TrueType/FontDescriptor 111 0 R/LastChar 248/Widths[250 0 408 0 500 833 0 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 0 0 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 444 444 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500]/BaseFont/OGOFHH+TimesNewRomanPSMT/FirstChar 32/Encoding/WinAnsiEncoding/Type/Font>>
endobj
109 0 obj<</StemV 138/FontName/OGOFEC+Arial-BoldMT/FontStretch/Normal/FontFile2 124 0 R/FontWeight 700/Flags 32/Descent -211/FontBBox[-628 -376 2000 1010]/Ascent 905/FontFamily(Arial)/CapHeight 718/XHeight 515/Type/FontDescriptor/ItalicAngle 0>>
endobj
110 0 obj<</StemV 136/FontName/OGOFGF+TimesNewRomanPS-BoldMT/FontStretch/Normal/FontFile2 125 0 R/FontWeight 700/Flags 34/Descent -216/FontBBox[-558 -307 2000 1026]/Ascent 891/FontFamily(Times New Roman)/CapHeight 656/XHeight -546/Type/FontDescriptor/ItalicAngle 0>>
endobj
111 0 obj<</StemV 82/FontName/OGOFHH+TimesNewRomanPSMT/FontStretch/Normal/FontFile2 126 0 R/FontWeight 400/Flags 34/Descent -216/FontBBox[-568 -307 2000 1007]/Ascent 891/FontFamily(Times New Roman)/CapHeight 656/XHeight -546/Type/FontDescriptor/ItalicAngle 0>>
endobj
112 0 obj<</OPM 1/HT/Default/OP false/BG2/Default/op false/Type/ExtGState/SA false/UCR2/Default/SM 0.02>>
endobj
113 0 obj<</StemV 88/FontName/OGOFFD+ArialMT/FontStretch/Normal/FontFile2 128 0 R/FontWeight 400/Flags 32/Descent -211/FontBBox[-665 -325 2000 1006]/Ascent 905/FontFamily(Arial)/CapHeight 718/XHeight 515/Type/FontDescriptor/ItalicAngle 0>>
endobj
114 0 obj<</Length 1083/Filter/FlateDecode>>stream
H�lUێ�6}�W�#X�D��'' l��@ �â\��ٕ(W��n>#_�!)��E�X�™9g�\��q��A�>��m� �v�JkH�/UCU�Q��J���m�Jh�$h{Y��WŇ�� �Ǩ~j�,��6g.{�� �*^�3�g[3N��o �/`̃1h��e�<X�@�WZ�'�(g-N'�W;��x���̣��/�4�eU`���F�1GU#����;�q_�p�J��qV�rB׼X\əO�#Z}�/s�Oܠ�c��&9�)M k�ifW��Am�Rq}����>A7���ɾ;J|�^��0+Z$]����3�����QZ�oˆ ��>�_xd�n�Ӹ��*G�?Ť��A�ڹ�h����XU�
��JZ��η��ꮸQAK�"D� ��!�xͯ%̰L%��j�.��z���1K-��Ѯ�!�|ܶ�U��O�����wlHEE��2L��g���$�E/�sTњ�^:����F��@� n`�RF3�#dT��Y��x�ӆ��eJ�{�C��.�li0K�����#FoP��2"`�{4s�,��4Q�tGg�E
O�"<J`,���X�/Ί̃�y'��l��� R�][%�fms�,F�Y.Χ�%���b7�+�gN&DObrÜ¿3rT���ß<>H<^:2c���ž�S���9��F��^)-�������ELTa ��v���k�E�����ETTk�A˃�{�qe`/����$��.�;�����i<F�I�f�:���/�k�3�Y��
z�") A�@Ԋ[K3�VC�
-��'���bv#X����8 =Q�KO�zn��4��r��ї�4�g�C�ZLgi�{�96���sr�g Q����>r��Y���3�kl�ڒ^`�.�� Z.�s���NJ؋A(#v�`��ϒ�
�xZ��]�R�'_Cm��CQ���ܙ�[[e����[�S�'a�5VQ��N�6ќ�rp����$+��5��% ��X�Λ2���X����-�Õ<EFBFBD>G �4�bJm�6��XÖ©U������G�&}dzy�u|����B�i���u)l >a
p���x�K�0Nr�Į��o�`�D6_�C\�(q��?�V!o
endstream
endobj
115 0 obj<</Subtype/TrueType/FontDescriptor 116 0 R/LastChar 148/Widths[250 0 0 0 0 0 0 0 0 0 0 0 250 333 250 278 500 500 500 500 500 0 500 500 500 500 333 0 0 0 0 0 0 611 611 667 722 611 611 722 722 333 0 0 556 833 667 722 611 722 611 500 556 722 611 0 611 0 0 0 0 0 0 0 0 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 556 556]/BaseFont/OGOFJI+TimesNewRomanPS-ItalicMT/FirstChar 32/Encoding/WinAnsiEncoding/Type/Font>>
endobj
116 0 obj<</StemV 71.742/FontName/OGOFJI+TimesNewRomanPS-ItalicMT/FontStretch/Normal/FontFile2 127 0 R/FontWeight 400/Flags 98/Descent -216/FontBBox[-498 -307 1120 1023]/Ascent 891/FontFamily(Times New Roman)/CapHeight 656/XHeight -546/Type/FontDescriptor/ItalicAngle -15>>
endobj
117 0 obj<</Length 1018/Filter/FlateDecode>>stream
H�tU˖�6 ��+��ΉTQ/KËžz�l��w9Ypd�f"�>zx2���� ��x&�J6 \�e��Y�Iq�vY*%�z�E�n�j;O�L/��]��AQ�D����xرs���%�/𶳱�[��%N괈���>��I�W-��z|��d��M�hF�����N���-@�h|1�j��Lb`�<Rq��O�X�C��;-5Ya)��ޯ���EÝ”Ü<>)ɉ�M\#�>N2$��:��2����4�����p��<�����>R�$��mT�����Wd3��\��(��$�,�}��;��jԂ�k#�)s������V��T< 6�1p��+��+�)tD�F�O���Nz2�a(F�^[#W�"�0T�n���f�,�w� ���wk
�Pk{���ee��j.�(%-�
$߹]h3\����N=�o>I,argCE�m�/��(-a1{w7��vW�A�1��cj!�ȟk���ݟ����{z���P���۪XW�{]DSw�h��edh�0��N,| ���Kw7'>
��.v�1����������
`D���e�=���i10F,���7G�ˉ�� R��k��w�0�� �Q����!��ʟC� d��b�A{*^��"-���]5����6h�;�P�4/V
@���PÕ<EFBFBD>���=��V�$ ��Y��u�9��f���>�bOغN���xqդ� ��Ӵ2(o4nJ���y�g_��Q�wH�?��� ��1™A����� ��ò<EFBFBD>µ•��NJ���h���U�ۭ7/y��zb*N��g�7:�o�����3 fH������S� %q� f�o�{�*�&��7�O=�BfhDs���==��z�1��w>Y�A�FÙš
70�����Fh"�=^{���
� �9�v<�=>C8�� |�R
��qx`%�Z����m74�����v�S7���Ɖ�c�7�e�V�E���K`ÌŸ^���ޖè<EFBFBD>–��b�����t������ч&���B^X�g��B�j��I�*�*�`h�
endstream
endobj
118 0 obj<</Length 993/Filter/FlateDecode>>stream
H�|Uێ�6}�W�# �X��'OE(�� �>-�i[�,��E���Î<EFBFBD>�/�m��K�2g�3���æ§ï¿½AB���"��
Rh�7�HӴ���+�C��yb_y%{�)2��X���5��M�.YG�
���=܋�/O��Y�k�q��T�M�>�9�G$0���?(�2$�� �.��sr2&�p⹨���&��sJ����'��ٌG9s����q���rpR�A� 
1�b=�E�C���26�/������K*�SA�TL�ӊW�x�
x���^s�V
��#P����Gi�0ev�S�lk|YW�hdd����ؾT�YÛ<EFBFBD>��n���(�LF!�欀� �I�/+(r�2%
�1D/�A�.Q�_�����j�Մ8��Ƈi@f��u��9<2VUf�u.C�f*���7vp��|G&��3�u7��Y�'Ff��nV�ůC(}�%�ǜ���_�t��
�Q3�C��K�
�2 r���"�uP�]�-�D���`u0s���Ó<C2BD>�Q"UDI$�I�VkWUE�������"��~>�_������ �m)��YS *W}J��s�Í<>��v�f�Qgu�e����q�� [
:Azs֛�2=
�:4��5�� n�$�M�xܡs�7�|4Q]�G!�9p���'
�Y�q����8����� ��΀�'•Ù@research/cultnet-distributed-database/crdt-arxiv-1805.06358.html¨researchÍ´ÀÃÚ#(<!DOCTYPE html>
<html lang="en">
<head> <title>[1805.06358] Conflict-free Replicated Data Types (CRDTs)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="apple-touch-icon" sizes="180x180" href="/static/browse/0.3.4/images/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/browse/0.3.4/images/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/browse/0.3.4/images/icons/favicon-16x16.png">
<link rel="manifest" href="/static/browse/0.3.4/images/icons/site.webmanifest">
<link rel="mask-icon" href="/static/browse/0.3.4/images/icons/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" type="text/css" media="screen" href="/static/browse/0.3.4/css/arXiv.css?v=20260318" />
<link rel="stylesheet" type="text/css" media="print" href="/static/browse/0.3.4/css/arXiv-print.css?v=20200611" />
<link rel="stylesheet" type="text/css" media="screen" href="/static/browse/0.3.4/css/browse_search.css" />
<script language="javascript" src="/static/browse/0.3.4/js/accordion.js" ></script>
<script language="javascript" src="/static/browse/0.3.4/js/optin-modal.js?v=20250819"></script>
<link rel="canonical" href="https://arxiv.org/abs/1805.06358"/>
<meta name="description" content="Abstract page for arXiv paper 1805.06358: Conflict-free Replicated Data Types (CRDTs)"><meta property="og:type" content="website" />
<meta property="og:site_name" content="arXiv.org" />
<meta property="og:title" content="Conflict-free Replicated Data Types (CRDTs)" />
<meta property="og:url" content="https://arxiv.org/abs/1805.06358v1" />
<meta property="og:image" content="/static/browse/0.3.4/images/arxiv-logo-fb.png" />
<meta property="og:image:secure_url" content="/static/browse/0.3.4/images/arxiv-logo-fb.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="700" />
<meta property="og:image:alt" content="arXiv logo"/>
<meta property="og:description" content="A conflict-free replicated data type (CRDT) is an abstract data type, with a well defined interface, designed to be replicated at multiple processes and exhibiting the following properties: (1) any replica can be modified without coordinating with another replicas; (2) when any two replicas have received the same set of updates, they reach the same state, deterministically, by adopting mathematically sound rules to guarantee state convergence."/>
<meta name="twitter:site" content="@arxiv"/>
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Conflict-free Replicated Data Types (CRDTs)"/>
<meta name="twitter:description" content="A conflict-free replicated data type (CRDT) is an abstract data type, with a well defined interface, designed to be replicated at multiple processes and exhibiting the following properties: (1)..."/>
<meta name="twitter:image" content="https://static.arxiv.org/icons/twitter/arxiv-logo-twitter-square.png"/>
<meta name="twitter:image:alt" content="arXiv logo"/>
<link rel="stylesheet" media="screen" type="text/css" href="/static/browse/0.3.4/css/tooltip.css"/><link rel="stylesheet" media="screen" type="text/css" href="https://static.arxiv.org/js/bibex-dev/bibex.css?20200709"/> <script src="/static/browse/0.3.4/js/mathjaxToggle.min.js" type="text/javascript"></script> <script src="//code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/npm/dompurify@2.3.5/dist/purify.min.js"></script>
<script src="/static/browse/0.3.4/js/toggle-labs.js?20241022" type="text/javascript"></script>
<script src="/static/browse/0.3.4/js/cite.js" type="text/javascript"></script><meta name="citation_title" content="Conflict-free Replicated Data Types (CRDTs)" /><meta name="citation_author" content="Preguiça, Nuno" /><meta name="citation_author" content="Baquero, Carlos" /><meta name="citation_author" content="Shapiro, Marc" /><meta name="citation_doi" content="10.1007/978-3-319-63962-8\_185-1" /><meta name="citation_date" content="2018/05/16" /><meta name="citation_online_date" content="2018/05/16" /><meta name="citation_pdf_url" content="https://arxiv.org/pdf/1805.06358" /><meta name="citation_arxiv_id" content="1805.06358" /><meta name="citation_abstract" content="A conflict-free replicated data type (CRDT) is an abstract data type, with a well defined interface, designed to be replicated at multiple processes and exhibiting the following properties: (1) any replica can be modified without coordinating with another replicas; (2) when any two replicas have received the same set of updates, they reach the same state, deterministically, by adopting mathematically sound rules to guarantee state convergence." />
</head>
<body class="with-cu-identity">
<div class="flex-wrap-footer">
<header>
<a href="#content" class="is-sr-only">Skip to main content</a>
<!-- start desktop header -->
<div class="columns is-vcentered is-hidden-mobile" id="cu-identity">
<div class="column" id="cu-logo">
<a href="https://www.cornell.edu/"><img src="/static/browse/0.3.4/images/icons/cu/cornell-reduced-white-SMALL.svg" alt="Cornell University" /></a>
</div><!-- /from April 7 at 1:00 AM to May 29 at 21:40 --><!-- /from May 2 at 1:00 AM to May 5 at 9:45 AM --><div class="column banner-minimal">
<a href="https://tech.cornell.edu/arxiv/" target="_blank">Learn about arXiv becoming an independent nonprofit.</a>
</div><div class="column" id="support-ack">
<span id="support-ack-url">We gratefully acknowledge support from the Simons Foundation, <a href="https://info.arxiv.org/about/ourmembers.html">member institutions</a>, and all contributors.</span>
<a href="https://info.arxiv.org/about/donate.html" class="btn-header-donate">Donate</a>
</div>
</div>
<div id="header" class="is-hidden-mobile">
<a aria-hidden="true" tabindex="-1" href="/IgnoreMe"></a>
<div class="header-breadcrumbs is-hidden-mobile">
<a href="/"><img src="/static/browse/0.3.4/images/arxiv-logo-one-color-white.svg" alt="arxiv logo" style="height:40px;"/></a> <span>&gt;</span> <a href="/list/cs/recent">cs</a> <span>&gt;</span> arXiv:1805.06358
</div>
<div class="columns is-vcentered is-mobile" style="justify-content: flex-end;">
</div>
<div class="search-block level-right">
<form class="level-item mini-search" method="GET" action="https://arxiv.org/search">
<div class="field has-addons">
<div class="control">
<input class="input is-small" type="text" name="query" placeholder="Search..." aria-label="Search term or terms" />
<p class="help"><a href="https://info.arxiv.org/help">Help</a> | <a href="https://arxiv.org/search/advanced">Advanced Search</a></p>
</div>
<div class="control">
<div class="select is-small">
<select name="searchtype" aria-label="Field to search">
<option value="all" selected="selected">All fields</option>
<option value="title">Title</option>
<option value="author">Author</option>
<option value="abstract">Abstract</option>
<option value="comments">Comments</option>
<option value="journal_ref">Journal reference</option>
<option value="acm_class">ACM classification</option>
<option value="msc_class">MSC classification</option>
<option value="report_num">Report number</option>
<option value="paper_id">arXiv identifier</option>
<option value="doi">DOI</option>
<option value="orcid">ORCID</option>
<option value="author_id">arXiv author ID</option>
<option value="help">Help pages</option>
<option value="full_text">Full text</option>
</select>
</div>
</div>
<input type="hidden" name="source" value="header">
<button class="button is-small is-cul-darker">Search</button>
</div>
</form>
</div>
</div><!-- /end desktop header -->
<div class="mobile-header">
<div class="columns is-mobile">
<div class="column logo-arxiv"><a href="https://arxiv.org/"><img src="/static/browse/0.3.4/images/arxiv-logomark-small-white.svg" alt="arXiv logo" style="height:60px;" /></a></div>
<div class="column logo-cornell"><a href="https://www.cornell.edu/">
<picture>
<source media="(min-width: 501px)"
srcset="/static/browse/0.3.4/images/icons/cu/c•Ù@research/cultnet-distributed-database/dynamo-amazon-science.html¨researchκÃÚ @<!DOCTYPE html>
<html class="PublicationDetailPage" lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
<style data-cssvarsponyfill="true">
:root {
--primaryColor: #007cb6;
--secondaryColor: #e3661b;
--errorColor: #f44336;
--primaryTextColor: #232f3e;
--secondaryTextColor: #6c7778;
--headerBgColor: #ffffff;
--headerBorderColor: #EAEDED;
--headerMenuBgColor: #ffffff;
--headerMenuSubNavTextColor: #232f3e;
--aboveBgColor: #fafafa;
--belowBgColor: #fafafa;
--footerBgColor: #232f3e;
--footerTextColor: #ffffff;
--buttonBgColor: transparent;
--buttonTextColor: #007cb6;
--primaryHeadlineFont: "Ember Modern Display V1.1";
--secondaryHeadlineFont: "Ember Modern Display V1.1";
--tertiaryHeadlineFont: "Ember Modern Display V1.1";
--bodyFont: "Ember Modern Text V1.1";
--contentWidth: 1240px;
}
</style>
<link data-cssvarsponyfill="true" class="Webpack-css" rel="stylesheet" href="https://cdn.amazon.science/resource/0000016e-128c-d913-a16f-9edc0a5f0000/styleguide/All.min.050875a96933f2f14034b470d2acb341.css">
<style>.PromoRelatedContent a.Link {
text-decoration: none;
}</style>
<title>Dynamo: Amazon’s highly available key-value store - Amazon Science</title><link rel="canonical" href="https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store"><meta name="brightspot.contentId" content="0000017e-82c9-de9e-a7ff-c7df71830000">
<link rel="alternate" href="https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store" hreflang="x-default">
<link rel="alternate" href="https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store" hreflang="en"><link rel="apple-touch-icon" sizes="180x180"href="/apple-touch-icon.png"><link rel="icon" type="image/png"href="/favicon-32x32.png"><link rel="icon" type="image/png"href="/favicon-16x16.png">
<meta property="og:title" content="Dynamo: Amazon’s highly available key-value store">
<meta property="og:url" content="https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store">
<meta property="og:image" content="https://cdn.amazon.science/dims4/default/5e7b277/2147483647/strip/true/crop/1200x630+0+0/resize/1200x630!/quality/90/?url=https%3A%2F%2Famzn-science-production-science.s3.us-east-1.amazonaws.com%2Fscience%2F7c%2F4e%2Fd4e963d24f6c966def82a45d2bf1%2Famazon-science-og-image-squid.png">
<meta property="og:image:url" content="https://cdn.amazon.science/dims4/default/5e7b277/2147483647/strip/true/crop/1200x630+0+0/resize/1200x630!/quality/90/?url=https%3A%2F%2Famzn-science-production-science.s3.us-east-1.amazonaws.com%2Fscience%2F7c%2F4e%2Fd4e963d24f6c966def82a45d2bf1%2Famazon-science-og-image-squid.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:type" content="image/png">
<meta property="og:image:alt" content="Amazon Science OG image squid.png">
<meta property="og:description" content="Reliability at massive scale is one of the biggest challenges we face at Amazon.com, one of the largest e-commerce operations in the world; even the slightest outage has significant financial consequences and impacts customer trust. The Amazon.com platform, which provides services for many web…">
<meta property="og:site_name" content="Amazon Science">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:description" content="Reliability at massive scale is one of the biggest challenges we face at Amazon.com, one of the largest e-commerce operations in the world; even the slightest outage has significant financial consequences and impacts customer trust. The Amazon.com platform, which provides services for many web sites worldwide, is implemented on top of an infrastructure of tens of thousands of servers and network components"/>
<meta name="twitter:site" content="@AmazonScience"/>
<meta name="twitter:title" content="Dynamo: Amazon’s highly available key-value store"/>
<meta property="fb:app_id" content="1024652704536162">
<meta name="citation_title" content="Dynamo: Amazon’s highly available key-value store">
<meta name="citation_publication_date" content="2007">
<meta name="citation_author" content="Giuseppe DeCandia">
<meta name="citation_author" content="Deniz Hastorun">
<meta name="citation_author" content="Madan Jampani">
<meta name="citation_author" content="Gunavardhan Kakulapati">
<meta name="citation_author" content="Avinash Lakshman">
<meta name="citation_author" content="Alex Pilchin">
<meta name="citation_author" content="Swaminathan Sivasubramanian">
<meta name="citation_author" content="Peter Vosshall">
<meta name="citation_author" content="Werner Vogels ">
<meta name="citation_pdf_url" content="https://cdn.amazon.science/ac/1d/eb50c4064c538c8ac440ce6a1d91/dynamo-amazons-highly-available-key-value-store.pdf">
<script type="application/ld+json">{"@context":"http://schema.org","@type":"WebPage","url":"https://www.amazon.science/publications/dynamo-amazons-highly-available-key-value-store","author":[{"@context":"http://schema.org","@type":"Person","name":"Giuseppe DeCandia"},{"@context":"http://schema.org","@type":"Person","name":"Deniz Hastorun"},{"@context":"http://schema.org","@type":"Person","name":"Madan Jampani","url":"https://www.amazon.science/author/madan-jampani"},{"@context":"http://schema.org","@type":"Person","name":"Gunavardhan Kakulapati"},{"@context":"http://schema.org","@type":"Person","name":"Avinash Lakshman"},{"@context":"http://schema.org","@type":"Person","name":"Alex Pilchin"},{"@context":"http://schema.org","@type":"Person","affiliation":"Amazon Web Services","description":"VP, Agentic AI","image":{"@context":"http://schema.org","@type":"ImageObject","url":"https://cdn.amazon.science/53/cc/5d8e89ae448f9600d9625695c926/swaminathan-sivasubramanian.jpeg"},"jobTitle":"VP, Agentic AI","name":"Swaminathan Sivasubramanian","url":"https://www.amazon.science/author/swaminathan-sivasubramanian"},{"@context":"http://schema.org","@type":"Person","name":"Peter Vosshall"},{"@context":"http://schema.org","@type":"Person","name":"Werner Vogels ","url":"https://www.amazon.science/author/werner-vogels"}],"publisher":{"@type":"Organization","name":"Amazon Science","logo":{"@type":"ImageObject","url":"https://cdn.amazon.science/fb/1c/07d25693486eb3d6b49091864af7/amazonscience-squidink.svg"}},"articleSection":"Cloud and systems","keywords":["Database management","Amazon Web Services (AWS)","Amazon S3 "],"name":"Dynamo: Amazon’s highly available key-value store - Amazon Science"}</script>
<meta name="brightspot.cached" content="false">
<script src="https://cdn.amazon.science/resource/0000016e-128c-d913-a16f-9edc0a5f0000/webcomponents-loader/webcomponents-loader.2938a610ca02c611209b1a5ba2884385.js"></script>
<script>
/**
This allows us to load the IE polyfills via feature detection so that they do not load
needlessly in the browsers that do not need them. It also ensures they are loaded
non async so that they load before the rest of our JS.
*/
var head = document.getElementsByTagName('head')[0];
if (!window.CSS || !window.CSS.supports || !window.CSS.supports('--fake-var', 0)) {
var script = document.createElement('script');
script.setAttribute('src', "https://cdn.amazon.science/resource/0000016e-128c-d913-a16f-9edc0a5f0000/styleguide/util/IEPolyfills.min.b6baff9bf9bd064e5dd6b––³worldbuilding_depthËËË?àË‘Ùtsource:README.md # CultLib
CultLib is a set of reusable C# libraries for game backends, game-adjacent services...–²material_groundingËËË?Ù™™™™™šË‘Ù™source:research/cultnet-distributed-database/swim.pdf %PDF-1.2
%����
35 0 obj
<<
/Linearized 1
/O 37
/H [ 5122 1132 ]
/L 133069
/E 57214...–´historical_dialecticËËË?àË‘Ùtsource:README.md # CultLib
CultLib is a set of reusable C# libraries for game backends, game-adjacent services...–engineering_constraintËËË?¹™™™™™šË‘Ù«source:research/cultnet-distributed-database/dynamo-amazon-science.html <!DOCTYPE html>
<html class="PublicationDetailPage" lang="en">
<head>
<meta charset="...–³presentation_polishËËË?àË‘Ùtsource:README.md # CultLib
CultLib is a set of reusable C# libraries for game backends, game-adjacent services...–µsystems_formalizationË?¼j~ùÛ"ÑË?¼j~ùÛ"ÑË?Ù™™™™™šË“Ù'early: Add Kotlin Eve surface contractsÙ1recent: Add Kotlin Eve media observation contractÙtsource:README.md # CultLib
CultLib is a set of reusable C# libraries for game backends, game-adjacent services...•Ù9worldbuilding_depth recent 0.00, current 0.50, delta 0.00Ù8material_grounding recent 0.00, current 0.40, delta 0.00Ù:historical_dialectic recent 0.00, current 0.50, delta 0.00Ù9presentation_polish recent 0.00, current 0.50, delta 0.00Ù;systems_formalization recent 0.11, current 0.40, delta 0.00“Ù\Deepen the setting through causality, continuity, and consequence instead of ornament alone.ÙSTie lore and public writing back to economic, logistical, and material constraints.ÙaPreserve historical contradiction, ideology, and power relations as active explanatory machinery.’ÙuDo not let the repo drift into decorative lore or soft handwaving that ignores material and engineering consequences.ÙeDo not flatten historical struggle, ideology, or class contradiction into neutral encyclopedic paste.‘ÙkPresentation polish is welcome, but it should carry the same grounded causal weight as the lore beneath it.Ë?îffffff<EFBFBD>”´cultlib::coordinatorÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅæ<EFBFBD>Ù'epiphany.role_personality_projection.v0´cultlib::coordinator§cultlib«coordinator…±boundary_severityË¿µ<EFBFBD>$Ý/±churn_spiral_riskË¿ÀÄ›¥ãSø³contract_strictnessË?Ó333333³production_pressureË¿ÃS÷ÎÙ‡­state_hygieneË¿ÄzáG®{‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Self should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Self behavior to CultLib without storing project facts in role memory.‘ÙLCoordinate through typed authority and challenge pattern-completion theater.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”´cultlib::imaginationÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅú<EFBFBD>Ù'epiphany.role_personality_projection.v0´cultlib::imagination§cultlib«imagination…²aesthetic_appetiteË?±ë…¸Qì±churn_spiral_riskË¿ÀÄ›¥ãSø²content_canon_biasË?Ï\(õÂ<EFBFBD>\±experimental_heat˿ɇ+ J®novelty_hungerË¿Ã333333‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù”Imagination should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙSAdapt Imagination behavior to CultLib without storing project facts in role memory.‘ÙSTurn future-shape pressure into drafts and plans, not accidental active objectives.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”·cultlib::implementationÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅÚ<EFBFBD>Ù'epiphany.role_personality_projection.v0·cultlib::implementation§cultlib®implementation…®actuation_riskË?pbMÒñ©ü±churn_spiral_riskË¿ÀÄ›¥ãSø³consolidation_driveË¿ÉXbMÒò³contract_strictnessË?Ó333333³production_pressureË¿ÃS÷ÎÙ‡‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘ÙŽHands should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙMAdapt Hands behavior to CultLib without storing project facts in role memory.‘Ù5Leave reviewable diffs or explicit failure artifacts.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”±cultlib::modelingÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅÒ<EFBFBD>Ù'epiphany.role_personality_projection.v0±cultlib::modeling§cultlib¨modeling…²content_canon_biasË?Ï\(õÂ<EFBFBD>\³contract_strictnessË?Ó333333±runtime_proximityË?Ó333333¯source_fidelityË?»¥ãS÷ÎÙ­state_hygieneË¿ÄzáG®{‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù—Proprioception should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙVAdapt Proprioception behavior to CultLib without storing project facts in role memory.‘Ù-Build source-grounded maps before Hands cuts.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”°cultlib::personaÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅð<EFBFBD>Ù'epiphany.role_personality_projection.v0°cultlib::persona§cultlib§persona…³editorial_restraintË?Àƒn—<EFBFBD>P¸interpersona_orientationË?Ó333333°sensory_salienceË?Ìí‘hr°!®social_surfaceË¿Ê^5?|푯speech_pressureË¿Á‰7KƧð‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Persona should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙOAdapt Persona behavior to CultLib without storing project facts in role memory.‘ÙUSurface state through the public mouth without turning internals into chat endpoints.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”±cultlib::researchÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅÃ<EFBFBD>Ù'epiphany.role_personality_projection.v0±cultlib::research§cultlib¨research…®novelty_hungerË¿Ã333333´protocol_intoleranceË?ÊáG®zá±runtime_proximityË?Ó333333¯source_fidelityË?»¥ãS÷ÎÙ½verification_environment_needË?Áhr° Äœ‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Eyes should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Eyes behavior to CultLib without storing project facts in role memory.‘Ù%Find existing truth before invention.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history”µcultlib::verificationÙ$epiphany.role_personality_projection´2026-06-10T06:25:27ZÅæ<EFBFBD>Ù'epiphany.role_personality_projection.v0µcultlib::verification§cultlib¬verification…®actuation_riskË?pbMÒñ©ü²content_canon_biasË?Ï\(õÂ<EFBFBD>\±evidence_appetiteË?Å¡ÊÀƒo¸interpersona_orientationË?Ó333333½verification_environment_needË?Áhr° Äœ‚·cooldownMultiplierDeltaË¿œ¬1&éy´initiativeSpeedDeltaË¿À Ä›¥ãTƒ§anxietyË?؃n—<EFBFBD>P©curiosityË?×<EFBFBD>Oß;dZ§urgencyË?Ñë…¸Qì‘Ù<EFBFBD>Soul should treat CultLib as a repo with dominant pressures: contract_strictness:1.00, interpersona_orientation:1.00, runtime_proximity:1.00.‘ÙLAdapt Soul behavior to CultLib without storing project facts in role memory.‘Ù9Demand receipts from the environment that owns the claim.‘Ù\Projection is deterministic and confidence-scored at 1.00; Self must review before mutation.ÙVRole projection from repo terrain, commit history, and persisted doctrine for CultLib.–ÙIactuation_risk: runtime, auth, ops, or service writes can hurt real usersÙFaesthetic_appetite: visual, lore, rendered, or artifact-heavy surfacesÙHboundary_severity: auth, ops, workspace, protocol, or service boundariesÙ;burstiness: sampled commits compressed into few active daysÙBchurn_spiral_risk: large churn, experiment heat, and weak receiptsÙOconsolidation_drive: refactor/remove/extract keywords or deletion-heavy history