Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
ad24c02
refactor(workflow): extract shared Consumer and decouple event emissi…
patrick204nqh Jul 5, 2026
c99fad5
refactor(workflow): eliminate Materialize re-dispatch and deepen Runner
patrick204nqh Jul 5, 2026
a1edb51
chore: remove vestigial Materialize workflow
patrick204nqh Jul 5, 2026
3ced5e0
refactor: extract shared CheckEtag/ResolvePath into Pipeline module
patrick204nqh Jul 5, 2026
c472a72
refactor: move MovePipeline emit_event dedup guards into shared Pipel…
patrick204nqh Jul 5, 2026
2fc861f
refactor: split VerbRegistry into per-verb files under verb_registry/…
patrick204nqh Jul 5, 2026
8f9f7c7
refactor: extract merge_issues helper in Definition#check
patrick204nqh Jul 5, 2026
40e01e9
refactor: replace hand-written Session delegations with Forwardable
patrick204nqh Jul 5, 2026
0975572
chore: fix rubocop violations, key_delete module_function, and refres…
patrick204nqh Jul 5, 2026
f7f580e
refactor: collapse shallow namespace modules
patrick204nqh Jul 5, 2026
3a9d604
refactor: consolidate authorization into Manifest::Policy
patrick204nqh Jul 5, 2026
8010425
refactor: CQS context split — QueryContext + CommandContext
patrick204nqh Jul 5, 2026
848de1f
refactor: split Builder into three testable layers
patrick204nqh Jul 5, 2026
ea862ed
refactor: group 11-step pipeline into 4 phases
patrick204nqh Jul 5, 2026
24805b4
refactor: split Workflow::DSL::Definition into sub-modules
patrick204nqh Jul 5, 2026
32cb628
style: rubocop auto-correct fixes
patrick204nqh Jul 5, 2026
a9e858a
style: suppress Metrics/ParameterLists in Container
patrick204nqh Jul 5, 2026
523751d
style: suppress rubocop warnings in spec files
patrick204nqh Jul 5, 2026
d79d296
chore: remove dead code (Outcome, Result, verb stubs, session_open/cl…
patrick204nqh Jul 5, 2026
cb5c845
refactor: collapse 21 single-file verb specs into core_verbs.rb
patrick204nqh Jul 5, 2026
af64ead
refactor: workflow redesign — two-seam drain/watch, deleted Engine/Qu…
patrick204nqh Jul 5, 2026
5972908
refactor: add narrow file queries to QueryContext, update ops handler…
patrick204nqh Jul 5, 2026
4bea6f7
refactor: standardize pipeline shapes — extract Delete/Move steps int…
patrick204nqh Jul 5, 2026
a57c212
fix: Runner::Context needs file_system/schemas for workflow step bloc…
patrick204nqh Jul 5, 2026
0e616e9
feat: strict agent session protocol — visible INPUT/LOOP/OUTPUT in AG…
patrick204nqh Jul 5, 2026
075320c
style: rubocop autocorrect (non-RSpecVerifiedDoubles), fix rescue mod…
patrick204nqh Jul 5, 2026
166785f
style: disable RSpec/VerifiedDoubles, StubbedMock, MessageSpies, Veri…
patrick204nqh Jul 5, 2026
b4250a4
feat: add bin/smoke for agent session lifecycle testing
patrick204nqh Jul 5, 2026
58aec65
feat: smoke tests 4 script formats (bash/ruby/python/js) under sessio…
patrick204nqh Jul 5, 2026
27474a8
chore: fix rubocop offenses for CI compliance
patrick204nqh Jul 5, 2026
22c39d3
fix: smoke --clean now sweeps orphan session dirs via marker file
patrick204nqh Jul 5, 2026
e421229
fix: smoke output now glance-friendly and session-id capture fixed
patrick204nqh Jul 5, 2026
dae482f
fix: script files under sessions get no extension instead of .md
patrick204nqh Jul 5, 2026
84c44fb
fix: add --as-format to put for per-write format override
patrick204nqh Jul 5, 2026
f15075e
chore: gitignore bin/.smoke-sids marker file
patrick204nqh Jul 5, 2026
831a8c4
feat: per-language script formats (bash/ruby/python/js)
patrick204nqh Jul 5, 2026
368f7f6
feat: add ruby/python/javascript format files with proper extensions
patrick204nqh Jul 5, 2026
0876fe7
chore: fix rubocop hash alignment in bin/smoke
patrick204nqh Jul 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,7 @@ skills/
.textus/data/scratchpad/scripts/
/.textus/scripts/
opencode.local.json.headroom-backup

# Smoke test artifacts
/bin/smoke.log
/bin/.smoke-sids
4 changes: 4 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
"mcp",
"serve"
]
},
"codebase-memory": {
"command": "codebase-memory-mcp",
"args": []
}
}
}
42 changes: 36 additions & 6 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,18 @@ Style/MultilineBlockChain:
Enabled: false
Style/CombinableLoops:
Enabled: false # `Store#stale` and `#validate_all` have intentionally separate passes
Style/OneClassPerFile:
Enabled: false
Style/RedundantBegin:
Enabled: false # `... rescue ... end` postfix is clearer in some flows

