This plan is based on the current hands-on assessment in ASSESSMENT.md.
Get Annotator back to a state where:
- the library builds reproducibly
- tests provide meaningful signal
- the demo works in a modern browser
- the storage/backend story is clear
- contributors can understand where the project is headed
Do not start with a rewrite.
Start by recovering a trustworthy baseline on modern tooling. That recovery baseline now exists locally: the bundle builds, tests pass in Chrome, and the dev page loads. The next step is to consolidate that baseline into a clean, supported path.
Make the repo reproducible enough that further work is comparable from machine to machine.
- Document the exact current install workaround:
- use a repo-local npm cache if the global cache is polluted
- Record the exact Node/npm versions used during assessment
- Decide whether the baseline target is:
- modern Node only
- or a pinned historical Node version in a container/worktree environment
Prefer a modern-Node baseline unless that quickly proves too expensive.
Reason:
- the first observed failure looks like a localized dependency compatibility issue, not total ecosystem collapse
Keep pkg/annotator.js and pkg/annotator.min.js building reproducibly on a supported modern environment.
- a minimal compatibility fix is in place in
tools/cssify.js - CSS minification is now optional rather than a hard crash point
- Decide whether to keep the fallback approach or replace it with a modern CSS minifier
- Document the supported Node version for current development
- Decide whether to commit
package-lock.jsonas part of the stabilized baseline
make pkg/annotator.min.jsstays green- the build path is documented and intentional rather than accidental
Keep the tests running in a way that tells us whether the library still behaves correctly, without relying on dead browser infrastructure.
- Keep the existing test corpus
- Treat PhantomJS as removed for practical purposes
- Clean up the Karma configuration so Chrome is the explicit supported local default
- Decide whether to stay on Karma temporarily or move to a more modern runner later
Preserve the tests first, modernize the runner second.
Reason:
- the test suite is one of the strongest assets in the repo
- rewriting tests too early throws away information
- tests execute in supported modern headless browser(s)
- failures, if any, are about behavior rather than harness setup
Confirm that the core user experience still works.
- Build the bundle
- Run the local dev/demo path
- Verify:
- select text
- create annotation
- edit annotation
- delete annotation
- reload annotations using the available storage mode
Start with:
annotator.storage.nooporannotator.storage.debug
Then move to:
annotator.storage.http
- the demo works locally for the basic annotation lifecycle
- basic UX verification is written down so it can be repeated
Decide what the supported persistence story should be.
- Inspect the historical
annotator-storereference implementation - Decide whether to:
- revive it
- replace it
- or specify the HTTP contract clearly and leave backend choice open
- Confirm the minimum API needed for a modern working demo
Do not block client recovery on a full backend revival.
Instead:
- keep the storage contract explicit
- use the smallest backend needed for a working shared-annotation demo
Make the project understandable again for someone new.
- Keep
REBOOT.mdas the framing note - Maintain
INTRODUCTION.mdas the architecture overview - Maintain
ASSESSMENT.mdas the factual current-state report - Update
README.mdonce the practical path is clearer - Add modern local-development instructions after the build/test baseline is restored
Give the project a trustworthy public home again.
- Choose a safe temporary canonical URL
- Publish a minimal project page
- Make status explicit:
- historical project
- revival in progress
- current demo/build status
Do this after technical recovery has started, not before.
Branding work should not displace build/test recovery.
If I were continuing from this assessment, I would do these next:
- Clean up and document the modern local dev/test path
- Decide what to keep from the compatibility patches and what to replace properly
- Inspect
annotator-storeand define the minimum backend needed for a live shared demo - Run a more explicit manual QA pass on selection, create, edit, delete, and reload
- Start trimming dependency and tooling debt without rewriting the library
Once the above is done, decide between two paths:
-
Incremental modernization
- preserve architecture
- update toolchain, runner, packaging, and docs
-
Guided reboot
- preserve product idea and data model
- replace more of the implementation
Right now, the evidence favors incremental modernization first.