Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
304 commits
Select commit Hold shift + click to select a range
1a15802
Add transactional work queue (dispatcher/performer)
JE-Chen Jun 18, 2026
2cee6f0
Use static SQL strings in list_items to clear Semgrep SQLi flag
JE-Chen Jun 18, 2026
7b494f6
Merge pull request #218 from Integration-Automation/feat/work-queue
JE-Chen Jun 18, 2026
30169e7
Add synthetic test data, MCP registry manifest, risk-based test selec…
JE-Chen Jun 18, 2026
a7e6fe7
Fix risk selection default store: use shared instance, not call it
JE-Chen Jun 18, 2026
a049e3a
Merge pull request #219 from Integration-Automation/feat/tooling-batch
JE-Chen Jun 18, 2026
fdcf2eb
Add native-UI element repository and flow step debugger
JE-Chen Jun 18, 2026
7976029
Merge pull request #220 from Integration-Automation/feat/native-batch
JE-Chen Jun 18, 2026
16c60ec
Add skill library, prompt-injection guardrail, A2A agent card
JE-Chen Jun 18, 2026
b6b677e
Merge pull request #221 from Integration-Automation/feat/agent-batch
JE-Chen Jun 19, 2026
d396263
Add headless Office I/O (Excel/Word/PowerPoint) as optional [office] …
JE-Chen Jun 19, 2026
2aaedcf
Office: use literal imports (clear Semgrep non-literal-import); guard…
JE-Chen Jun 19, 2026
947e6d1
Merge pull request #222 from Integration-Automation/feat/office-batch
JE-Chen Jun 19, 2026
818a1c7
Add agent episodic memory store and deterministic-run harness
JE-Chen Jun 19, 2026
6dab405
Tests: compare RNG state and use approx to clear SonarCloud gate
JE-Chen Jun 19, 2026
4b9c179
Add WCAG 2.2 SC-tagged accessibility rule engine (target-size + confo…
JE-Chen Jun 19, 2026
4ba1f46
Merge pull request #223 from Integration-Automation/feat/agent-memory…
JE-Chen Jun 19, 2026
11ea99d
Merge pull request #224 from Integration-Automation/feat/wcag-batch
JE-Chen Jun 19, 2026
dd8fb75
Add reactive screen observer (appear/vanish/change -> callback)
JE-Chen Jun 19, 2026
27d5d0b
Merge pull request #225 from Integration-Automation/feat/observer-batch
JE-Chen Jun 19, 2026
bf76653
Add CycloneDX SBOM generator and duration-aware suite sharding
JE-Chen Jun 19, 2026
68fdb98
Use https schema URL and clear Sonar code smells in ops batch
JE-Chen Jun 19, 2026
fb3cbbc
Merge pull request #226 from Integration-Automation/feat/ops-batch
JE-Chen Jun 19, 2026
a7c23f1
Add data-quality helpers: row schema validation, field extraction, ma…
JE-Chen Jun 19, 2026
b61f321
Merge pull request #227 from Integration-Automation/feat/data-quality…
JE-Chen Jun 19, 2026
c7e1459
Add i18n/l10n testing: pseudo-localization, text-overflow, catalog diff
JE-Chen Jun 19, 2026
98fcbc5
Merge pull request #228 from Integration-Automation/feat/i18n-batch
JE-Chen Jun 19, 2026
03e9243
Add flow checkpoint/resume (durable execution) and py.typed marker
JE-Chen Jun 19, 2026
d06a7e4
Merge pull request #229 from Integration-Automation/feat/reliability-…
JE-Chen Jun 19, 2026
1f9ee88
Add Set-of-Marks overlay for VLM element grounding
JE-Chen Jun 19, 2026
b96a650
Merge pull request #230 from Integration-Automation/feat/set-of-marks…
JE-Chen Jun 19, 2026
4200b50
Add semantic screen state: snapshot/diff and describe-screen
JE-Chen Jun 19, 2026
b449ca3
Add timed input replay and declarative input-sequence DSL
JE-Chen Jun 19, 2026
4e404b1
Merge pull request #231 from Integration-Automation/feat/screen-state…
JE-Chen Jun 19, 2026
2cd59aa
Add resilience primitives: RetryPolicy, CircuitBreaker, AC_circuit_call
JE-Chen Jun 19, 2026
7fa3ed5
Merge pull request #232 from Integration-Automation/feat/input-macro-…
JE-Chen Jun 19, 2026
9c281d6
Add CI workflow annotations and clipboard history
JE-Chen Jun 19, 2026
70b73fc
Merge pull request #233 from Integration-Automation/feat/resilience-p…
JE-Chen Jun 19, 2026
f3e2a39
Add self-heal analytics and action-secrets scanning
JE-Chen Jun 19, 2026
edcbf31
Merge pull request #234 from Integration-Automation/feat/devex-batch
JE-Chen Jun 19, 2026
78e5182
Tests: build secret-shaped fixtures at runtime to clear gitleaks/Sonar
JE-Chen Jun 19, 2026
850a8cc
Tests: approx float compares and build password fixtures to clear Son…
JE-Chen Jun 19, 2026
474d8b6
Tests: approx the remaining float equality checks (Sonar S1244)
JE-Chen Jun 19, 2026
6cf996a
Add process-documentation (SOP) generator from action lists
JE-Chen Jun 19, 2026
8dfed7d
Merge pull request #235 from Integration-Automation/feat/analysis-batch
JE-Chen Jun 19, 2026
1db7940
Merge pull request #236 from Integration-Automation/feat/process-doc-…
JE-Chen Jun 19, 2026
c80c4b7
Add eased/tweened interpolated drag
JE-Chen Jun 19, 2026
cd08c18
Merge pull request #237 from Integration-Automation/feat/input-extra-…
JE-Chen Jun 19, 2026
9083fa5
Add MCP structured tool output (outputSchema + structuredContent)
JE-Chen Jun 19, 2026
49ce7d0
Add plugin SDK: discover/load third-party AC_* commands via entry points
JE-Chen Jun 19, 2026
5cda481
Merge pull request #238 from Integration-Automation/feat/mcp-structur…
JE-Chen Jun 19, 2026
be6af5f
Add maker-checker approval gate for high-risk actions
JE-Chen Jun 19, 2026
ddd11a1
Merge pull request #239 from Integration-Automation/feat/plugin-sdk-b…
JE-Chen Jun 19, 2026
d2c50b8
Merge pull request #240 from Integration-Automation/feat/governance-b…
JE-Chen Jun 19, 2026
b2cee5f
Add just-in-time credential leases (zero standing privilege)
JE-Chen Jun 19, 2026
ee79f63
Add network egress allowlist guard for the HTTP client
JE-Chen Jun 19, 2026
a442db4
Merge pull request #241 from Integration-Automation/feat/credential-l…
JE-Chen Jun 19, 2026
585c4e5
Use https in egress test URL to satisfy Sonar S5332 hotspot
JE-Chen Jun 19, 2026
70122c4
Add approval testing: verify artifacts against approved baselines
JE-Chen Jun 19, 2026
08c8dee
Merge pull request #242 from Integration-Automation/feat/egress-guard…
JE-Chen Jun 19, 2026
052286c
Merge pull request #243 from Integration-Automation/feat/approval-tes…
JE-Chen Jun 19, 2026
8ae6a3b
Add agent trajectory evaluation against declarative rubrics
JE-Chen Jun 19, 2026
aad9ddc
Document trajectory evaluation in toctrees and README
JE-Chen Jun 19, 2026
8f5b63c
Use pytest.approx for trajectory score comparisons (Sonar S1244)
JE-Chen Jun 19, 2026
dd602de
Merge pull request #244 from Integration-Automation/feat/trajectory-e…
JE-Chen Jun 19, 2026
6f8bd6e
Add SOC2/ISO 27001 compliance control evidence report
JE-Chen Jun 19, 2026
187f313
Merge pull request #245 from Integration-Automation/feat/compliance-r…
JE-Chen Jun 19, 2026
243b3aa
Add GenAI OpenTelemetry-convention agent tracing
JE-Chen Jun 19, 2026
8953cd3
Merge pull request #246 from Integration-Automation/feat/agent-trace-…
JE-Chen Jun 19, 2026
5920f71
Add video step-overlay walkthrough report
JE-Chen Jun 19, 2026
4fe0e48
Merge pull request #247 from Integration-Automation/feat/video-overla…
JE-Chen Jun 19, 2026
386638f
Add fuzzy string matching and dedupe (difflib default, optional rapid…
JE-Chen Jun 19, 2026
81394ca
Use pytest.approx for fuzzy ratio comparisons (Sonar S1244)
JE-Chen Jun 19, 2026
a2bf011
Merge pull request #248 from Integration-Automation/feat/fuzzy-match-…
JE-Chen Jun 19, 2026
0296020
Add S3-compatible artifact store (optional boto3, injectable client)
JE-Chen Jun 19, 2026
3f0fc5f
Merge pull request #249 from Integration-Automation/feat/s3-store-batch
JE-Chen Jun 19, 2026
e23ca66
Add perceptual-hash image dedupe (Pillow aHash/dHash)
JE-Chen Jun 19, 2026
a3daf70
Merge pull request #250 from Integration-Automation/feat/image-dedup-…
JE-Chen Jun 20, 2026
486b1db
Add locale-aware number/currency/date parsing (optional babel)
JE-Chen Jun 20, 2026
2b7bd07
Merge pull request #251 from Integration-Automation/feat/locale-parse…
JE-Chen Jun 20, 2026
51f4846
Add voice-command router (injectable speech-to-text)
JE-Chen Jun 20, 2026
d8ad5f9
Merge pull request #252 from Integration-Automation/feat/voice-router…
JE-Chen Jun 20, 2026
745dbb8
Add coordinate-space mapping (model grid <-> physical pixels)
JE-Chen Jun 20, 2026
952bb4a
Merge pull request #253 from Integration-Automation/feat/coordinate-s…
JE-Chen Jun 20, 2026
5272824
Add mechanical stuck-loop guard for agent loops
JE-Chen Jun 20, 2026
76c6eb3
Merge pull request #254 from Integration-Automation/feat/loop-guard-b…
JE-Chen Jun 20, 2026
23f96d5
Add task/process mining for automation-candidate discovery
JE-Chen Jun 20, 2026
c98fe41
Merge pull request #255 from Integration-Automation/feat/process-mini…
JE-Chen Jun 20, 2026
dd465a2
Add environment-scoped typed asset store
JE-Chen Jun 20, 2026
f1e16c8
Dedupe asset adapters via shared helpers; avoid password literal in test
JE-Chen Jun 20, 2026
381699d
Extract shared json_store helper to remove duplicated persistence boi…
JE-Chen Jun 20, 2026
d1ace35
Rename asset 'type' arg to 'asset_type' (Pylint W0622 redefined-builtin)
JE-Chen Jun 20, 2026
7c4d75f
Merge pull request #256 from Integration-Automation/feat/assets-batch
JE-Chen Jun 20, 2026
2509c7d
Add outbound CloudEvents emitter
JE-Chen Jun 20, 2026
265b6d8
Merge pull request #257 from Integration-Automation/feat/cloudevents-…
JE-Chen Jun 20, 2026
c146a21
Add multi-channel webhook notifications (Slack/Discord/Teams/raw)
JE-Chen Jun 20, 2026
b35e113
Mark Teams MessageCard @context http URI as reviewed (Sonar S5332)
JE-Chen Jun 20, 2026
4031a6f
Move NOSONAR S5332 inline on the Teams @context line
JE-Chen Jun 20, 2026
db60bd9
Merge pull request #258 from Integration-Automation/feat/notify-chann…
JE-Chen Jun 20, 2026
274eefe
Add JSONPath querying over parsed JSON
JE-Chen Jun 20, 2026
b8e1be7
Rewrite JSONPath tokenizer as a linear scanner (Sonar S5843/S5852)
JE-Chen Jun 20, 2026
5e54e60
Merge pull request #259 from Integration-Automation/feat/jsonpath-batch
JE-Chen Jun 20, 2026
22c6841
Add saga orchestrator with compensating rollback
JE-Chen Jun 20, 2026
53cf582
Merge pull request #260 from Integration-Automation/feat/saga-batch
JE-Chen Jun 20, 2026
b7dfc4a
Add DMN-style decision tables
JE-Chen Jun 20, 2026
e69e8a1
Merge pull request #261 from Integration-Automation/feat/decision-tab…
JE-Chen Jun 20, 2026
6f3fa1e
Add self-healing locator write-back (learned-locator store)
JE-Chen Jun 20, 2026
010f0d2
Merge pull request #262 from Integration-Automation/feat/locator-repa…
JE-Chen Jun 20, 2026
435415e
Add text PII detection and redaction
JE-Chen Jun 20, 2026
5d3a4ea
Merge pull request #263 from Integration-Automation/feat/pii-text-batch
JE-Chen Jun 20, 2026
badd3ad
Add SARIF 2.1.0 findings export
JE-Chen Jun 20, 2026
7ec1a09
Merge pull request #264 from Integration-Automation/feat/sarif-batch
JE-Chen Jun 20, 2026
2828f5c
Add JSON Schema validation of parsed JSON
JE-Chen Jun 20, 2026
9074652
Merge pull request #265 from Integration-Automation/feat/json-schema-…
JE-Chen Jun 20, 2026
e2fe403
Add OSV dependency vulnerability scanning
JE-Chen Jun 20, 2026
727473b
Merge pull request #266 from Integration-Automation/feat/osv-vuln-scan
JE-Chen Jun 20, 2026
5749cfb
Add OpenVEX vulnerability triage
JE-Chen Jun 20, 2026
5947144
Merge pull request #267 from Integration-Automation/feat/openvex
JE-Chen Jun 20, 2026
4b2df61
Add SPDX license policy gate
JE-Chen Jun 20, 2026
fb4f5b0
Invert license alias table to avoid duplicated SPDX literals
JE-Chen Jun 20, 2026
bb9e09f
Strip license suffix without regex to avoid ReDoS hotspot
JE-Chen Jun 20, 2026
31f00db
Merge pull request #268 from Integration-Automation/feat/license-policy
JE-Chen Jun 20, 2026
68a0398
Add JSON Web Token (HMAC) encode/decode
JE-Chen Jun 20, 2026
7d27357
Merge pull request #269 from Integration-Automation/feat/jwt
JE-Chen Jun 20, 2026
f7f3c0a
Add client-side rate limiting
JE-Chen Jun 20, 2026
8458e86
Merge pull request #270 from Integration-Automation/feat/rate-limit
JE-Chen Jun 20, 2026
3fb6139
Add JSON Pointer, Patch and Merge Patch
JE-Chen Jun 20, 2026
ae68c9d
Build pointer tokens with an explicit loop for analyzer clarity
JE-Chen Jun 20, 2026
7625bbe
Guard whole-document pointer by string to avoid analyzer false positives
JE-Chen Jun 20, 2026
76207e0
Merge pull request #271 from Integration-Automation/feat/json-patch
JE-Chen Jun 20, 2026
dd08d20
Add BM25/TF-IDF full-text search index
JE-Chen Jun 20, 2026
6f8c26d
Merge pull request #272 from Integration-Automation/feat/search-index
JE-Chen Jun 20, 2026
3cb667c
Add statistics and A/B significance testing
JE-Chen Jun 20, 2026
c3dd82d
Mark reachable beta-domain guards to satisfy the static analyzer
JE-Chen Jun 20, 2026
bb609f3
Merge pull request #273 from Integration-Automation/feat/stats
JE-Chen Jun 20, 2026
4e53c77
Add RFC 5545 recurrence-rule expansion
JE-Chen Jun 20, 2026
99c7085
Merge pull request #274 from Integration-Automation/feat/recurrence
JE-Chen Jun 20, 2026
9027dc8
Add text diff apply and three-way merge
JE-Chen Jun 21, 2026
e076552
Merge pull request #275 from Integration-Automation/feat/text-diff
JE-Chen Jun 21, 2026
420e003
Add feature-flag engine with targeting and rollout
JE-Chen Jun 21, 2026
0f138c0
Merge pull request #276 from Integration-Automation/feat/feature-flags
JE-Chen Jun 21, 2026
0f908df
Add SLSA build provenance attestation
JE-Chen Jun 21, 2026
3184798
Merge pull request #277 from Integration-Automation/feat/provenance
JE-Chen Jun 21, 2026
3cab323
Add JSON contract and snapshot matching
JE-Chen Jun 21, 2026
771f088
Rename JSON snapshot to snapshot_json to avoid facade name clash
JE-Chen Jun 21, 2026
96364bd
Merge pull request #278 from Integration-Automation/feat/json-contract
JE-Chen Jun 21, 2026
33d6b41
Add deterministic chaos experiment runner
JE-Chen Jun 21, 2026
7d114a6
Use pytest.approx for chaos duration float check
JE-Chen Jun 21, 2026
fd0c7e0
Merge pull request #279 from Integration-Automation/feat/chaos
JE-Chen Jun 21, 2026
d52b463
Add SLO evaluation with error budget and burn-rate alerts
JE-Chen Jun 21, 2026
655f799
Use pytest.approx for SLO float assertions
JE-Chen Jun 21, 2026
e46f708
Merge pull request #280 from Integration-Automation/feat/slo
JE-Chen Jun 21, 2026
868c1bd
Add mergeable streaming latency percentile digest
JE-Chen Jun 21, 2026
79f924c
Use pytest.approx for empty-digest percentile check
JE-Chen Jun 21, 2026
289409b
Merge pull request #281 from Integration-Automation/feat/percentiles
JE-Chen Jun 21, 2026
9397943
Add bulkhead concurrency isolation and rate-limit header parsing
JE-Chen Jun 21, 2026
2ff4c00
Avoid empty with-block in bulkhead test
JE-Chen Jun 21, 2026
de8b4bf
Merge pull request #282 from Integration-Automation/feat/bulkhead
JE-Chen Jun 21, 2026
21e3e18
Add HTTP record/replay cassette for offline API tests
JE-Chen Jun 21, 2026
0cdca27
Merge pull request #283 from Integration-Automation/feat/http-cassett…
JE-Chen Jun 21, 2026
a903c61
Add W3C Trace Context propagation
JE-Chen Jun 21, 2026
d6c4d1f
Use deterministic byte source in trace-context test (drop random)
JE-Chen Jun 21, 2026
d3b2389
Merge pull request #284 from Integration-Automation/feat/trace-contex…
JE-Chen Jun 21, 2026
ef26b6f
Add data profiling and schema inference
JE-Chen Jun 21, 2026
6aacbba
Use pytest.approx for float comparisons in data-profile test
JE-Chen Jun 21, 2026
c225cb7
Merge pull request #285 from Integration-Automation/feat/data-profile…
JE-Chen Jun 21, 2026
b29a840
Add RFC 9457 problem+json parsing
JE-Chen Jun 21, 2026
4881b29
Merge pull request #286 from Integration-Automation/feat/http-problem…
JE-Chen Jun 21, 2026
9b749c7
Add .env (dotenv) parsing and serialisation
JE-Chen Jun 21, 2026
7b86ac0
Merge pull request #287 from Integration-Automation/feat/dotenv-batch
JE-Chen Jun 21, 2026
d08582e
Add client-side Server-Sent Events parser
JE-Chen Jun 21, 2026
35c53ba
Merge pull request #288 from Integration-Automation/feat/sse-client-b…
JE-Chen Jun 21, 2026
757a227
Add layered configuration resolver
JE-Chen Jun 21, 2026
858d4f7
Merge pull request #289 from Integration-Automation/feat/layered-conf…
JE-Chen Jun 21, 2026
fd9a097
Add distribution drift detection
JE-Chen Jun 21, 2026
29a2920
Merge pull request #290 from Integration-Automation/feat/data-drift-b…
JE-Chen Jun 21, 2026
97d183c
Add tabular dataset diff by key
JE-Chen Jun 21, 2026
11ef092
Merge pull request #291 from Integration-Automation/feat/dataset-diff…
JE-Chen Jun 21, 2026
743f183
Add W3C Baggage propagation
JE-Chen Jun 21, 2026
6e7bc9b
Merge pull request #292 from Integration-Automation/feat/baggage-batch
JE-Chen Jun 21, 2026
f97a1f8
Add URI-scheme value reference resolver
JE-Chen Jun 21, 2026
07da408
Avoid http:// literal in secret-ref test (Sonar S5332 hotspot)
JE-Chen Jun 21, 2026
09e9cb8
Merge pull request #293 from Integration-Automation/feat/secret-ref-b…
JE-Chen Jun 21, 2026
7bfba06
Add cross-dataset referential integrity checks
JE-Chen Jun 21, 2026
ce24ba1
Merge pull request #294 from Integration-Automation/feat/referential-…
JE-Chen Jun 21, 2026
713315e
Add RFC 8288 Link header parsing and pagination
JE-Chen Jun 21, 2026
b14d6a9
Merge pull request #295 from Integration-Automation/feat/link-header-…
JE-Chen Jun 21, 2026
0d7a197
Add secret redaction for config structures and logs
JE-Chen Jun 21, 2026
793d9f6
Merge pull request #296 from Integration-Automation/feat/config-redac…
JE-Chen Jun 21, 2026
e8b415b
Add multipart/form-data build and parse
JE-Chen Jun 21, 2026
374976b
Replace multipart disposition regex with non-regex parser (Sonar S5852)
JE-Chen Jun 21, 2026
1a13154
Merge pull request #297 from Integration-Automation/feat/multipart-batch
JE-Chen Jun 21, 2026
85cb92d
Add HTTP content negotiation and response decompression
JE-Chen Jun 21, 2026
6d12701
Merge pull request #298 from Integration-Automation/feat/http-content…
JE-Chen Jun 21, 2026
24fa2cd
Add RFC 6265 cookie jar for HTTP session carry
JE-Chen Jun 21, 2026
beca532
Merge pull request #299 from Integration-Automation/feat/cookie-jar-b…
JE-Chen Jun 21, 2026
3d97de5
Add conditional HTTP requests and cache validators
JE-Chen Jun 21, 2026
a60e9b1
Merge pull request #300 from Integration-Automation/feat/http-conditi…
JE-Chen Jun 21, 2026
51332e0
Add canonical log lines and structured JSON logging
JE-Chen Jun 21, 2026
b1ed43e
Use pytest.approx for timer float compare (Sonar S1244)
JE-Chen Jun 21, 2026
c10a39b
Merge pull request #301 from Integration-Automation/feat/canonical-lo…
JE-Chen Jun 21, 2026
b5e9e60
Add OTLP/JSON span export
JE-Chen Jun 21, 2026
b39a604
Merge pull request #302 from Integration-Automation/feat/otlp-export-…
JE-Chen Jun 21, 2026
f4387aa
Add typed configuration schema validation
JE-Chen Jun 21, 2026
f68abc9
Use pytest.approx for float comparisons in config-schema test (Sonar …
JE-Chen Jun 21, 2026
1ecbe9f
Merge pull request #303 from Integration-Automation/feat/config-schem…
JE-Chen Jun 21, 2026
181157d
Add JSON-Schema compatibility classification
JE-Chen Jun 21, 2026
426d1cb
Merge pull request #304 from Integration-Automation/feat/schema-compa…
JE-Chen Jun 21, 2026
a29ec8b
Add Unicode text normalisation and slugify
JE-Chen Jun 21, 2026
331a6c2
Merge pull request #305 from Integration-Automation/feat/text-normali…
JE-Chen Jun 21, 2026
2984e91
Add time-series transforms (rate / downsample / resample)
JE-Chen Jun 21, 2026
b4aa9ad
Use pytest.approx for float comparisons in timeseries test (Sonar S1244)
JE-Chen Jun 21, 2026
438decc
Merge pull request #306 from Integration-Automation/feat/timeseries-b…
JE-Chen Jun 21, 2026
d09debc
Add string-distance similarity metrics
JE-Chen Jun 21, 2026
8afa606
Replace globals() dispatch with explicit table in similarity (Codacy …
JE-Chen Jun 21, 2026
481bbee
Merge pull request #307 from Integration-Automation/feat/text-similar…
JE-Chen Jun 21, 2026
e31580e
Add near-duplicate text detection (SimHash / MinHash)
JE-Chen Jun 21, 2026
991ec6a
Use pytest.approx for minhash float comparisons (Sonar S1244)
JE-Chen Jun 21, 2026
e57e4c8
Merge pull request #308 from Integration-Automation/feat/near-dup-batch
JE-Chen Jun 21, 2026
c943290
Add single-series anomaly detection
JE-Chen Jun 21, 2026
9bb0e1a
Merge pull request #309 from Integration-Automation/feat/anomaly-batch
JE-Chen Jun 21, 2026
2e09e6c
Add moving-average smoothing (SMA / WMA / EWMA / rolling)
JE-Chen Jun 22, 2026
8dbc7d3
Merge pull request #310 from Integration-Automation/feat/smoothing-batch
JE-Chen Jun 22, 2026
9db1b08
Add idempotency-key store with stored responses
JE-Chen Jun 22, 2026
8a6f13c
Merge pull request #311 from Integration-Automation/feat/idempotency-…
JE-Chen Jun 22, 2026
2bc97ad
Add time-windowed message deduplication (exactly-once inbox)
JE-Chen Jun 22, 2026
618a104
Merge pull request #312 from Integration-Automation/feat/dedup-window…
JE-Chen Jun 22, 2026
3f270de
Add per-stream sequence-gap detection
JE-Chen Jun 22, 2026
d41b970
Merge pull request #313 from Integration-Automation/feat/sequence-gap…
JE-Chen Jun 22, 2026
95cc8c6
Add optimistic-concurrency versioned store (CAS / If-Match)
JE-Chen Jun 22, 2026
dbc24a7
Merge pull request #314 from Integration-Automation/feat/optimistic-b…
JE-Chen Jun 22, 2026
6db77da
Add transactional outbox for durable at-least-once event delivery
JE-Chen Jun 22, 2026
6a9566c
Merge pull request #315 from Integration-Automation/feat/outbox-batch
JE-Chen Jun 22, 2026
b2526d5
Add locale-aware string collation with multi-level sort keys
JE-Chen Jun 22, 2026
d6a079d
Merge pull request #316 from Integration-Automation/feat/locale-colla…
JE-Chen Jun 22, 2026
95a4ef6
Add confusable / homoglyph detection for Unicode spoofing
JE-Chen Jun 22, 2026
74475fe
Merge pull request #317 from Integration-Automation/feat/confusables-…
JE-Chen Jun 22, 2026
77f2041
Add readability scoring (Flesch, Flesch-Kincaid, Fog, SMOG, ARI)
JE-Chen Jun 22, 2026
c5ee241
Use pytest.approx for empty-text readability assertions (S1244)
JE-Chen Jun 22, 2026
5e543f5
Merge pull request #318 from Integration-Automation/feat/readability-…
JE-Chen Jun 22, 2026
44ca1b7
Add bidirectional-text QA with Trojan-source detection
JE-Chen Jun 22, 2026
8e8f5d6
Merge pull request #319 from Integration-Automation/feat/bidi-check-b…
JE-Chen Jun 22, 2026
4cf58c6
Add locale-aware list formatting (CLDR-style and/or/unit)
JE-Chen Jun 22, 2026
b09bccd
Merge pull request #320 from Integration-Automation/feat/list-format-…
JE-Chen Jun 22, 2026
cf64c2f
Add ICU-lite MessageFormat (plural/select/selectordinal)
JE-Chen Jun 22, 2026
6a1fa1a
Merge pull request #321 from Integration-Automation/feat/message-form…
JE-Chen Jun 22, 2026
af59b47
Add GNU gettext catalog I/O (parse .po, compile/read .mo)
JE-Chen Jun 22, 2026
fdbe851
Merge pull request #322 from Integration-Automation/feat/gettext-cata…
JE-Chen Jun 22, 2026
05700e7
Merge remote-tracking branch 'origin/main' into dev
JE-Chen Jun 22, 2026
7439587
Fix SonarCloud findings for the dev->main release
JE-Chen Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ __pycache__/
build/
develop-eggs/
dist/
node_modules/
downloads/
eggs/
.eggs/
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ Run before every commit; fix all new findings:
pip install ruff pylint bandit radon
ruff check je_auto_control/
pylint je_auto_control/
bandit -r je_auto_control/ -x je_auto_control/test
bandit -c pyproject.toml -r je_auto_control/ # uses [tool.bandit] excludes/skips
radon cc je_auto_control/ -a -nc # flags functions with CC >= C (>10)
```

Expand Down
886 changes: 886 additions & 0 deletions README.md

Large diffs are not rendered by default.

875 changes: 875 additions & 0 deletions README/README_zh-CN.md

Large diffs are not rendered by default.

875 changes: 875 additions & 0 deletions README/README_zh-TW.md

Large diffs are not rendered by default.

216 changes: 108 additions & 108 deletions autocontrol-lsp/vscode/package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion autocontrol-lsp/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@
"devDependencies": {
"@types/node": "^20.0.0",
"@types/vscode": "^1.85.0",
"esbuild": "^0.25.0",
"esbuild": "^0.28.1",
"typescript": "^5.4.0",
"vscode-languageclient": "^9.0.1"
}
Expand Down
6 changes: 6 additions & 0 deletions dev_requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@ qt-material==2.17
mss==10.2.0
defusedxml==0.7.1

# Office I/O ([office] extra) — exercised by the headless Office tests.
openpyxl==3.1.5
python-docx==1.2.0
python-pptx==1.0.2

# Quality tooling — used by .github/workflows/quality.yml and locally.
ruff==0.15.14
bandit==1.9.4
pytest==9.0.3
pytest-timeout==2.4.0
pytest-rerunfailures==15.1
46 changes: 46 additions & 0 deletions docs/source/Eng/doc/new_features/v100_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Near-Duplicate Text Detection (SimHash / MinHash)
=================================================

``fuzzy.fuzzy_dedupe`` is O(n²) pairwise ``SequenceMatcher`` with no stable
fingerprint, and ``image_dedup`` only hashes pixels. This adds text
fingerprints — SimHash (Hamming-distance near-dup) and MinHash (estimated
Jaccard) — that scale and give a reusable signature, the text analog of the
perceptual image hash.

Pure standard library (``hashlib`` / ``re``); imports no ``PySide6``. A fixed
hash (``blake2b``, not the salted built-in ``hash()``) keeps fingerprints
deterministic across runs and CI.

Headless API
------------

.. code-block:: python

from je_auto_control import (
simhash, near_duplicates, minhash_signature, minhash_similarity,
)

h1 = simhash("the quick brown fox jumps over the lazy dog")
h2 = simhash("the quick brown fox jumps over the lazy dogs")
# small Hamming distance ⇒ near-duplicate

clusters = near_duplicates(docs, max_distance=12) # groups of indices

sig_a = minhash_signature(text_a)
minhash_similarity(sig_a, minhash_signature(text_b)) # ~ Jaccard

``simhash`` returns a ``bits``-wide fingerprint from word shingles;
``hamming_distance`` (shared with ``image_dedup``) measures bit difference.
``near_duplicates`` clusters texts whose SimHashes are within ``max_distance``
bits, returning a partition of indices (singletons included).
``minhash_signature`` / ``minhash_similarity`` give a MinHash signature and a
Jaccard estimate for set-overlap style dedup. Run ``normalize_text`` first for
accent/form-insensitive fingerprints.

Executor commands
-----------------

``AC_simhash`` returns ``{simhash}`` for a ``text``; ``AC_near_duplicates``
returns ``{clusters}`` for ``texts`` within ``max_distance``. Both are exposed
as MCP tools (``ac_simhash`` / ``ac_near_duplicates``) and as Script Builder
commands under **Data**.
41 changes: 41 additions & 0 deletions docs/source/Eng/doc/new_features/v101_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
Single-Series Anomaly Detection
===============================

``data_drift`` answers "did the *distribution* shift between two batches" — it
cannot point at *which* value in one live series is anomalous — and
``slo.burn_alerts`` only thresholds error-budget burn, not arbitrary metric
values (latency spikes, cost spikes, CPU). This flags outliers in a single
series via z-score, robust MAD (modified z-score), and an EWMA control chart.

Pure standard library (``math`` / ``statistics``); imports no ``PySide6``. Every
function is pure (values in, flags out), so it is fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import detect_anomalies, mad_anomalies, ewma_control

series = [10, 11, 9, 10, 12, 10, 95, 11, 10] # index 6 is the spike
mad_anomalies(series) # [6] (robust)
detect_anomalies(series, method="mad")
# [{index, value, score, is_anomaly}, ...]

ewma_control(values, alpha=0.5, target_mean=10, target_sigma=1) # shift indices

``detect_anomalies`` scores each value (``mad`` default, or ``zscore``) and flags
those past the threshold (3.5 for MAD, 3.0 for z-score). ``mad_anomalies`` /
``zscore_anomalies`` return just the flagged indices, and ``mad_scores`` /
``zscore_scores`` the raw scores. MAD (Iglewicz-Hoaglin modified z-score) is
robust to outliers inflating the spread, so it stays sensitive where a plain
z-score would not. ``ewma_control`` is an EWMA control chart for sustained
level shifts — pass ``target_mean`` / ``target_sigma`` for an in-control
baseline (else the series' own stats).

Executor command
----------------

``AC_detect_anomalies`` takes a ``values`` list (optional ``method`` /
``threshold``) and returns ``{results}``. It is exposed as the MCP tool
``ac_detect_anomalies`` and as a Script Builder command under **Data**.
35 changes: 35 additions & 0 deletions docs/source/Eng/doc/new_features/v102_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
Moving-Average Smoothing
========================

``stats.describe`` summarises a whole sample and ``timeseries`` rolls counters
into rates, but nothing smoothed a noisy signal or weighted recent points. This
adds trailing simple / weighted / exponentially-weighted moving averages and a
generic rolling reducer.

Pure standard library; imports no ``PySide6``. Every function is pure (values
in, list out), so it is fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import sma, wma, ewma, rolling

sma([1, 2, 3, 4], 2) # [1.0, 1.5, 2.5, 3.5]
ewma([1, 2, 3], alpha=0.5) # [1.0, 1.5, 2.25]
wma(values, [1, 2, 3]) # weights align to the latest points
rolling(values, 5, max) # generic trailing-window reduction

``sma`` averages each trailing window of ``window`` points; ``wma`` applies the
given weights (latest-aligned); ``ewma`` smooths with factor ``alpha`` in
``(0, 1]``; ``rolling`` applies any reducer over each trailing window. All
return a same-length list, so the result lines up with the input timeline (a
``resource_profiler`` FPS/CPU series, a latency stream, etc.).

Executor commands
-----------------

``AC_sma`` returns ``{series}`` for ``values`` over a ``window``; ``AC_ewma``
returns ``{series}`` for an ``alpha``. Both are exposed as MCP tools (``ac_sma``
/ ``ac_ewma``) and as Script Builder commands under **Data**.
43 changes: 43 additions & 0 deletions docs/source/Eng/doc/new_features/v103_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Idempotency-Key Store
=====================

``resilience.RetryPolicy`` *re-executes* on retry and ``work_queue`` dedups only
in-flight references — nothing cached the first result so a duplicate request
returns the *same* response without re-running the side effect. This is the
Stripe idempotency pattern: register a key, run the work once, and replay the
stored response for any duplicate.

Pure standard library (``hashlib`` / ``json``); imports no ``PySide6``. The
clock is injectable and the store is in-memory with JSON persistence, so TTL
expiry and replay are fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import IdempotencyStore, request_fingerprint

store = IdempotencyStore(ttl=86400)
state = store.begin("order-42", request_fingerprint(payload))
if state["status"] == "completed":
return state["response"] # replay — do not re-run
result = charge(payload) # run the side effect once
store.complete("order-42", result)

``begin`` returns ``{status, response}`` where status is ``new`` (first time),
``in_progress`` (a duplicate before completion), or ``completed`` (replay the
stored response); reusing a key with a different ``request`` fingerprint raises
``IdempotencyConflict`` (Stripe's HTTP-400 behaviour). ``complete`` records the
response, ``get`` reads a live record, and ``save`` / ``load`` persist the store
as JSON. ``request_fingerprint`` is a stable, order-independent SHA-256 of a
payload.

Executor commands
-----------------

``AC_idempotency_begin`` registers/looks up a ``key`` in a named store (optional
``request`` for conflict detection); ``AC_idempotency_complete`` stores the
``response``. Both use a named-instance registry (like circuit breakers /
bulkheads) and are exposed as MCP tools (``ac_idempotency_begin`` /
``ac_idempotency_complete``) and as Script Builder commands under **Flow**.
37 changes: 37 additions & 0 deletions docs/source/Eng/doc/new_features/v104_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Time-Windowed Deduplication
===========================

``work_queue`` dedups only ``new`` / ``in_progress`` references — once an item
completes, the same reference enqueues again, and redelivered webhooks are
reprocessed. This adds the missing "seen this id in the last N seconds → drop
it" inbox that converts at-least-once delivery to exactly-once-in-window.

Pure standard library; imports no ``PySide6``. The clock is injectable, so TTL
eviction is fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import DedupWindow

inbox = DedupWindow(ttl_s=3600)
if inbox.check_and_mark(event_id):
process(event) # first time within the window
else:
skip(event) # duplicate / redelivery

``check_and_mark`` atomically returns ``True`` the first time an id is seen
within the window (and marks it) or ``False`` for a duplicate. ``seen`` / ``mark``
are the separate query/record halves, ``purge_expired`` drops stale entries, and
``size`` reports the live count. Entries older than ``ttl_s`` are evicted on each
operation, so the window stays bounded.

Executor command
----------------

``AC_dedup_check`` check-and-marks a ``message_id`` in a named window (TTL
``ttl_s``) and returns ``{first_seen, size}``. It uses a named-instance registry
and is exposed as the MCP tool ``ac_dedup_check`` and as a Script Builder
command under **Flow**.
39 changes: 39 additions & 0 deletions docs/source/Eng/doc/new_features/v105_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Per-Stream Sequence-Gap Detection
=================================

Nothing tracked per-stream monotonic sequence numbers to detect missing,
out-of-order, or duplicate messages. ``dedup_window`` says "seen this id
before"; this complements it by classifying each sequence number and tracking
the outstanding gaps and high-water mark per stream.

Pure standard library; imports no ``PySide6``. State is in-memory and fully
injectable, so detection is deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import SequenceTracker

tracker = SequenceTracker()
tracker.observe("orders", 1) # {"status": "ok", ...}
tracker.observe("orders", 4) # {"status": "gap", "missing": [2, 3]}
tracker.observe("orders", 3) # {"status": "reorder", "missing": [2]}
tracker.gaps("orders") # [2]
tracker.high_water("orders") # 4

``observe`` returns ``{status, seq, missing}`` where status is ``ok`` (next in
order or the first seen), ``duplicate`` (already seen), ``gap`` (numbers were
skipped — they are recorded as missing), or ``reorder`` (a late earlier number,
which fills a gap when applicable). ``gaps`` lists the outstanding missing
numbers and ``high_water`` is the highest seen. Streams are tracked
independently by ``stream_id``.

Executor command
----------------

``AC_sequence_observe`` observes a ``seq`` on a ``stream_id`` in a named tracker
and returns the classification. It uses a named-instance registry and is exposed
as the MCP tool ``ac_sequence_observe`` and as a Script Builder command under
**Flow**.
42 changes: 42 additions & 0 deletions docs/source/Eng/doc/new_features/v106_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
Optimistic-Concurrency Versioned Store
======================================

``http_conditional`` uses ETag for *read* caching (``If-None-Match`` / 304) but
never for *write* concurrency (``If-Match`` / version check). There was no local
compare-and-swap / versioned record store for "update only if the version is
unchanged". This fills the write side of the ETag story.

Pure standard library (``json``); imports no ``PySide6``. The version is a
monotonic int and the store is in-memory with JSON persistence, so behaviour is
fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import VersionedStore, VersionConflict, if_match_header

store = VersionedStore()
version = store.put("db.host", "prod-1") # version 1
record = store.get("db.host") # {"value": ..., "version": 1}
try:
store.put("db.host", "prod-2", expected_version=record["version"])
except VersionConflict:
reload_and_retry()
header = if_match_header(version) # '"1"' for an HTTP If-Match

``put`` writes only when ``expected_version`` matches the current version
(``0`` requires the key to be absent, omitting it is a blind write) and returns
the new version, raising ``VersionConflict`` on a stale write. ``get`` returns
``{value, version}``; ``delete`` is likewise guarded; ``save`` / ``load``
persist as JSON. ``if_match_header`` / ``check_if_match`` bridge to real HTTP
``If-Match`` writes alongside ``http_conditional``.

Executor commands
-----------------

``AC_cas_put`` returns ``{ok, version}`` (or ``{ok: false, error}`` on conflict);
``AC_cas_get`` returns ``{record}``. Both use a named-instance registry and are
exposed as MCP tools (``ac_cas_put`` / ``ac_cas_get``) and as Script Builder
commands under **Flow**.
46 changes: 46 additions & 0 deletions docs/source/Eng/doc/new_features/v107_features_doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Transactional Outbox
====================

``events.cloud_events`` posts immediately and synchronously — a crash between
"did the work" and "sent the event" loses it, and a network blip drops it (no
durability, no retry, no replay). The transactional-outbox pattern persists each
event first and drains it later with at-least-once delivery and a dead-letter
cap, so events survive sink outages.

Pure standard library (``json``); imports no ``PySide6``. The delivery ``sink``
is injected and the store is in-memory with JSON persistence, so draining is
fully deterministic in CI.

Headless API
------------

.. code-block:: python

from je_auto_control import Outbox

box = Outbox()
box.enqueue({"type": "order.created", "id": 7}) # buffered, pending
box.enqueue({"type": "order.paid", "id": 7})

result = box.drain(post_to_webhook, max_batch=100, max_attempts=5)
# {"sent": 2, "failed": 0, "remaining": 0}

box.pending() # entries still awaiting delivery
box.dead_letters() # entries that exhausted their attempts

``enqueue`` appends an event as pending and returns its id. ``drain`` delivers
up to ``max_batch`` pending entries through the injected ``sink``; a sink
exception leaves the entry pending for retry until ``max_attempts``, after which
it is dead-lettered (recorded with its error). Delivery is at-least-once: a sink
that succeeds but is interrupted before the entry is marked sent will be retried.
``save`` / ``load`` persist the whole buffer as JSON so events outlive the
process.

Executor commands
-----------------

``AC_outbox_enqueue`` returns ``{id, pending}``; ``AC_outbox_pending`` returns
``{pending}``. Both use a named-instance registry and are exposed as MCP tools
(``ac_outbox_enqueue`` / ``ac_outbox_pending``) and as Script Builder commands
under **Flow**. Draining requires a callable sink, so it stays a headless / API
operation.
Loading
Loading