CAPTCHA: migrate redistributable solver actors into starintel-server #173

Open
opened 2026-08-29 10:28:06 +00:00 by nsaspy · 0 comments
Owner

Goal

Migrate the ordinary redistributable CAPTCHA solver/provider actor implementations out of lost-rob0t/starintel-pro-actors and into the regular public StarIntel actor implementation home, lost-rob0t/starintel-server.

This follows approved STAR-CAPTCHA-002.

Public migration candidates

  • NoneCap adapter
  • NopeCHA adapter
  • 2Captcha adapter
  • provider-neutral CAPTCHA protocol code
  • challenge detection/resolution orchestration that is not private solver logic
  • generic browser apply/session handoff code that can be safely published
  • fake-provider fixtures and owned-test fixtures
  • health, retry, cancellation, timeout, contract-drift, and partial-result test support

Do NOT migrate / publish

The in-house StarIntel solver remains private. Do not move to a public repository:

  • proprietary solver source
  • private model weights
  • private training/evaluation corpora
  • solver-specific heuristics
  • private model-selection/routing implementation
  • private production telemetry that exposes solver internals
  • secrets, browser sessions, cookies, tokens, or credentials

The public side may contain only the stable capability contract used by the private solver to register with CaptchaDomainServer.

Runtime architecture

Implement one CaptchaDomainServer surface. Provider adapters register exact capabilities behind it.

Calling actors must not depend on a specific provider. They request captcha.solve and receive a typed result or typed unavailable/blocked outcome.

When the domain server is not running, callers continue with a partial/blocked result rather than failing startup.

Init-file configuration

CAPTCHA solving must be configurable from the normal StarIntel init/config file rather than requiring code edits.

The init surface must support at least:

  • enable/disable the CAPTCHA Domain Server
  • enable/disable automatic solve attempts by callers
  • configured provider/solver preference order
  • allow/deny individual public provider adapters
  • prefer local/private solver when it is registered
  • allow/deny external providers independently from the private solver
  • per-provider credential references, never literal secrets in the init file when a secret reference mechanism exists
  • default timeout/deadline policy
  • maximum attempts / fallback policy
  • cost/budget ceilings for paid providers
  • whether human/operator fallback is allowed
  • challenge-family allow/deny policy
  • logging/telemetry level without logging challenge secrets or result tokens

The init file configures policy and preferences. It must not hard-code which solver implementation is installed. Runtime capability registration remains authoritative for actual availability.

Conceptual shape only; final syntax follows the normal StarIntel init/config schema:

(:captcha
  (:enabled t)
  (:auto-solve t)
  (:prefer (:private-local :nonecap :nopecha :2captcha))
  (:external-providers t)
  (:operator-fallback nil)
  (:max-attempts 2)
  (:timeout-seconds 90)
  (:max-cost-microunits 5000))

If StarLang owns init/schema configuration by implementation time, expose the same contract through StarLang and compile it into runtime config rather than adding a CAPTCHA-specific parser.

Language order

  1. StarLang
  2. add missing StarLang primitives
  3. Common Lisp adapter/library
  4. Python only for an unavoidable isolated dependency

Required implementation work

  • inventory current CAPTCHA code in starintel-pro-actors
  • classify every file as public-migratable or private-in-house
  • define StarLang CaptchaDomainServer and solver capability interface
  • define and validate the init-file CAPTCHA configuration schema
  • implement/port provider adapters into starintel-server
  • preserve exact provider capability registration rather than broad provider booleans
  • use opaque session/artifact/result refs
  • add domain-server health/discovery
  • add typed unavailable, blockedByChallenge, unsupportedChallenge, partial, and terminal result states
  • add bounded cancellation/deadline semantics
  • add fake-provider tests; no paid provider required in CI
  • test init-file enable/disable, preference order, provider allow/deny, fallback, budgets, and missing-provider behavior
  • prove starintel-server works with no private solver installed
  • prove a private solver can register at runtime through only the public contract
  • remove public code's architectural dependency on starintel-pro-actors

Security invariant

No public arbitrary-target CAPTCHA solve endpoint. Use authenticated internal actor/domain-server messages with explicit authorization and target/purpose policy.

