Baseline 1.1.0
===============

A client-side officer desk for one guild, on World of Warcraft:
Forever (Classic+). Made by Devil's Noose.

It keeps a locked cell, a zero (body / intent / act), strikes,
reserves, and drift marks in your SavedVariables. It reads the
group only when you type /baseline present. It speaks in chat
only when you type /baseline send.

It does not kick, loot, inspect bags, hide names, or scan on a
timer. It does not veil guilds. That is a different addon.

The addon starts empty. The sample cell lives on the page you
downloaded this from. Copy the slash lines and paste them in
chat if you want that cell in game.


INSTALL
-------
1. Unzip so you have a folder named Baseline (this folder).
2. Put that folder in Interface/AddOns. People report these paths:

   World of Warcraft\_classic_\Interface\AddOns\Baseline
   World of Warcraft\_classic_beta_\Interface\AddOns\Baseline

3. Restart the game. A /reload is not enough for a newly copied
   addon.
4. At character select, enable Baseline. If it is greyed out,
   tick "Load out of date AddOns".

Baseline.toc uses interface 16001, the number other Forever
addons publish for client 1.60.1. That number was not read off
a Forever client in this build.


WHAT A READING MEANS
--------------------
Zero held means body, intent, and act are all written.
Zero open means send will refuse.

Missing: a locked name who is not in the group.
In the group, not locked: someone here who does not hold a seat.
Machine in the group: a machine-wing name, not locked, standing
in the raid. Farm voice does not sit on the pull.
Recruit on the lock: a trial filed as if they held a seat.
Bench: strikes at the number you set (default 2).
Outside the roof: a guild name that does not contain the roof
word. The roof starts blank and matches nothing until your guild
sets its own word with /baseline roof <word>. If the client has
not told us the guild yet, the line is "Guild not known", not an
accusation.

Late is a strike only if an officer types the strike.
The addon does not decide that someone was late.


SLASH
-----
/baseline                 Lock, zero, bench. Does not read the group.
/baseline present         Compare the group you are standing in.
/baseline panel           Open the window.
/baseline seat Name wing role rank locked|open fed|unfed Guild Class
/baseline unlock Name
/baseline drop Name
/baseline strike Name reason
/baseline pardon Name
/baseline reserve item words
/baseline unreserve item words
/baseline gps body | intent | act
/baseline send
/baseline channel self|officer|raid|warning
/baseline drift narrative|irony|mismatch|trauma note
/baseline undrift N
/baseline clear confirm
/baseline ignite
/baseline ignite provider xai|openai|anthropic|custom
/baseline ignite model grok-4.7
/baseline ignite endpoint https://api.x.ai/v1/chat/completions
/baseline ignite auth bearer|x-api-key
/baseline ignite shape openai-chat|anthropic-messages
/baseline ignite tokens 512
/baseline ignite temp 0
/baseline ignite on
/baseline ignite off
/baseline ignite key
/baseline ignite forget
/baseline ignite ask text
/bl                       Same as /baseline

Wings: vanguard, machine, syndicate.
Roles: tank, heal, dps.
Ranks: founder, officer, raider, member, recruit.
Guild token is one word, or - if unknown.
Class is one word (Paladin, not a spec).

Channel defaults to self. /baseline send then only prints.
officer, raid, and warning call SendChatMessage.
Raid warning requires lead or assist. If you are not, nothing
is sent, and the addon says so.

Paste a block of /baseline lines into chat to load a cell
exported from the desk page. The export does not contain
the key. Presence is not in those lines.
In game, presence is the group. On the page, presence is a
rehearsal toggle.


IGNITION
--------
/baseline ignite stores the parameters of one LLM call on
this client: provider, endpoint, model, auth header, body
shape, max_tokens, temperature, and the key.

Named providers fill the rest:
  xai        https://api.x.ai/v1/chat/completions
             model grok-4.7, auth bearer, shape openai-chat
  openai     https://api.openai.com/v1/chat/completions
             model gpt-4.1, auth bearer, shape openai-chat
  anthropic  https://api.anthropic.com/v1/messages
             model claude-sonnet-4-5, auth x-api-key,
             shape anthropic-messages
             (that shape also names the header anthropic-version: 2023-06-01)
  custom     leaves endpoint, model, auth, and shape as they are

The unsent body is model, max_tokens, temperature, and one
user message. bearer means Authorization: Bearer. The other
auth sends the header x-api-key. The addon does not build
that request and does not send it.

The key is typed with /baseline ignite key, or the panel box.
It is not printed back. The panel box is the one that does
not leave the key in the chat edit line. The key is plain
text in SavedVariables. Anyone with the computer can read it.
Use a key you can rotate. /baseline clear does not delete it.
/baseline ignite forget does.

/baseline ignite on refuses unless the parameters are filled
and a key is held. Lit means armed. It does not mean a call
went out. Forever addons have no socket. If a callable named
C_HTTP, HTTPRequest, or SendHTTPRequest is present, ask will
say so and still not call it.

Changing provider, model, endpoint, auth, shape, tokens, or
temp turns the light off. Turn it on again after.


DRIFT MARKS
-----------
narrative, irony, mismatch, trauma.
A mark says what the room is doing. It does not take a target
and it is not a score on a person. Definitions print when you
file one.


LIMITS
------
Another officer does not see your lock until you paste it.
Bags are not read. The consume tick is yours to set.
Addons cannot remove a player from the group. A bench is a
line of text. You still have to bench them.

Not affiliated with Blizzard Entertainment or any other guild.


LICENSE
-------
All rights reserved. See LICENSE.txt. You may download Baseline
and use it for your own play. Redistributing or reusing the code
needs written permission. This license applies to this copy
onward. Copies released earlier under MIT stay under MIT.
