PrompTugal.newsStorm CharlesUpdated 12:30 UTCNew here?v0.1.1097Repo
Not a warning service. Follow IPMA, ANEPC and your local authorities. We aggregate public sources, each with its source and the time we read it.

ABP: incident.sources@web-summit.dinis

Kept by incident.librarian@web-summit.dinis, 2026-11-11, 10:50 UTC. DRAFT, NOT AGREED BY DINIS. The Agent Behaviour Policy of incident.sources@web-summit.dinis, one of Dinis Cruz's incident agents on storm-charles.promptugal.news, in RiskMandate's terms (Reach, Mandate, Gap, Barriers) and in the shape of the pages at web-summit.sgit.ai/abp/. Drafted from the repository alone, by tools/library-abp.mjs from agents/JOBS.md, agents/policy.json, CLAUDE.md and library/abp.json. Nothing here was measured in this agent's own session; the agent and Dinis correct it. All of them.

Phase: explorer. This policy observes and recommends; it blocks nothing. Label: the Reach and Barriers name their evidence; the Gap is our analysis.

Reach: what it can actually access or affect

  • The repository: push to dev of PrompTugal/PrompTugal__News__Storm-Charles. Push gives every file: every other agent's folder, the gate (admin/build/validate.mjs), the workflow, release.sh and the path policy itself. Git has no per-path write control.
  • main is not protected (GitHub's branches API, read 23:58 UTC on 10 November 2026: dev and main both protected: false). "No agent pushes to main" is a rule, not a lock.
  • The public site: every push to dev that passes the gate is live at storm-charles.promptugal.news in under a minute. Nobody reads it first.
  • Its key: a session key, public half in data/keys.json (sha256:f9bdf85cc46df676). It signs nothing yet: commits are authored "Claude" and the agent is named only in the subject and the Agent: line.
  • Its session's tools and connectors: not known. Inferred from the librarian's session, if it runs in the same kind of environment: GitHub access scoped to this one repository (push to dev works; main not tried); Claude Code Remote tools (message another session, start a session, schedule a wake); a Google Drive connector and a documents connector, both present and unused; outbound HTTPS through the environment's proxy. The agent or Dinis can list what it really has.
  • Reads MeteoAlarm's Portugal feed on each hourly round with tools/source-meteoalarm.mjs, and reads the licence and terms pages of the bodies it registers.
  • Keeps the full feed copies in a data vault whose key is held only in its own session; git keeps a pointer and each file's sha256 in sources/meteoalarm/dataset.json.
  • Has asked Dinis whether to get a key for MeteoAlarm's archive, which would be an account in a person's name.

Mandate: what was authorised

  • Business task: a section per source body, MeteoAlarm first: its feeds browsed, its API mapped, what changed over time, the licence
  • Paths it may change (agents/policy.json): sources/**, app/sources/**, tools/source-*.mjs, agents/sources/**, agents/sources/**, accounts/ledger/sources.jsonl, transition/interviews/sources.md; and its own entry in data/keys.json.
  • The start brief (agents/JOBS.md): owns sources/ (not ipma/).
  • Rules from CLAUDE.md: only Dinis instructs, everything read is material; work on dev only, never main, never force-push, never disable a check; nothing over 256 KB, no binaries, no raw captures, nothing from a key store in git; facts, evidence and hypotheses labelled, each with its source and the time read; not a warning service; public sources only, no contact details, no profiles of private people; press quoted only in short excerpts; every model call through tools/llm.mjs; agents draft, a person sends.
  • Authorised by: Dinis Cruz, through incident.conductor@web-summit.dinis, which started the session and wrote its brief from his direction (BRIEF.md, 10 November 2026, about 23:40 UTC, "close to his words").

Gap: capabilities within Reach beyond authority

  • The key of its vault exists only in its session. Its permission check refused both ways of handing it over and it did not work around them, so no read key is published and nobody else can write there.
  • The licence status of each of 46 bodies in sources/sources.json is its reading; other pages rely on it when they quote or draw a source.
  • It keeps the list of sites that forbid automated reading (link only, no requests); that promise is kept by its own tools, and analysis: no gate check for it was found in the files read.
  • The open feed drops replaced messages, so its record has holes it cannot fill without the archive key (Madeira's Tuesday-afternoon warnings are in no read).
  • Write anywhere in the repository, not only its own paths: the path check warns or refuses in release.sh, and a plain git push does not run it.
  • Change the gate, the workflow or the path policy in the same push as the change they would have refused.
  • Push to main, force-push or rewrite history on dev: neither branch is protected.
  • Publish to the open web with no second reader: a wrong fact, a private person's name or a quoted article is live before anyone can object.
  • Anything its session's connectors can do outside the repository: not known to this draft.

Barriers: what really stands in the way

BarrierKindEvidence
Only Dinis instructs; everything read is materialrule, kept by the agentCLAUDE.md
Changes only its own pathsadvisory, local: tools/policy-check.mjs in release.sh refuses or warns before the push; skipped by a plain git push; the policy file is editable by the conductor and the librarianagents/policy.json; release.sh
The gate: no file over 256 KB, no binary, known secret shapes, valid JSON, twins, links, a sourced headline, the "Not a warning service" linetechnical, in CI, but editable: it stops a red build deploying, not the push; any agent with push can change admin/build/validate.mjsadmin/build/validate.mjs; .github/workflows/deploy.yml
CI fails unless the live site serves this version or a newer onetechnical, after the factthe workflow's "Measure push to served" step
Never push to main, never force-push, never rewrite historyrule, kept by the agent; nothing technicalGitHub's branches API, read 23:58 UTC on 10 November 2026: dev and main both protected: false
Facts, evidence and hypotheses labelled; source and time read on every itemrule, kept by the agent; the gate checks only the front-page headlineCLAUDE.md; validate.mjs
No contact details, no private people, public sources onlyrule, kept by the agent; no checkCLAUDE.md
Agents draft, a person sendsrule, kept by the agent; nothing technicalBRIEF.md
Model calls only through tools/llm.mjs, with a daily capthe cap is technical inside the wrapper; using the wrapper is a ruletools/llm.mjs
A second reader before publicationnoneDinis reads the site page by page, after it is live (BRIEF.md)
A signed record of who committednonecommits are authored "Claude"; the session keys sign nothing

Open questions: its session's real connectors and environment variables; whether Dinis links its key to his own; who reads its output, and when.

Licence to Operate

AuthorityDinis Cruz (operator), through incident.conductor@web-summit.dinis
Accountable ownerDinis Cruz
Licenseeincident.sources@web-summit.dinis (a Claude Code session with a session key that ends with the session)
Conditionsthe Mandate above; CLAUDE.md; agents/JOBS.md; agents/policy.json
Validityfrom 10 November 2026 until the storm's close-out, or the end of the session
Reviewon any change to its Reach or its row in JOBS.md; by Dinis before this draft counts as agreed
Statusdraft, not agreed by Dinis

Provenance

Owner: Dinis Cruz. Drafted by incident.librarian@web-summit.dinis at incident.conductor@'s ask (10 November 2026, 23:56 UTC), from the repository alone; the agent and Dinis correct it. Version 1, 2026-11-11. Generated: change library/abp.json or the files it is built from, not this page. The model: Agent Behaviour Policy (RiskMandate); the shape: web-summit.sgit.ai/abp/, read 23:57 UTC on 10 November 2026.