Design authority: roam/design/star-server/STAR-CAPTCHA-002-domain-server-repository-boundary.org.

## Goal Migrate the ordinary redistributable CAPTCHA solver/provider actor implementations out of `lost-rob0t/starintel-pro-actors` and into the regular public StarIntel actor implementation home, `lost-rob0t/starintel-server`. This follows approved `STAR-CAPTCHA-002`. ## Public migration candidates - NoneCap adapter - NopeCHA adapter - 2Captcha adapter - provider-neutral CAPTCHA protocol code - challenge detection/resolution orchestration that is not private solver logic - generic browser apply/session handoff code that can be safely published - fake-provider fixtures and owned-test fixtures - health, retry, cancellation, timeout, contract-drift, and partial-result test support ## Do NOT migrate / publish The in-house StarIntel solver remains private. Do not move to a public repository: - proprietary solver source - private model weights - private training/evaluation corpora - solver-specific heuristics - private model-selection/routing implementation - private production telemetry that exposes solver internals - secrets, browser sessions, cookies, tokens, or credentials The public side may contain only the stable capability contract used by the private solver to register with `CaptchaDomainServer`. ## Runtime architecture Implement one `CaptchaDomainServer` surface. Provider adapters register exact capabilities behind it. Calling actors must not depend on a specific provider. They request `captcha.solve` and receive a typed result or typed unavailable/blocked outcome. When the domain server is not running, callers continue with a partial/blocked result rather than failing startup. ## Init-file configuration CAPTCHA solving must be configurable from the normal StarIntel init/config file rather than requiring code edits. The init surface must support at least: - enable/disable the CAPTCHA Domain Server - enable/disable automatic solve attempts by callers - configured provider/solver preference order - allow/deny individual public provider adapters - prefer local/private solver when it is registered - allow/deny external providers independently from the private solver - per-provider credential references, never literal secrets in the init file when a secret reference mechanism exists - default timeout/deadline policy - maximum attempts / fallback policy - cost/budget ceilings for paid providers - whether human/operator fallback is allowed - challenge-family allow/deny policy - logging/telemetry level without logging challenge secrets or result tokens The init file configures policy and preferences. It must not hard-code which solver implementation is installed. Runtime capability registration remains authoritative for actual availability. Conceptual shape only; final syntax follows the normal StarIntel init/config schema: ```lisp (:captcha (:enabled t) (:auto-solve t) (:prefer (:private-local :nonecap :nopecha :2captcha)) (:external-providers t) (:operator-fallback nil) (:max-attempts 2) (:timeout-seconds 90) (:max-cost-microunits 5000)) ``` If StarLang owns init/schema configuration by implementation time, expose the same contract through StarLang and compile it into runtime config rather than adding a CAPTCHA-specific parser. ## Language order 1. StarLang 2. add missing StarLang primitives 3. Common Lisp adapter/library 4. Python only for an unavoidable isolated dependency ## Required implementation work - [ ] inventory current CAPTCHA code in `starintel-pro-actors` - [ ] classify every file as public-migratable or private-in-house - [ ] define StarLang `CaptchaDomainServer` and solver capability interface - [ ] define and validate the init-file CAPTCHA configuration schema - [ ] implement/port provider adapters into `starintel-server` - [ ] preserve exact provider capability registration rather than broad provider booleans - [ ] use opaque session/artifact/result refs - [ ] add domain-server health/discovery - [ ] add typed `unavailable`, `blockedByChallenge`, `unsupportedChallenge`, `partial`, and terminal result states - [ ] add bounded cancellation/deadline semantics - [ ] add fake-provider tests; no paid provider required in CI - [ ] test init-file enable/disable, preference order, provider allow/deny, fallback, budgets, and missing-provider behavior - [ ] prove `starintel-server` works with no private solver installed - [ ] prove a private solver can register at runtime through only the public contract - [ ] remove public code's architectural dependency on `starintel-pro-actors` ## Security invariant No public arbitrary-target CAPTCHA solve endpoint. Use authenticated internal actor/domain-server messages with explicit authorization and target/purpose policy. Design authority: `roam/design/star-server/STAR-CAPTCHA-002-domain-server-repository-boundary.org`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/starintel-auto-research#173
No description provided.