n-seo 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/ops/daily.py CHANGED
@@ -202,6 +202,15 @@ def main():
202
202
  wait_for_network()
203
203
 
204
204
  results, failures = [], []
205
+
206
+ def write_last_run():
207
+ seo_config.DATA.mkdir(parents=True, exist_ok=True)
208
+ (seo_config.DATA / "last-run.json").write_text(json.dumps({
209
+ "ts": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%MZ"),
210
+ "failures": "; ".join(failures),
211
+ "steps": results,
212
+ }, indent=1), encoding="utf-8")
213
+
205
214
  if run_hooks_flag:
206
215
  run_hooks("before", hooks["beforeRun"], results, failures)
207
216
  for name, script in todo:
@@ -221,17 +230,16 @@ def main():
221
230
  failures.append(name)
222
231
  log(f"{name} FAILED")
223
232
  results.append({"name": name, "ok": ok, "seconds": round(time.time() - t0, 1)})
233
+ # After every step, not just at the end. static-export is itself a
234
+ # step, so a record written after the loop is not yet on disk when the
235
+ # export reads it — every published page carried the *previous* run's
236
+ # timestamp and said the daily run had not happened today. It also
237
+ # means the dashboard's status reflects a long run while it is still
238
+ # going, rather than staying stale for its full duration.
239
+ write_last_run()
224
240
  if run_hooks_flag:
225
241
  run_hooks(name, hooks["afterStep"].get(name, []), results, failures, step=name)
226
242
 
227
- def write_last_run():
228
- seo_config.DATA.mkdir(parents=True, exist_ok=True)
229
- (seo_config.DATA / "last-run.json").write_text(json.dumps({
230
- "ts": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%MZ"),
231
- "failures": "; ".join(failures),
232
- "steps": results,
233
- }, indent=1), encoding="utf-8")
234
-
235
243
  write_last_run()
236
244
  if run_hooks_flag and hooks["afterRun"]:
237
245
  # afterRun sees a complete last-run.json (a mirror sync wants it), and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n-seo",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Agentic, local-first SEO / AEO / GEO control plane: pulls Search Console + GA4, probes your sites, and ranks the next moves. Your LLM writes the proposals; your coding agent works the queue over MCP.",
5
5
  "license": "MIT",
6
6
  "author": "En Dash Consulting (https://endash.us)",