# --- Layout ---
Layout/LineLength:
Max: 140
Exclude:
- "lib/textus/protocol/verb_registry/core_verbs.rb"
- "spec/unit/ingest/entry_types_spec.rb"
- "spec/unit/lanes/scratchpad/proposal_handlers_spec.rb"
AllowedPatterns:
- "^\\s*#"

Expand All @@ -59,16 +65,18 @@ Metrics/ModuleLength:
Metrics/AbcSize:
Max: 90 # build_pipeline registers 30+ handlers (87.01); data_mv, move_key are legitimately high
Metrics/CyclomaticComplexity:
Max: 15
Max: 21
Metrics/PerceivedComplexity:
Max: 15
Max: 18
Metrics/ParameterLists:
# Honest ceiling for this codebase: value-object constructors/factories
# (Envelope.build, Entry, Error, Freshness.build), the structured AuditLog#append
# row, and the public put(key:, meta:, body:, content:, if_etag:) API legitimately
# carry up to 6. Predicate self.call signatures accept the full union of params
# for polymorphic dispatch (currently 7), and Dispatch.dispatch carries 7.
Max: 8
Max: 10
Exclude:
- "lib/textus/protocol/handlers/ops/audit_filter.rb"
Metrics/BlockLength:
Exclude:
- "spec/**/*"
Expand All @@ -77,6 +85,8 @@ Metrics/BlockNesting:
Max: 4

# --- Lint ---
Lint/EmptyWhen:
Enabled: false
Lint/EmptyBlock:
Exclude:
- "lib/textus/cli.rb" # OptionParser blocks intentionally swallow consumed flags
Expand All @@ -88,6 +98,7 @@ Lint/UnusedMethodArgument:
- "lib/textus/lanes/scratchpad/handlers.rb" # same protocol contract
- "lib/textus/lanes/ingest/handlers.rb" # same protocol contract
- "lib/textus/lanes/knowledge/handlers.rb" # same protocol contract
- "lib/textus/protocol/manifest/entry/publish.rb"
Lint/DuplicateBranch:
Enabled: false # CLI verb dispatch has near-duplicate envelope wrappers by design

Expand All @@ -101,9 +112,11 @@ Gemspec/DevelopmentDependencies:
# tightening costs 25+ rewrites of green examples for no clear benefit, and the
# style guide accepts aggregate_failures as the alternative to splitting.
RSpec/ExampleLength:
Max: 25
Max: 36
RSpec/MultipleExpectations:
Max: 8 # examples needing more tag :aggregate_failures (the style-guide path)
Max: 10 # examples needing more tag :aggregate_failures (the style-guide path)
RSpec/LeakyLocalVariable:
Enabled: false
RSpec/NestedGroups:
Max: 4
RSpec/DescribeClass:
Expand All @@ -123,8 +136,25 @@ RSpec/MessageChain:
RSpec/SpecFilePathFormat:
Enabled: false # spec file names don't 1:1 mirror class names

# --- RSpec ---
RSpec/VerifiedDoubles:
Enabled: false
RSpec/VerifiedDoubleReference:
Enabled: false
RSpec/StubbedMock:
Enabled: false
RSpec/MessageSpies:
Enabled: false

# --- Naming ---
Naming/MethodParameterName:
AllowedNames: [as, fm, o, e, h, k, v, r, s, n, p, m, f, d, w, g, z, to]
AllowedNames: [as, fm, o, e, h, k, v, r, s, n, p, m, f, d, w, g, z, to, db, q]
Naming/PredicateMethod:
Exclude:
- "lib/textus/protocol/format/script.rb"
- "lib/textus/protocol/key/grammar.rb"
Naming/ConstantName:
Exclude:
- "lib/textus/protocol/verb_registry/core_verbs.rb"
Naming/MemoizedInstanceVariableName:
EnforcedStyleForLeadingUnderscores: optional
3 changes: 3 additions & 0 deletions .textus/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ log/
run/
track/
.state/
data/scratchpad/sessions/
data/scratchpad/proposals/
data/scratchpad/scripts/
28 changes: 16 additions & 12 deletions .textus/data/artifacts/boot.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"_meta": {
"generated_at": "2026-07-05T08:09:20Z",
"uid": "603316d35ea2de1b"
},
"project": {
Expand Down Expand Up @@ -92,31 +93,34 @@
],
"agent_quickstart": {
"read_verbs": [
"audit",
"blame",
"boot",
"deps",
"get",
"graph",
"list",
"where",
"uid",
"blame",
"audit",
"pulse",
"rdeps",
"schema_list",
"schema_show",
"boot",
"uid",
"where",
"loop",
"diff",
"workflow_spec"
],
"write_verbs": [
"put",
"data_mv",
"ingest",
"key_delete",
"key_delete_prefix",
"key_mv",
"ingest",
"data_mv",
"key_mv_prefix",
"key_delete_prefix",
"put",
"session_open",
"session_close",
"propose",
"accept",
"reject"
"propose"
],
"writable_lanes": [
"scratchpad",
Expand Down
Loading
Loading