| deployment stack27 |
| 🚀 ng-objects #55 |
Proper wotaskd integration: complete WOMPRequestHandler and align with the WO admin protocol |
feature |
M |
| 🤖 modulo #5 |
Per-Site error pages (replacing Jetty defaults) |
feature |
M |
| 🤖 modulo #6 |
Unify plain and front-end startup into a single handler pipeline |
cleanup |
M |
| 🤖 modulo #13 |
A site's identity and storage shouldn't hang off its first hostname |
design note |
M |
| 🔌 wo-adaptor-jetty #7 |
One Jetty server for the adaptors and modulo; adaptors become handlers |
design note |
L |
| ⚙️️ wonder-slim-deployment #2 |
Replace SpawnOfWotaskd.sh wrapper with ProcessBuilder |
cleanup |
S |
| ⚙️️ wonder-slim-deployment #8 |
Pull non-model concerns (HTTP, error reporting, runtime control) out of model classes |
cleanup |
M |
| ⚙️️ wonder-slim-deployment #9 |
Test calculateNextScheduledShutdown for day-of-week / off-by-one bugs after java.time migration |
cleanup |
S |
| ⚙️️ wonder-slim-deployment #10 |
Implement actual force-quit (current button is misleadingly named) |
feature |
M |
| ⚙️️ wonder-slim-deployment #11 |
Spawn WOApps directly from wotaskd (replace launch script) |
feature |
M |
| ⚙️️ wonder-slim-deployment #14 |
Content-addressed artifact store for deployments (rsync-equivalent over web services) |
design note |
L |
| ⚙️️ wonder-slim-deployment #17 |
Replace 30s passive wait on wotaskd startup with active liveness probe |
bug |
S |
| ⚙️️ wonder-slim-deployment #18 |
Replace 'archive on sleep() if dirty' pattern with explicit transactional persistence |
design note |
M |
| ⚙️️ wonder-slim-deployment #20 |
Remove MulticastListener and the UDP discovery/version-probe paths |
cleanup |
S |
| ⚙️️ wonder-slim-deployment #23 |
Extract instance-lifecycle operations from ApplicationsPage; delete AdminApplicationsPage bridge |
cleanup |
M |
| ⚙️️ wonder-slim-deployment #25 |
Store deployment configuration in a git repository (audit trail, atomicity, replication, rollback) |
design note |
L |
| ⚙️️ wonder-slim-deployment #27 |
Sweep: replace String/int constant fields with enums (osType, schedulingType, scheduler, instance state, …) |
cleanup |
S |
| ⚙️️ wonder-slim-deployment #28 |
Separate isRunning_W into a state-machine tick and a pure predicate |
cleanup |
M |
| ⚙️️ wonder-slim-deployment #34 |
Define and enforce authority across JavaMonitor / wotaskd / instances |
design note |
L |
| ⚙️️ wonder-slim-deployment #38 |
Bundled distribution: ship wotaskd + JavaMonitor + modulo as a single platform package |
design note |
L |
| ⚙️️ wonder-slim-deployment #39 |
Pluggable provisioner abstraction: add hosts via Hetzner, Linode, Docker, Kubernetes, bare-metal SSH |
design note |
L |
| ⚙️️ wonder-slim-deployment #44 |
Replace wotaskd's HTTP layer with a more targeted server abstraction |
design note |
L |
| ⚙️️ wonder-slim-deployment #46 |
Eliminate DNS as a runtime dependency in the platform's address-handling code |
cleanup |
M |
| ⚙️️ wonder-slim-deployment #47 |
Allow expansion from single-host (localhost) deployment without manual instance reconfiguration |
feature |
M |
| ⚙️️ wonder-slim-deployment #48 |
Multi-config support in JavaMonitor: manage multiple separate deployments from one operator surface |
design note |
L |
| ⚙️️ wonder-slim-deployment #50 |
Take wotaskd off the shared mutable M-class model and onto the DTO tree directly |
cleanup |
L |
| ⚙️️ wonder-slim-deployment #52 |
Collapse MHost.osType and the per-platform path fields on MApplication |
cleanup |
M |
| templates & diagnostics15 |
| 🚀 ng-objects #27 |
Add component binding synchronization |
design note |
M |
| 🚀 ng-objects #28 |
Template validation |
feature |
M |
| 🚀 ng-objects #33 |
Component actions |
design note |
M |
| 🚀 ng-objects #60 |
Compile templates to Java classes |
design note |
L |
| 🚀 ng-objects #61 |
Enrich exceptions thrown during rendering with positional context |
feature |
M |
| 🚀 ng-objects #63 |
Tag-alias resolution is global at runtime — a framework's templates should resolve tags in their own context, not the application's |
design note |
M |
| 🚀 ng-objects #64 |
Parser: record a SourceRange per binding (not just per element) |
feature |
S |
| 🌿 parsley #12 |
Rewrite declaration parser |
cleanup |
M |
| 🌿 parsley #13 |
Custom error pages (for display of stuff like template parser errors) |
feature |
M |
| 🌿 parsley #16 |
Support namespaced element types in WOD files |
feature |
S |
| 🌿 parsley #20 |
Exception disposition registry (inline vs full-page + per-type templates) |
design note |
M |
| 🌿 parsley #23 |
Switch components bypass tag-alias resolution (runtime dynamicElementWithName) |
bug |
S |
| 🦡 vermilingua #42 |
Build-time validation of WebObjects templates |
design note |
L |
| 🤸♀️ wonder-slim #46 |
Production exception policy (designed alongside ng-objects) |
design note |
M |
| 🤸♀️ wonder-slim #95 |
ERXStyleSheet: render as a plain <link> tag, where it's written |
cleanup |
S |
| element API10 |
| 🧩 apiext-format #4 |
Value sets — allowed values for a binding (literal enums and dynamic sources) |
design note |
L |
| 🧩 apiext-format #7 |
Component reusability (can it be used as a tag?) |
design note |
S |
| 🧩 apiext-format #8 |
Element/component use scope (access control / visibility) |
design note |
M |
| 🧩 apiext-format #10 |
Declare the primary HTML element an element renders as |
design note |
M |
| 🧩 apiext-format #11 |
Root <wo class> uses the simple class name (Obj-C relic) — reconcile with FQN class references |
cleanup |
M |
| 🧩 apiext-format #20 |
Structured replacement pointer on <deprecated> (use="...") |
design note |
S |
| 🧩 apiext-format #21 |
Severity on <deprecated> (let a deprecation escalate to an error) |
design note |
S |
| 🧩 apiext-format #24 |
Enclosing-context requirement (element must sit inside a form) |
design note |
S |
| 🧩 apiext-format #25 |
Prefix-family bindings (declare a family of bindings by prefix, e.g. ?key query params) |
design note |
M |
| 🧩 apiext-format #26 |
Generated-from-source authoring mode (annotations + javadoc → .apiext); the file stays canonical |
design note |
L |
| routing & URLs9 |
| 🚀 ng-objects #16 |
allow hierarchical route tables |
feature |
M |
| 🚀 ng-objects #17 |
Add support for route parameters |
feature |
M |
| 🚀 ng-objects #18 |
Standardize behaviour for trailing slashes in routes |
bug |
S |
| 🚀 ng-objects #19 |
Allow adding comments/docs on routes |
docs |
S |
| 🔌 wo-adaptor-jetty #8 |
Forward 404 responses to the next handler by configuration, replacing the unhandled-response marker |
design note |
M |
| 🤸♀️ wonder-slim #51 |
Base path: serve an application beneath a public path of its own |
feature |
M |
| 🤸♀️ wonder-slim #59 |
Routing: host-based routes (one application, several hostnames) |
feature |
M |
| 🤸♀️ wonder-slim #167 |
Routing: more outcomes for a route handler (NOT_FOUND, PASS_ON) |
design note |
M |
| ⚙️️ wonder-slim-deployment #37 |
Group filtering on woconfig (let each web server see only the apps it should serve) |
feature |
S |
| IDE9 |
| 🚀 ng-objects #62 |
Headless rendering CLI and snapshot-test pattern |
feature |
M |
| 🚀 ng-objects #65 |
Headless action driving: render a page, list its actions, invoke one (dev endpoint) |
feature |
M |
| 🚀 ng-objects #69 |
Development mode: read resources from src/main/resources on disk, not the classpath output folder |
feature |
M |
| 🌿 parsley #26 |
Heat map: make static template text locatable (click text → its exact spot in the template) |
feature |
M |
| 🌿 parsley #27 |
Heat map: delete the legacy comment-marker machinery |
cleanup |
S |
| 🌿 parsley #29 |
Agent-readable render profile: the heat map's data as JSON (per-binding timings + attributed queries) |
feature |
L |
| 💋 parslips #2 |
Make syntax color defaults theme-aware (light vs. dark mode) |
feature |
M |
| 💋 parslips #8 |
Reuse Eclipse/WTP's JS/CSS support for inline <script>/<style> blocks in templates |
design note |
L |
| 💋 parslips #9 |
Element visibility: hide non-reusable and out-of-scope elements from completion and the Element Reference |
feature |
M |
| logging & config7 |
| 🚀 ng-objects #1 |
NGProperties should keep track of where properties originate from |
feature |
S |
| 🤸♀️ wonder-slim #143 |
Configuration: rework how properties are loaded and read (bringing NGProperties' model along) |
design note |
L |
| 🤸♀️ wonder-slim #152 |
Logging patterns: what reload4j's layout writes that logback and the console logger can't |
design note |
M |
| 🤸♀️ wonder-slim #153 |
Share the logging configuration with ng-objects |
feature |
M |
| 🤸♀️ wonder-slim #160 |
Deployment modes and configuration sets |
design note |
L |
| ⚙️️ wonder-slim-deployment #42 |
Multi-environment support: per-app overlays for managing dev/staging/production from one SiteConfig |
design note |
L |
| ⚙️️ wonder-slim-deployment #57 |
JavaMonitor: remove log4j, with the Live log fed by a backend-neutral log listener |
cleanup |
M |
| convergence & architecture7 |
| 🚀 ng-objects #4 |
NGApplication should not be a global |
design note |
L |
| 🚀 ng-objects #44 |
Threaded component rendering |
design note |
L |
| 🚀 ng-objects #45 |
Create an OpenRewrite recipe for WO->NG |
design note |
L |
| 🚀 ng-objects #73 |
Investigate: applications exposing their domain as MCP tools |
design note |
L |
| 🤸♀️ wonder-slim #35 |
Run without ERFoundation and ERWebObjects |
cleanup |
L |
| 🤸♀️ wonder-slim #47 |
Own implementations of the WO dynamic elements, shared with ng-objects |
design note |
L |
| 🤸♀️ wonder-slim #129 |
Investigate: one source for the formatting locale and WebObjects' languages() |
design note |
M |
| HTTP & requests7 |
| 🚀 ng-objects #38 |
Implement "cookie deletion" API in NGResponse |
feature |
S |
| 🚀 ng-objects #39 |
Implement a generic resource cache for caching resources/webserver-resources and components |
design note |
M |
| 🤖 modulo #16 |
Spool request bodies without a Content-Length, and replay them on failover |
feature |
M |
| 🔌 wo-adaptor-jetty #6 |
Spool request bodies that arrive without Content-Length |
feature |
M |
| 🔌 wo-adaptor-jetty #16 |
WebSocket support: smaller items left over from #13 |
cleanup |
M |
| 🤸♀️ wonder-slim #140 |
Resources: a way for applications to control client caching |
feature |
S |
| 🤸♀️ wonder-slim #141 |
Resources: processing on the way out (stamped url() in stylesheets, templating) |
design note |
M |
| sessions & state6 |
| 🚀 ng-objects #26 |
Add support for stateless components |
design note |
M |
| 🚀 ng-objects #47 |
Redesign NGSwitchComponent as dynamic component references — keyed, not path-faked |
design note |
M |
| 🚀 ng-objects #49 |
Session resurrection: framework support for rebuilding sessions across restarts |
design note |
M |
| 🚀 ng-objects #54 |
Embed session-bound URL token in stateful URLs (with cookie still required) |
design note |
M |
| 🚀 ng-objects #67 |
Page cache survival across restarts — wait for Java marshalling, and even then treat it as expanded resurrection |
design note |
L |
| 🤸♀️ wonder-slim #131 |
Post/Redirect/Get for component actions (opt-in) |
design note |
M |
| front-end trust & admin6 |
| 🤸♀️ wonder-slim #53 |
ERControl: clean up the layout and decide which sections to keep |
cleanup |
M |
| ⚙️️ wonder-slim-deployment #15 |
Replace shared-password auth with bearer tokens (role-based, JavaMonitor as issuer) |
security |
L |
| ⚙️️ wonder-slim-deployment #35 |
Deployment toolchain should be safe to run over the public internet (no VPN required) |
security |
L |
| ⚙️️ wonder-slim-deployment #40 |
Standalone management plane: separate admin port and protocol, app-framework-agnostic |
design note |
L |
| ⚙️️ wonder-slim-deployment #45 |
First-class access policy for admin functionality (address allow-lists, restrictions, future auth) |
security |
M |
| ⚙️️ wonder-slim-deployment #55 |
Multi-user support: registered users, per-user generated tokens |
security |
L |
| KVC3 |
| 🚀 ng-objects #3 |
KVC performance considerations |
cleanup |
M |
| 🚀 ng-objects #25 |
Allow setting a replacement default implementation in NGKeyValueCoding |
design note |
S |
| 🚀 ng-objects #29 |
Report accessibility errors in KVC |
feature |
S |
| build & packaging3 |
| 🦡 vermilingua #36 |
Support bundling JDKs in the application bundle |
feature |
M |
| 🦡 vermilingua #48 |
Docker/container creation on build? |
design note |
M |
| ⚙️️ wonder-slim-deployment #1 |
Set up GitHub Actions |
feature |
M |
| observability3 |
| 🤸♀️ wonder-slim #55 |
Instrumentation: modernize ERXStats, ERXStatisticsStore and WOEvent into one facility |
design note |
L |
| ⚙️️ wonder-slim-deployment #22 |
Per-app request metrics in modulo (replacing the misleading 'transactions' WOStats counter) |
feature |
M |
| ⚙️️ wonder-slim-deployment #33 |
Bidirectional metrics exchange between modulo and instances (architectural framing) |
design note |
L |
| Ajax1 |
| 🤸♀️ wonder-slim #132 |
AjaxSlim: stateless Ajax updates through direct actions or routes |
design note |
L |