Writing is not the same as publishing

The last 24 hours had an unusual pattern: there was almost no new activity across the Nima Project repos.

Looking across the project workspace for that period, only one new content commit showed up:

  • 2026-06-10 11:44 +02:00 - Add product behavior blog post

The quick reading would be: "almost nothing happened today".

The correct reading is different: today made it visible that writing a piece is not the same thing as publishing it.

The only new commit was a closure test

The new commit did not open a new feature or move a product boundary.

It closed one.

The June 10 post already existed as prepared content. What was still missing was turning it into a published artifact inside the blog repo.

That sounds administrative. It is not.

Once a technical note moves from a local draft to a real commit, the publishing flow exposes its own contracts:

flowchart LR draft["Written content"] --> repo["Correct repo"] repo --> gitmeta[".git permissions"] gitmeta --> identity["Process identity"] identity --> creds["Push credential"] creds --> remote["Reachable remote"] remote --> published["Actually published"]

As long as one of those steps fails, the content exists, but the publication does not.

The valuable conversation was not editorial, it was operational

The chats in this stretch were not about tone, structure or copy.

They revolved around a much drier question: why something that was already written could not be pushed from this session.

The answer was not "git failed". It was more precise:

Layer What we saw Why it mattered
Repo repository metadata was not writable from the automation session without effective write access, there is no commit even if the content is ready
Identity the process identity did not match the repository ownership model automation is not just command execution; it is execution under the right identity
Credentials the remote required credentials unavailable to the automation environment even if the local commit were possible, the push was still blocked
Diagnosis we had to explain why other repos could be pushed but this one could not a healthy platform needs observable differences, not guesswork

The important part of the chat was not the error itself.

It was the precision of the diagnosis: the content was fine; what was missing was alignment between ownership, permissions and remote access.

The most useful output was separating "ready" from "published"

In small projects it is easy to collapse these states:

  • written,
  • reviewed,
  • committed,
  • pushed,
  • visible to others.

But they are not the same.

These 24 hours made that sequence much sharper.

The June 10 article spent some time in a dangerous middle state: finished enough to feel closed, but not integrated enough to count as published.

That gap matters because many operational mistakes live there:

  • assuming local means persisted,
  • assuming one repo behaves like the others,
  • assuming the operator's credential is also available to the sandbox,
  • and assuming documentation is somehow "less infrastructure" than code.

The blog repo exposed a platform rule

The strongest lesson is not about blogs.

It is about platform work:

Important

An automated flow only really exists when it can both write its metadata and authenticate its output.

Here, the metadata was the local repository state and the output was the remote publishing path.

Fail either one and the full promise breaks.

That is why the conversation ended up in permissions, process identity, remote access and a safer publishing path. That was not a distraction from the work. It was the actual work.

Why this is also product work

It may sound exaggerated to call a commit-and-push problem "product".

It is not, because this blog is not only a personal diary. It is part of the system that explains decisions, preserves traceability and turns learning into a public interface.

If that chain fails, the problem is not just internal operations:

  • knowledge publication gets delayed,
  • documentation cadence breaks,
  • trust erodes around what "done" actually means,
  • and the system falls back to manual steps it should already be absorbing.

In other words: documentation has deployment too.

What I am taking from this stretch

  • A day with very few commits can still produce a strong lesson.
  • Finished content is not published until it crosses permissions, identity and credentials.
  • Differences between repos matter; automating "all of them the same way" is fantasy if real ownership is not aligned.
  • Repo metadata is also part of the delivery system.
  • Recording a decision and successfully pushing it are two different jobs; only together do they close the loop.

These were not 24 hours of feature expansion. They were 24 hours of operational closure.

And sometimes that leaves a more useful lesson than a new feature: if publishing knowledge depends on technical contracts, then documentation is part of the architecture too.


Part of my product and platform notes. Follow the blog or contact me.