2ba599b399
internal/outcome/process: use new store interface
...
This change also spawns shim before committing system state, leaving it blocking on the setup pipe. The internal/outcome/process structure is also entirely reworked to be much more readable and less error-prone, while enabling basic performance measurements. A long-standing bug where segment lock is not held during Commit is also resolved.
Closes #19 .
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-11-02 04:25:45 +09:00
d3d3417125
internal/outcome/process: relocate start and serve
...
This is useful for reordering these operations for further cleanup.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-11-01 19:14:59 +09:00
651cdf9ccb
internal/outcome: remove guard on main
...
This is no longer exported. Such a check is pointless.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-31 22:58:26 +09:00
68ff0a2ba6
container/params: expose pipe
...
This increases flexibility of how caller wants to handle the I/O. Also makes it no longer rely on finalizer.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-31 22:39:02 +09:00
6a0ecced90
internal/store: expose save via handle
...
The handle is otherwise inaccessible without the compat interface. This change also moves compatibility methods to separate adapter structs to avoid inadvertently using them.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-31 04:20:22 +09:00
b667fea1cb
internal/store: export new interface
...
This exposes store operations safe for direct access, and enables #19 to be implemented in internal/outcome.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-31 03:41:26 +09:00
b25ade5f3d
internal/store: rename compat interface
...
The new store implementation will be exported as Store.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-30 18:53:59 +09:00
ebdcff1049
internal/store: rename from state
...
This reduces collision with local variable names, and generally makes sense for the new store package, since it no longer specifies the state struct.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-30 18:43:55 +09:00
46c5ce4936
internal/outcome/shim: check full behaviour
...
This took significant effort to stub out, and achieves full coverage after c5aefe5e9d .
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-30 05:20:49 +09:00
36f8064905
internal/outcome/process: output via msg
...
This makes it possible to instrument output behaviour through stub.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-30 03:41:38 +09:00
eeb9f98e5b
internal/outcome/shim: move signal constants
...
The magic numbers hurt readability.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-30 01:20:51 +09:00
3f9f331501
internal/outcome/shim: remove noop resume
...
The shim does not suspend output to begin with. These are leftovers from when container startup code suspends output.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 23:31:39 +09:00
2563391086
internal/outcome/shim: params check early
...
This is unreachable, but keeping it here as a failsafe until more test cases are added.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 23:10:12 +09:00
a0b4e47acc
internal/outcome: rename from app
...
This is less ambiguous, and more accurately describes the purpose of the package.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 04:33:13 +09:00
a52f7038e5
internal/env: relocate from app
...
This package is much cleaner to stub independently, and makes no sense to lump into app.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 04:11:49 +09:00
274686d10d
internal/validate: relocate from app
...
These are free of the dispatcher from internal/app. This change relocates them into their own package.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 03:40:09 +09:00
65342d588f
internal/app/state: improve store internals
...
This fully exposes the store internals for #19 and are final preparations for removing the legacy store interface.
This change also fixes a potential deadlock in the handle initialisation mkdir failure path. This however is never reachable in hakurei as the store is never accessed concurrently.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-29 03:21:00 +09:00
5e5826459e
internal/app/state: improve handles internals
...
This replaces the Store interface with something better reflecting the underlying data format for #19 . An implementation of Store is provided on top of the new code to ease transition.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-28 22:00:54 +09:00
4a463b7f03
internal/app/state: use absolute pathnames
...
This is less error-prone and fits better into internal/app which already uses check.Absolute for all pathnames.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-26 03:41:19 +09:00
dacd9550e0
internal/app/state: acquire big lock for toplevel operations
...
This avoids getting into an inconsistent state for simultaneous calls to List and Do on a previously unknown identity.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-26 03:27:56 +09:00
546b00429f
treewide: update doc comments
...
Some internal/app/state types were relocated to hst as part of the API. This change updates doc comments referring to them.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-26 03:00:04 +09:00
86f4219062
internal/app/state/data: check full entry behaviour
...
This eventually gets relocated to internal/app.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-26 01:49:14 +09:00
fe2929d5f7
internal/app/state: include et header
...
This is the initial step of implementing #19 .
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-25 22:01:26 +09:00
470e545d27
internal/app/state: use internal/lockedfile
...
This is a pretty solid implementation backed by robust tests, with a much cleaner interface.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-25 21:29:24 +09:00
8d3381821f
internal/app/state: export correct backend value
...
This references the underlying multiBackend due to a typo, making the whole dance with c a noop.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-25 21:11:05 +09:00
4f41afee0f
internal/app/state: fixed size et-only header
...
This header improves the robustness of the format and significantly reduces cleanup overhead.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-25 19:15:06 +09:00
05488bfb8f
hst/instance: store priv side pid
...
This can receive signals, so is more useful to the caller.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-23 23:19:55 +09:00
dd94818f20
hst/instance: define instance state
...
This is now part of the hst API. This change also improves identifier generation and serialisation.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-23 22:59:02 +09:00
c5aefe5e9d
internal/app/shim: check behaviour
...
This does not yet have full coverage. Test cases covering failsafe paths and error injection will be added eventually.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-23 06:07:41 +09:00
0f8ffee44d
internal/app: test case for hst template
...
This helps with other areas of the test suite as they're all based on hst.Template. This also helps contributors understand the behaviour of internal/app as hst.Template covers almost every aspect of it.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-23 04:46:58 +09:00
6c338b433a
internal/app: reduce test case indentation
...
This improves readability on narrower displays.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-22 07:40:32 +09:00
8accd3b219
internal/app/shim: use syscall dispatcher
...
This enables instrumented testing of the shim.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-22 06:58:45 +09:00
e94acc424c
container/comp: rename from bits
...
This package will also hold syscall lookup tables for seccomp.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-21 20:54:03 +09:00
766dd89ffa
internal: clean up build strings
...
These names are less ambiguous and should be understandable without reading the source code.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-21 01:49:36 +09:00
699c19e972
hst/container: optional runtime and tmpdir sharing
...
Sharing and persisting these directories do not always make sense. Make it optional here.
Closes #16 .
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-19 04:11:38 +09:00
c0e860000a
internal/app: remove spfinal
...
This no longer needs to be an independent outcomeOp since spFilesystemOp is moved late.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-19 02:58:46 +09:00
e47aebb7a0
internal/app/outcome: apply configured filesystems late
...
This enables configured filesystems to cover system mount points.
Closes #8 .
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-19 01:41:52 +09:00
543bf69102
internal/app/spx11: check behaviour
...
This outcomeOp will likely never change.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-19 01:00:12 +09:00
4cfb1fda8f
internal/app/spwayland: check behaviour
...
This op is quite clean. Might get slightly more complex at some point passing socket fd.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-19 00:30:56 +09:00
c12183959a
internal/app/dispatcher: report correct field
...
This was mistakenly reporting sharePath on inequivalence causing very confusing output.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 23:59:10 +09:00
f5845e312e
internal/app/sptmpdir: check behaviour
...
Another simple one. This will change when shared tmpdir and xdg runtime dir becomes optional.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 23:46:10 +09:00
a103c4a7c7
internal/app/hsu: check behaviour
...
The stub exec.ExitError is hairy as usual, but internal/app is not cross-platform, so this is okay.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 20:45:42 +09:00
f6f0cb56ae
internal/app/hsu: remove wrapper method
...
This was added to reduce the size of diffs.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 17:35:20 +09:00
d4284c109d
internal/app/spruntime: emulate pam_systemd type
...
This sets XDG_SESSION_TYPE to the corresponding values specified in pam_systemd(8) according to enablements.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 04:33:04 +09:00
030ad2a73b
internal/app/spruntime: check behaviour
...
This one is quite simple and has no state. Needs to emulate pam_systemd behaviour so that will change.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 03:41:49 +09:00
78d7955abd
internal/app/sppulse: check cookie discovery
...
There's quite a bit of code duplication here, but since this is already quite simple it is best to leave it as is for now.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 01:30:33 +09:00
b066495a7d
internal/app/sppulse: check buf error injection
...
The loadFile behaviour does not guarantee the buffer to be zeroed or not clobbered if an error is returned, but for the current implementation it is good to check.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-18 01:01:52 +09:00
82299d34c6
internal/app/sppulse: correctly handle small cookie
...
The trailing zero bytes need to be sliced off, so send cookie size alongside buffer content.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-17 08:03:03 +09:00
792013cefb
internal/app/sppulse: check behaviour
...
Still needs to check the relocated functions separately.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-17 06:32:21 +09:00
3f39132935
internal/app/dispatcher: reduce check code duplication
...
This also improves readability of test cases.
Signed-off-by: Ophestra <cat@gensokyo.uk >
2025-10-17 05:47:12 +09:00