ace-hitl-contract 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 898a6d72e810e38ec458ab4c6fed1ef44f7153fb4caa4385ccbfc90dcf32c6de
4
+ data.tar.gz: b31aebd8f351ae2bd240eee1a11a18532065bebfda87b005deefc66d49c59067
5
+ SHA512:
6
+ metadata.gz: 77410b2ccb1fd4477c953a081165427e6ab587540df113cb2806314131c0e3577e17b7f32931c5983230c6021cd7b494169aea4ff93d3bf7fa52e7ec7af11379
7
+ data.tar.gz: ddb96c185b8e5c4a1ab74e0a5328131773f9dd2369deeecf0041bd6373ba884e177062c465a807143ad8594fd7c093006c3fdfa2386ba082038daf3f153e656f
data/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [0.1.0] - 2026-10-04
6
+
7
+ ### Added
8
+
9
+ - Extract the existing HITL provider references, results and error hierarchy into one dependency-free protocol package, preserving their namespace and behavior.
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # ace-hitl-contract
2
+
3
+ Shared provider protocol for ACE HITL request orchestration and delivery adapters. It has no runtime gem dependencies and performs no service, assignment or transport initialization.
4
+
5
+ ```ruby
6
+ require "ace/hitl/contract"
7
+
8
+ ref = Ace::Hitl::Providers::Ref.from_env
9
+ result = Ace::Hitl::Providers::DeliverResult.new(ref: ref, state: :delivered)
10
+ ```
11
+
12
+ The protocol owns `Ref`, `AskResult`, `DeliverResult` and the provider error hierarchy under `Ace::Hitl::Providers`. Full registry and locked assignment authority remain in `ace-hitl`. Runtime adapters use this leaf package without loading the privileged HITL lifecycle.
13
+
14
+ Run package tests from the ACE checkout with `bin/ace-test ace-hitl-contract all`.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test" << "lib"
8
+ t.test_files = FileList["test/**/*_test.rb"]
9
+ end
10
+
11
+ task spec: :test
12
+ task default: :test
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ace
4
+ module Hitl
5
+ module Providers
6
+ # Error model for HITL provider adapters (spec 8wm.t.vrz §2).
7
+ class Error < StandardError; end
8
+
9
+ # The provider name is not in the registry.
10
+ class UnknownProviderError < Error; end
11
+
12
+ # The reverse address (herdr session + pane) is absent or invalid.
13
+ # Ask fails closed before any event or transport state is created.
14
+ class InvalidRefError < Error; end
15
+
16
+ # The transport send failed (binary missing, non-zero exit,
17
+ # unparseable output) after the local event may already exist.
18
+ class ProviderUnavailableError < Error; end
19
+
20
+ # The provider does not implement the requested operation.
21
+ class UnsupportedOperationError < Error; end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "errors"
4
+
5
+ module Ace
6
+ module Hitl
7
+ module Providers
8
+ # Typed reverse address of the asking agent: herdr session + pane
9
+ # (spec 8wm.t.vrz §3). Versioned schema ace.hitl.ref/v1; captured
10
+ # fail-closed from the herdr environment at ask time. ace-herdr
11
+ # exports both variables when it bootstraps an agent pane.
12
+ #
13
+ # The ref identifies WHERE the answer goes; it never carries answer
14
+ # content.
15
+ class Ref
16
+ SCHEMA = "ace.hitl.ref/v1"
17
+ SESSION_ENV = "HERDR_SESSION"
18
+ PANE_ENV = "HERDR_PANE"
19
+ MAX_LENGTH = 128
20
+ TOKEN_PATTERN = /\A[A-Za-z0-9._:-]+\z/.freeze
21
+
22
+ attr_reader :session, :pane
23
+
24
+ def initialize(session:, pane:)
25
+ @session = session
26
+ @pane = pane
27
+ end
28
+
29
+ # Fail closed: raises InvalidRefError naming the offending variable
30
+ # and rule when the reverse address is absent or invalid.
31
+ def self.from_env(env = ENV)
32
+ session = validate!(env[SESSION_ENV], SESSION_ENV)
33
+ pane = validate!(env[PANE_ENV], PANE_ENV)
34
+ new(session: session, pane: pane)
35
+ end
36
+
37
+ def self.validate!(value, source)
38
+ token = value.to_s.strip
39
+ if token.empty?
40
+ raise InvalidRefError,
41
+ "#{source} is required (herdr reverse address, #{SCHEMA})"
42
+ end
43
+ if token.length > MAX_LENGTH
44
+ raise InvalidRefError,
45
+ "#{source} exceeds #{MAX_LENGTH} characters"
46
+ end
47
+ unless token.match?(TOKEN_PATTERN)
48
+ raise InvalidRefError,
49
+ "#{source} contains invalid characters " \
50
+ "(allowed: letters, digits, '.', '_', ':', '-')"
51
+ end
52
+
53
+ token
54
+ end
55
+
56
+ def to_h
57
+ {schema: SCHEMA, session: session, pane: pane}
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ace
4
+ module Hitl
5
+ module Providers
6
+ # ask(question:, ...) result: local event id + relay request id.
7
+ AskResult = Struct.new(:event_id, :request_id, keyword_init: true)
8
+
9
+ # deliver(ref, answer) result; state is :delivered, :retryable
10
+ # (safe to re-push identical content) or :failed.
11
+ DeliverResult = Struct.new(:ref, :state, keyword_init: true)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ace
4
+ module Hitl
5
+ module Contract
6
+ VERSION = "0.1.0"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "contract/version"
4
+ require_relative "contract/errors"
5
+ require_relative "contract/ref"
6
+ require_relative "contract/results"
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ace-hitl-contract
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Michal Czyz
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: ace-support-test-helpers
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.14'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.14'
26
+ - !ruby/object:Gem::Dependency
27
+ name: minitest
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '5.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '13.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '13.0'
54
+ description: Pure HITL provider vocabulary shared by request orchestration and delivery
55
+ adapters, without activating assignment or privileged HITL service dependencies.
56
+ email:
57
+ - mc@cs3b.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - CHANGELOG.md
63
+ - README.md
64
+ - Rakefile
65
+ - lib/ace/hitl/contract.rb
66
+ - lib/ace/hitl/contract/errors.rb
67
+ - lib/ace/hitl/contract/ref.rb
68
+ - lib/ace/hitl/contract/results.rb
69
+ - lib/ace/hitl/contract/version.rb
70
+ homepage: https://github.com/cs3b/ace
71
+ licenses:
72
+ - MIT
73
+ metadata:
74
+ allowed_push_host: https://rubygems.org
75
+ source_code_uri: https://github.com/cs3b/ace/tree/main/ace-hitl-contract/
76
+ changelog_uri: https://github.com/cs3b/ace/blob/main/ace-hitl-contract/CHANGELOG.md
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 3.2.0
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubygems_version: 3.6.9
92
+ specification_version: 4
93
+ summary: Shared HITL provider reference, result and error protocol
94
+ test_files: []