project / prototype

Lines of Solice

A Python prototype explored identity through player actions, while schema mismatches exposed the need to validate the links between actions and projects.

I began Lines of Solice in an empty folder because I wanted to understand the model before giving it a world to render. The design linked actions to projects, projects to domains, and domains to principles. I tried to express that in a Python schema and then run a small terminal example. The first run did not cooperate: a StopIteration error revealed that one of those assumed links was missing.

The repair discussion made the design less abstract. If alignment is meant to change because of what a player does, the data joining an action to its project and strategy must be inspectable. A later step was reported working, and I asked for comments that would let me follow the code myself. The surviving record reaches a terminal experiment and the debugging around its relationships; it does not resolve whether the similarly named Lines of Allegiance material belongs to this same project.

Elastic identity

I chose elastic alignment. The intention was to let behavior accumulate as evidence, rather than immediately punish every action that differed from the selected strategy.

The initial implementation used a short recent-action window and compared each action’s domain with the strategy’s preferred domain. Later work separated the alignment score from confidence in that score. The effective value was calculated as:

effective alignment = alignment score × confidence

That matters early in a run. A seemingly strong pattern based on one action should not carry the same weight as a pattern supported by a fuller history. The terminal output made the components visible instead of hiding them behind a single label.

One pasted run showed an alignment score of 0.7, confidence of 0.083, and effective alignment of 0.058. The same output also warned about strategy drift while printing exploration as both expected and observed focus. That was a useful sign that the feedback still needed refinement; displaying a warning was not enough to make its meaning clear.

The schema was the first real obstacle

The prototype’s data lived in separate JSON files for principles, strategies, domains, projects, and actions. That was easy to read, but the references had to agree.

One failure came from an action pointing to a project ID that no longer existed. The lookup used Python’s next(...) and raised StopIteration when it could not find a match. I described the problem as implementation drift: one side of the relationship had changed while the other had not.

The assistant illustrated the intended chain with a concrete example:

scan_ruin → map_ruins → exploration

A proposed validator collected project IDs and checked every action reference before the game loop ran. Its error could name the action and missing project directly, rather than failing during a turn. An additional mistake came from placing that check before the JSON variables had been loaded, producing a NameError. The order of setup was part of the problem, not just the contents of the files.

From completing projects to changing strategy

Later pasted runs showed projects completing: repairing a settlement grid, mapping ruins, and negotiating water rights. Repeated interaction actions produced a possible shift from exploration-first toward control-first, with a reported match score of 0.7.

The next patch changed that from an advisory signal into a player choice. The prototype would offer a strategy transition and update the selected strategy only after confirmation, while preserving domain progress. I reported that this step worked.

A stabilization window was proposed afterward to prevent the strategy from bouncing back and forth after only a few actions. That remained the next step in this exchange, rather than something proved by the earlier success message.

I got a later terminal step reported working after the broken schema link, and I asked for comments so I could follow the model myself. I kept Lines of Solice as its own name here; the similar Lines of Allegiance material was not enough to establish a rename or shared implementation.

Related rabbit holes

PublishedOct 3, 2026
note / experiment

A thin-client Linux experiment

A network-boot question became a comparison of separate remote desktops and shared physical desktops, ending with a usable Linux thin-client session and working audio.

Documented activity: September 20, 2026 – September 26, 2026
PublishedOct 3, 2026
note / investigation

Assembling a Hytale technology-mod collection

A proposed technology-mod stack became a practical test of what was installed, enabled for a world, and actually visible in the workbench.

Documented activity: September 15, 2026 – September 17, 2026