Build order, open questions and tensions
Published unresolved, on purpose. A roadmap with every question answered is a marketing document; this one has eight questions with no answer and seven tensions that are not going to be smoothed over. The commissioning brief asked for it this way and it was right to.
The five-day list — seven fixes, in order of value
These are not site tasks. They are repository tasks that change what this site can honestly say, and the first four are the ones that turn the audit paragraph from honest-but-awkward into honest-and-strong.
| # | Fix | Effort | Effect |
|---|---|---|---|
| F1 | Delete [^_] from the legacy-import guard | 4 characters | The guard goes red on 228 real legacy imports across 69 files. It has been passing vacuously since it was written. In full → |
| F2 | Add the two new-tree test suites to CI | one workflow edit | +1,952 tests into CI, and six real import-level breakages surface immediately — four circular imports, one missing module, one stale path. The highest-value change available in the repository |
| F3 | Fix sg-play in the AMI bake workflow | one line | The binary is invoked 16 times and defined nowhere. The whole pipeline is currently dead — and it is cited as a maturity signal |
| F4 | Fix the three date-brittle IAM tests | small | They hardcode a date now more than 90 days stale, so a STALE_ROLE assertion fires. They fail for anyone who clones the repository today |
| F5 | Delete or regenerate capabilities.json | small | 42 versions stale, COPY'd into the image, served at an endpoint, and the repo's own docs say not to read it |
| F6 | Rewrite the README from the tree | half a day | It says “Phase 0 in progress — repo skeleton” at 217k lines and documents a package that does not exist |
| F7 | Add a linter — ruff is one config block | half a day | There is currently no static analysis of any kind |
Eight things worth building fresh
| # | Item | Why |
|---|---|---|
| G1 | A generated page per spec | done, here |
| G2 | A real cost model | The only cost artefact is a placeholder whose own header says “real cost calculation is its own brief.” That brief does not exist |
| G3 | Throughput and concurrency measurement | “Hundreds of parallel requests trivially” is argued, never measured. No load tests anywhere |
| G4 | Aggregated latency | Every sequence call emits a full timings block and nothing aggregates them. No p50/p95 dataset exists |
| G5 | Image sizes | Not recorded, not derivable without a build. One docker images line closes it |
| G6 | The /pw proxy's other half | Vendored into an image whose source is in neither repository. Anyone documenting the production auth path is documenting a component they cannot see |
| G7 | A “built in 100 days” narrative | Now possible — the full history is recoverable. And it also shows the last commit is a month old. Both halves are published |
| G8 | Uptime, incidents, SLO | Debriefs describe successful deployments. There is no SLO, no uptime record, no incident log |
Eight questions, published without answers
Should the control plane run inside itself?
“The Ephemeral Compute control plane should be able to run inside Ephemeral Compute… This is recursion, but it is also practical.”
Where it stands: the most quotable unbuilt idea in the corpus. But a control plane that must exist in order to start itself has a bootstrap problem. The honest answer is probably DNS plus one small always-on waker, everything else ephemeral — which is what the serverless brief actually describes, rather than the slogan.
Does a container really serve hundreds of parallel requests here?
Where it stands: central to the whole Lambda comparison, and unmeasured. Every browser request launches a fresh Chromium process, so the ceiling is memory rather than the web framework. This is the claim most likely to be wrong in an interesting way.
Is Platform a real abstraction or an aspiration?
'ec2' | 'k8s' | 'gcp' | 'local' is a comment; only EC2 exists.
Where it stands: an ABC with one implementation has never been tested as an abstraction. local would be the cheapest proof — and would also make the test suite runnable without AWS, which is worth having on its own.
Why do two specs have vault-writes while the platform's vault sink raises NotImplementedError?
Where it stands: the capability exists at the spec layer and not at the platform layer. Either the generic sink is redundant, or the two specs are each doing it themselves. The sink ledger →
What is a Stack, given there is no multi-node orchestration?
Where it stands: the taxonomy reserves the word for 2+ coordinated nodes. The routes return a list, the CLI is unwired, and thirteen help strings use it for a single instance. Either build it or retire the word.
Should the EC2 tag carrying the API key be removed?
Where it stands: the mitigation is one SSM call in the dashboard. The trade is convenience against exposure to ec2:DescribeInstances. A stated decision either way is fine; silence is not. The full framing →
sg-compute.sgit.ai and sg-compute.sgraph.ai — same label, different TLD
Where it stands: the decision taken is to claim the distinction rather than move 128 references. It is on this list because it is a decision that could be revisited: the argument against it is not technical, it is that a weekly support question forever eventually costs more than a migration.
Is the platform still being developed?
Where it stands: no commit since 24 July 2026. June and July together were 187 commits against 2,590 in April and May. Paused, done, or between phases — the site should say which, and cannot work it out from the tree. This one needs an answer from a person. It is the open request on comms.
Seven honest tensions
- Extraordinary velocity, then silence. 2,777 commits in 100 days is remarkable; a month with none is a fact a reader can check in one click. Both belong on the site, so both are on it.
- 61% of the commits are by Claude. Genuinely interesting, arguably the most interesting thing about this repository for the wider network — and it invites the obvious question about who reads the code. open-source.sgit.ai has the argument; this site has the artefact. Joining them is a strong page and an uncomfortable one.
- Runtime type-safety instead of static analysis.
Type_Safein 42.6% of files is a real choice with real benefits. It is also not a type-checker, and 57% of files have neither. - A reality-document discipline that is itself stale. “If the reality document doesn't list it, it does not exist” is an excellent rule. The reality document is 41 versions behind. The discipline is right; the maintenance did not happen — which is precisely why this site generates its pages from data and fails the build when they drift.
- The best ideas are the unbuilt ones. Recursion, warm pools, multi-node stacks, Nitro Enclaves, non-EC2 platforms. The most quotable material in the corpus is the part with no code — which is exactly what the repository's own rule warns about: “briefs are aspirations, not facts.”
- A platform named for one of its sixteen specs. Four months after the naming brief said to fix it, the legacy aliases are still entry points and the service still identifies itself by the old name.
- Publishing the audit is the right move and it is not comfortable. No linter, a third of the tests outside CI, a guard that never worked, a dead workflow, four stale sources. Every one is fixable in days, and publishing them alongside the fixes is the strongest possible version of the maturity claim — but it is still a site whose second section is a bug report against its own subject.
Loose ends worth an hour each
- Register or relocate sg_edge — 9,108 lines, no manifest, invisible to the registry.
- Wire the taxonomy-correct CLI as an entry point. It exists and is only reachable through a script.
- Delete
sg_compute/versionor make something read it. Grep says nothing does. - Rename the old-service class inside the new tree — currently sitting in a CI allowlist.
- Fix the thirteen “stack” help strings. The cheapest visible win against the naming brief.
- Measure one image size. One command closes G5.
- Decide whether
allow_allon the screenshot surface is still right — probably yes, and it deserves a written decision because it is the one place deny-by-default is switched off.