lex-coldstart 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sequel'
5
+ require 'sequel/extensions/migration'
6
+
7
+ RSpec.describe 'lex-coldstart local persistence' do
8
+ let(:db) { Sequel.sqlite }
9
+ let(:migration_path) do
10
+ File.join(__dir__, '..', 'lib', 'legion', 'extensions', 'coldstart', 'local_migrations')
11
+ end
12
+
13
+ before do
14
+ Sequel::TimestampMigrator.new(db, migration_path).run
15
+ stub_const('Legion::Data::Local', local_mod)
16
+ end
17
+
18
+ let(:local_mod) do
19
+ db_ref = db
20
+ Module.new do
21
+ define_singleton_method(:connected?) { true }
22
+ define_singleton_method(:connection) { db_ref }
23
+ end
24
+ end
25
+
26
+ def fresh_bootstrap
27
+ Legion::Extensions::Coldstart::Helpers::Bootstrap.new
28
+ end
29
+
30
+ describe 'save and load round-trip' do
31
+ it 'persists firmware_loaded after load_firmware' do
32
+ b = fresh_bootstrap
33
+ b.load_firmware
34
+ b2 = fresh_bootstrap
35
+ expect(b2.firmware_loaded).to be true
36
+ end
37
+
38
+ it 'persists observation_count after record_observation calls' do
39
+ b = fresh_bootstrap
40
+ b.begin_imprint
41
+ 3.times { b.record_observation }
42
+ b2 = fresh_bootstrap
43
+ expect(b2.observation_count).to eq(3)
44
+ end
45
+
46
+ it 'persists calibration_state as a symbol' do
47
+ b = fresh_bootstrap
48
+ b.begin_imprint
49
+ b2 = fresh_bootstrap
50
+ expect(b2.calibration_state).to eq(:imprinting)
51
+ end
52
+ end
53
+
54
+ describe 'started_at preservation (imprint window survives restarts)' do
55
+ it 'restores started_at so the 7-day window continues from the original time' do
56
+ b = fresh_bootstrap
57
+ b.begin_imprint
58
+ original_started_at = b.started_at
59
+
60
+ b2 = fresh_bootstrap
61
+ expect(b2.started_at).not_to be_nil
62
+ expect(b2.started_at.to_i).to be_within(1).of(original_started_at.to_i)
63
+ end
64
+
65
+ it 'reports imprint still active after reload within the 7-day window' do
66
+ b = fresh_bootstrap
67
+ b.begin_imprint
68
+ b2 = fresh_bootstrap
69
+ expect(b2.imprint_active?).to be true
70
+ end
71
+
72
+ it 'does not reset started_at to nil on second boot' do
73
+ b = fresh_bootstrap
74
+ b.begin_imprint
75
+ b2 = fresh_bootstrap
76
+ expect(b2.started_at).not_to be_nil
77
+ end
78
+ end
79
+
80
+ describe 'calibration_state symbol round-trip' do
81
+ %i[not_started imprinting baseline_established calibrated].each do |state|
82
+ it "persists and restores :#{state}" do
83
+ fresh_bootstrap
84
+ # Force the state directly through the DB to test all symbol variants
85
+ db[:bootstrap_state].where(id: 1).delete
86
+ db[:bootstrap_state].insert(
87
+ id: 1,
88
+ started_at_i: nil,
89
+ observation_count: 0,
90
+ firmware_loaded: false,
91
+ calibration_state: state.to_s
92
+ )
93
+ b2 = fresh_bootstrap
94
+ expect(b2.calibration_state).to eq(state)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe 'graceful no-op when Local is not connected' do
100
+ before do
101
+ stub_const('Legion::Data::Local', disconnected_mod)
102
+ end
103
+
104
+ let(:disconnected_mod) do
105
+ Module.new do
106
+ define_singleton_method(:connected?) { false }
107
+ end
108
+ end
109
+
110
+ it 'does not raise on begin_imprint' do
111
+ expect { fresh_bootstrap.begin_imprint }.not_to raise_error
112
+ end
113
+
114
+ it 'does not raise on load_firmware' do
115
+ expect { fresh_bootstrap.load_firmware }.not_to raise_error
116
+ end
117
+
118
+ it 'does not raise on record_observation' do
119
+ b = fresh_bootstrap
120
+ b.begin_imprint
121
+ expect { b.record_observation }.not_to raise_error
122
+ end
123
+
124
+ it 'leaves state at defaults when nothing is persisted' do
125
+ b = fresh_bootstrap
126
+ expect(b.started_at).to be_nil
127
+ expect(b.observation_count).to eq(0)
128
+ expect(b.firmware_loaded).to be false
129
+ expect(b.calibration_state).to eq(:not_started)
130
+ end
131
+ end
132
+
133
+ describe 'graceful no-op when Legion::Data::Local is not defined' do
134
+ it 'does not raise on initialize when constant is absent' do
135
+ hide_const('Legion::Data::Local')
136
+ expect { fresh_bootstrap }.not_to raise_error
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+
5
+ module Legion
6
+ module Logging
7
+ def self.debug(_msg); end
8
+ def self.info(_msg); end
9
+ def self.warn(_msg); end
10
+ def self.error(_msg); end
11
+ end
12
+ end
13
+
14
+ require 'legion/extensions/coldstart'
15
+
16
+ RSpec.configure do |config|
17
+ config.example_status_persistence_file_path = '.rspec_status'
18
+ config.disable_monkey_patching!
19
+ config.expect_with(:rspec) { |c| c.syntax = :expect }
20
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lex-coldstart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Esity
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: sequel
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '5.70'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '5.70'
26
+ - !ruby/object:Gem::Dependency
27
+ name: sqlite3
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ description: Imprint window and bootstrap calibration for brain-modeled agentic AI
41
+ email:
42
+ - matthewdiverson@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - Gemfile
48
+ - lex-coldstart.gemspec
49
+ - lib/legion/extensions/coldstart.rb
50
+ - lib/legion/extensions/coldstart/actors/imprint.rb
51
+ - lib/legion/extensions/coldstart/client.rb
52
+ - lib/legion/extensions/coldstart/helpers/bootstrap.rb
53
+ - lib/legion/extensions/coldstart/helpers/claude_parser.rb
54
+ - lib/legion/extensions/coldstart/helpers/imprint.rb
55
+ - lib/legion/extensions/coldstart/local_migrations/20260316000050_create_bootstrap_state.rb
56
+ - lib/legion/extensions/coldstart/runners/coldstart.rb
57
+ - lib/legion/extensions/coldstart/runners/ingest.rb
58
+ - lib/legion/extensions/coldstart/version.rb
59
+ - spec/fixtures/sample_claude.md
60
+ - spec/fixtures/sample_memory.md
61
+ - spec/legion/extensions/coldstart/actors/imprint_spec.rb
62
+ - spec/legion/extensions/coldstart/client_spec.rb
63
+ - spec/legion/extensions/coldstart/helpers/claude_parser_spec.rb
64
+ - spec/legion/extensions/coldstart/runners/coldstart_spec.rb
65
+ - spec/legion/extensions/coldstart/runners/ingest_spec.rb
66
+ - spec/local_persistence_spec.rb
67
+ - spec/spec_helper.rb
68
+ homepage: https://github.com/LegionIO/lex-coldstart
69
+ licenses:
70
+ - MIT
71
+ metadata:
72
+ homepage_uri: https://github.com/LegionIO/lex-coldstart
73
+ source_code_uri: https://github.com/LegionIO/lex-coldstart
74
+ documentation_uri: https://github.com/LegionIO/lex-coldstart
75
+ changelog_uri: https://github.com/LegionIO/lex-coldstart
76
+ bug_tracker_uri: https://github.com/LegionIO/lex-coldstart/issues
77
+ rubygems_mfa_required: 'true'
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '3.4'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubygems_version: 3.6.9
93
+ specification_version: 4
94
+ summary: LEX Coldstart
95
+ test_files: []