Refusing the write is cheaper than recovering the work
Untracked files on a protected branch exist in one place, so a later branch switch deletes them with no error and nothing to recover. Refuse at write time.
We use Google Analytics to see which pages help people. No ads, no profiles. Privacy Policy
Stores, signing, provisioning, CI — the archaeology between "it builds" and "it is live".
27 posts
Untracked files on a protected branch exist in one place, so a later branch switch deletes them with no error and nothing to recover. Refuse at write time.
Reproducing a failing CI job locally turns a 45-minute guess into a 2-minute iteration. What runs locally, what cannot, and why faking the rest is worse.
Collapsing a release into one command removes the only place a person could stop it. Separate the mechanical phases from the single judgement about timing.
Search submission APIs meter per day. Submit only what changed, and when the quota runs out, name the URLs that were dropped instead of passing green.
Whether a credential is organisation-wide or per-app has to be visible in its name, because the name is what every manifest and resolver decides from.
Certificates, profiles and keychain state get asserted by one flow or by nobody — and a second writer stays invisible until the next build needs to sign.
Store screenshots hand-exported once become a set nobody updates. Treat them as generated output with a source, a matrix and a regeneration step.
A template store listing reaches production unless promoting the real one is a human gate that refuses. Why the failure is silent and what has to block on it.
Staging everything rolls a submodule pointer backwards, and the diff shows two hashes with no ordering. The one guard it needs is an ancestry test.
A fix to a template-derived file is correct locally and leaves the defect in the template and every sibling project. Classify by provenance at edit time.
A rule naming forbidden commands cannot hold, because any program that reads bytes can emit them. Enforcing a property of output needs an allowlist.
A guard blocked the one step a documented runbook required. The fix was not a weaker guard, it was building the sanctioned command it was asking for.