textus 0.53.0 → 0.54.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -0
- data/SPEC.md +2 -5
- data/docs/architecture/README.md +149 -159
- data/lib/textus/action/accept.rb +0 -9
- data/lib/textus/action/audit.rb +0 -2
- data/lib/textus/action/blame.rb +0 -2
- data/lib/textus/action/boot.rb +2 -11
- data/lib/textus/action/data_mv.rb +1 -3
- data/lib/textus/action/deps.rb +1 -15
- data/lib/textus/action/doctor.rb +0 -2
- data/lib/textus/action/drain.rb +4 -6
- data/lib/textus/action/enqueue.rb +3 -5
- data/lib/textus/action/get.rb +1 -3
- data/lib/textus/action/ingest.rb +135 -0
- data/lib/textus/action/jobs.rb +1 -3
- data/lib/textus/action/key_delete.rb +0 -10
- data/lib/textus/action/key_delete_prefix.rb +1 -3
- data/lib/textus/action/key_mv.rb +1 -15
- data/lib/textus/action/key_mv_prefix.rb +1 -3
- data/lib/textus/action/list.rb +0 -2
- data/lib/textus/action/propose.rb +0 -2
- data/lib/textus/action/published.rb +0 -2
- data/lib/textus/action/pulse.rb +7 -38
- data/lib/textus/action/put.rb +1 -12
- data/lib/textus/action/rdeps.rb +2 -12
- data/lib/textus/action/reject.rb +0 -12
- data/lib/textus/action/rule_explain.rb +0 -4
- data/lib/textus/action/rule_lint.rb +1 -3
- data/lib/textus/action/rule_list.rb +0 -4
- data/lib/textus/action/schema_envelope.rb +0 -2
- data/lib/textus/action/uid.rb +0 -2
- data/lib/textus/action/where.rb +0 -2
- data/lib/textus/action/write_verb.rb +4 -18
- data/lib/textus/boot.rb +33 -109
- data/lib/textus/command.rb +6 -1
- data/lib/textus/container.rb +1 -1
- data/lib/textus/core/freshness/evaluator.rb +18 -34
- data/lib/textus/doctor/check/notebook_sources.rb +50 -0
- data/lib/textus/doctor/check/raw_asset_paths.rb +50 -0
- data/lib/textus/doctor/check.rb +0 -1
- data/lib/textus/doctor.rb +2 -42
- data/lib/textus/envelope/reader.rb +46 -0
- data/lib/textus/envelope/writer.rb +209 -0
- data/lib/textus/errors.rb +8 -4
- data/lib/textus/{entry → format}/base.rb +1 -6
- data/lib/textus/{entry → format}/json.rb +1 -4
- data/lib/textus/{entry → format}/markdown.rb +2 -6
- data/lib/textus/{entry → format}/text.rb +2 -6
- data/lib/textus/{entry → format}/yaml.rb +1 -4
- data/lib/textus/{entry.rb → format.rb} +9 -10
- data/lib/textus/gate/auth.rb +58 -12
- data/lib/textus/gate.rb +2 -0
- data/lib/textus/init.rb +12 -75
- data/lib/textus/jobs/base.rb +23 -0
- data/lib/textus/jobs/materialize.rb +20 -0
- data/lib/textus/{background → jobs}/plan.rb +1 -1
- data/lib/textus/jobs/planner.rb +101 -0
- data/lib/textus/jobs/retention.rb +48 -0
- data/lib/textus/jobs/sweep.rb +27 -0
- data/lib/textus/{background → jobs}/worker.rb +2 -2
- data/lib/textus/jobs.rb +15 -0
- data/lib/textus/key/path.rb +1 -1
- data/lib/textus/manifest/entry/base.rb +4 -19
- data/lib/textus/manifest/entry/parser.rb +27 -10
- data/lib/textus/manifest/entry/produced.rb +13 -34
- data/lib/textus/manifest/entry/publish/to_paths.rb +4 -4
- data/lib/textus/manifest/entry/publish.rb +0 -12
- data/lib/textus/manifest/entry/validators/format_matrix.rb +1 -1
- data/lib/textus/manifest/entry/validators.rb +0 -1
- data/lib/textus/manifest/policy/source.rb +14 -62
- data/lib/textus/manifest/policy.rb +2 -5
- data/lib/textus/manifest/resolver.rb +2 -2
- data/lib/textus/manifest/schema/keys.rb +6 -20
- data/lib/textus/manifest/schema/validator.rb +3 -11
- data/lib/textus/manifest/schema/vocabulary.rb +1 -0
- data/lib/textus/ports/{queue → job_store}/job.rb +1 -1
- data/lib/textus/ports/{queue.rb → job_store.rb} +6 -13
- data/lib/textus/produce/engine.rb +50 -0
- data/lib/textus/produce/render.rb +18 -0
- data/lib/textus/session.rb +1 -1
- data/lib/textus/store.rb +1 -10
- data/lib/textus/surfaces/mcp/catalog.rb +1 -1
- data/lib/textus/surfaces/mcp/errors.rb +0 -9
- data/lib/textus/surfaces/mcp/routing.rb +51 -0
- data/lib/textus/surfaces/mcp/server.rb +101 -62
- data/lib/textus/surfaces/role_scope.rb +0 -4
- data/lib/textus/surfaces/watcher.rb +3 -3
- data/lib/textus/version.rb +1 -1
- data/lib/textus/workflow/collector.rb +27 -0
- data/lib/textus/workflow/context.rb +5 -0
- data/lib/textus/workflow/dsl.rb +44 -0
- data/lib/textus/workflow/loader.rb +17 -0
- data/lib/textus/workflow/pattern.rb +18 -0
- data/lib/textus/workflow/registry.rb +21 -0
- data/lib/textus/workflow/runner.rb +84 -0
- data/lib/textus/workflow.rb +28 -0
- data/lib/textus.rb +12 -1
- metadata +33 -61
- data/lib/textus/action/pulse/scanner.rb +0 -118
- data/lib/textus/background/job/base.rb +0 -27
- data/lib/textus/background/job/materialize.rb +0 -31
- data/lib/textus/background/job/refresh.rb +0 -22
- data/lib/textus/background/job/sweep.rb +0 -31
- data/lib/textus/background/job.rb +0 -19
- data/lib/textus/background/planner/plan.rb +0 -113
- data/lib/textus/background/retention/apply.rb +0 -50
- data/lib/textus/doctor/check/handler_permit.rb +0 -34
- data/lib/textus/doctor/check/hooks.rb +0 -25
- data/lib/textus/doctor/check/intake_registration.rb +0 -46
- data/lib/textus/envelope/io/reader.rb +0 -48
- data/lib/textus/envelope/io/writer.rb +0 -211
- data/lib/textus/events.rb +0 -21
- data/lib/textus/init/templates/machine_intake.rb +0 -49
- data/lib/textus/init/templates/orientation_reducer.rb +0 -21
- data/lib/textus/manifest/entry/validators/events.rb +0 -22
- data/lib/textus/manifest/policy/handler_permit.rb +0 -17
- data/lib/textus/pipeline/acquire/handler.rb +0 -29
- data/lib/textus/pipeline/acquire/intake.rb +0 -132
- data/lib/textus/pipeline/acquire/projection.rb +0 -129
- data/lib/textus/pipeline/acquire/serializer/json.rb +0 -31
- data/lib/textus/pipeline/acquire/serializer/text.rb +0 -16
- data/lib/textus/pipeline/acquire/serializer/yaml.rb +0 -31
- data/lib/textus/pipeline/acquire/serializer.rb +0 -17
- data/lib/textus/pipeline/engine.rb +0 -97
- data/lib/textus/pipeline/render.rb +0 -25
- data/lib/textus/ports/audit_subscriber.rb +0 -42
- data/lib/textus/projection.rb +0 -103
- data/lib/textus/step/base.rb +0 -35
- data/lib/textus/step/builtin/csv_fetch.rb +0 -19
- data/lib/textus/step/builtin/ical_events_fetch.rb +0 -30
- data/lib/textus/step/builtin/json_fetch.rb +0 -18
- data/lib/textus/step/builtin/markdown_links_fetch.rb +0 -20
- data/lib/textus/step/builtin/rss_fetch.rb +0 -26
- data/lib/textus/step/builtin.rb +0 -22
- data/lib/textus/step/catalog.rb +0 -37
- data/lib/textus/step/context.rb +0 -74
- data/lib/textus/step/discovery.rb +0 -24
- data/lib/textus/step/error_log.rb +0 -32
- data/lib/textus/step/event_bus.rb +0 -113
- data/lib/textus/step/fetch.rb +0 -13
- data/lib/textus/step/fire_report.rb +0 -23
- data/lib/textus/step/loader.rb +0 -108
- data/lib/textus/step/observe.rb +0 -31
- data/lib/textus/step/registry_store.rb +0 -66
- data/lib/textus/step/signature.rb +0 -31
- data/lib/textus/step/transform.rb +0 -12
- data/lib/textus/step/validate.rb +0 -11
- data/lib/textus/step.rb +0 -10
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Textus
|
|
4
|
-
module Step
|
|
5
|
-
# The single home for registered steps. Reuses Step::EventBus for observe
|
|
6
|
-
# (pub/sub) dispatch — including its timeout isolation and error ring buffer
|
|
7
|
-
# — and holds a kind->{name->instance} table for the invocable kinds
|
|
8
|
-
# (fetch/transform/validate). Replaces the EventBus+RpcRegistryStore pair.
|
|
9
|
-
class RegistryStore
|
|
10
|
-
def initialize(error_log: Step::ErrorLog.new)
|
|
11
|
-
@bus = Step::EventBus.new(error_log: error_log)
|
|
12
|
-
@table = Hash.new { |h, k| h[k] = {} }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Register either a Step instance (invocable/observe table) or a pub/sub
|
|
16
|
-
# subscriber (`register(event, name, keys:, &block)`) for internal/spec
|
|
17
|
-
# probes.
|
|
18
|
-
def register(step, *, keys: nil, &)
|
|
19
|
-
return @bus.register(step, *, keys: keys, &) unless step.is_a?(Step::Base)
|
|
20
|
-
|
|
21
|
-
kind = step.class.kind
|
|
22
|
-
name = step.name.to_sym
|
|
23
|
-
return register_observe(step) if kind == :observe
|
|
24
|
-
|
|
25
|
-
raise UsageError.new("#{kind} '#{name}' already registered") if @table[kind].key?(name)
|
|
26
|
-
|
|
27
|
-
@table[kind][name] = step
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Invoke an invocable step. Mirrors the old RpcRegistryStore#invoke: inject
|
|
31
|
-
# caps only when #call declares :caps or accepts keyrest.
|
|
32
|
-
def invoke(kind, name, caps:, **other)
|
|
33
|
-
step = @table[kind][name.to_sym] or raise UsageError.new("unknown #{kind}: #{name}")
|
|
34
|
-
sig = Step::Signature.new(step.method(:call))
|
|
35
|
-
kwargs = other.dup
|
|
36
|
-
kwargs[:caps] = caps if sig.accepts_keyrest? || sig.declared_keys.include?(:caps)
|
|
37
|
-
step.call(**kwargs)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def names(kind)
|
|
41
|
-
return @bus.pubsub_handlers_names if kind.to_sym == :observe
|
|
42
|
-
|
|
43
|
-
@table[kind.to_sym].keys
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def pubsub_handlers(event)
|
|
47
|
-
@bus.pubsub_handlers(event)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Pub/sub passthrough (observe + internal built-in subscribers).
|
|
51
|
-
def publish(event, **) = @bus.publish(event, **)
|
|
52
|
-
def on(event, name, keys: nil, &) = @bus.register(event, name, keys: keys, &)
|
|
53
|
-
def on_error(&) = @bus.on_error(&)
|
|
54
|
-
def error_log = @bus.error_log
|
|
55
|
-
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
def register_observe(step)
|
|
59
|
-
sig = Step::Signature.new(step.method(:call))
|
|
60
|
-
@bus.register(step.class.event, step.name, keys: step.class.match) do |**kw|
|
|
61
|
-
step.call(**sig.filter(kw))
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Textus
|
|
4
|
-
module Step
|
|
5
|
-
class Signature
|
|
6
|
-
def initialize(callable)
|
|
7
|
-
@params = callable.parameters
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def accepts_keyrest?
|
|
11
|
-
@params.any? { |type, _| type == :keyrest }
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def declared_keys
|
|
15
|
-
@params.each_with_object([]) { |(t, n), acc| acc << n if %i[keyreq key].include?(t) }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def missing(required)
|
|
19
|
-
return [] if accepts_keyrest?
|
|
20
|
-
|
|
21
|
-
required - declared_keys
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def filter(kwargs)
|
|
25
|
-
return kwargs if accepts_keyrest?
|
|
26
|
-
|
|
27
|
-
kwargs.slice(*declared_keys)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Textus
|
|
4
|
-
module Step
|
|
5
|
-
# Combines/reshapes projected rows into an artifact shape. Returns a Hash
|
|
6
|
-
# (the structured payload base) or an Array of rows. Replaces the
|
|
7
|
-
# :transform_rows RPC. (Phase 2 will widen `rows:` to a named `inputs:` map.)
|
|
8
|
-
class Transform < Base
|
|
9
|
-
def self.required_kwargs = %i[rows config]
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
data/lib/textus/step/validate.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Textus
|
|
4
|
-
module Step
|
|
5
|
-
# Checks an artifact/store state and returns diagnostics. Replaces the
|
|
6
|
-
# :validate RPC. Receives only `caps:` (injected by the registry).
|
|
7
|
-
class Validate < Base
|
|
8
|
-
def self.required_kwargs = []
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
data/lib/textus/step.rb
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Textus
|
|
4
|
-
# A Step is a unit of user-extensible behaviour discovered by convention at
|
|
5
|
-
# .textus/steps/<kind>/<name>.rb. Five kinds: fetch (external acquisition),
|
|
6
|
-
# transform (combine/reshape into an artifact), validate (check an artifact),
|
|
7
|
-
# observe (react to a lifecycle event). Replaces the Textus.hook block queue.
|
|
8
|
-
module Step
|
|
9
|
-
end
|
|
10
|
-
end
|