Skip to content

Subroutine 0.9.13

Choose a tag to compare

@github-actions github-actions released this 30 Sep 15:05
· 236 commits to main since this release
  • An instance other people can reach stops sending OSC at this upgrade, until whoever runs it
    turns it on.
    A workspace's administrator could have the server send a message to any machine
    and port on every event, and nothing let the operator refuse. osc_enabled in the
    configuration decides now: unset, an instance sends where only its own machine can reach it, and
    sends nothing where it has a public_url or listens beyond loopback. Set osc_enabled = true
    and restart to go on sending. Each workspace keeps where it sends, and its settings page says so
    while nothing is sent. Whatever the setting says, nothing goes to an address in
    169.254.0.0/16, where a cloud server answers questions about itself: a destination there is
    refused, and one already set sends nothing.
  • OSC is sent once a change is saved, and never for one that was not. Each workspace's
    messages went out while the change was still being saved, so one whose saving then failed was
    heard all the same. And a music computer that could not be found held up every other
    workspace's messages while it was looked for again, once a message; it is looked for once a
    minute now.
  • db copy moves an instance where a project has been prioritised. It failed in both
    directions with a raw foreign key error, since a workspace's prioritised project names a table
    copied after it; the reference is now filled in once everything it can name is there.
  • A credential that may not comment cannot edit or delete its owner's comments either. Adding
    a comment asked for comment:write in the item's project, and editing and deleting asked only
    who wrote it, so a token scoped to reading, or one that may write only in another project,
    rewrote and deleted its owner's comments.
  • A repeat naming two days, such as the 1st and 15th of the month, works. Every write of
    such a rule answered 500, since reading it back as a sentence took the list for one number. It
    reads every month, on the 1st and 15th now.
  • Giving an existing task a repeat keeps its end time, reminder and assigner. Each later
    occurrence of a meeting made to repeat afterwards lost all three, where the same series filed in
    one go kept them. A repeating sub-task's series is filed under the same parent as the task, too.
  • The repeat preview answers somebody who can reach two workspaces. It asked which workspace,
    which nothing could say, so the browser showed that refusal under the Repeats box. It takes
    ?workspace_id= now, like every other request that can name one, and with several and none
    named it reads days in the instance's zone. The browser names the workspace, and on an open
    item it sends that item's own workspace and zone.
  • A repeat's coming dates fall where the series does, whoever reads them. They were worked
    out in the reader's time zone, so a London series on Mondays at 00:30, read from New York,
    listed Tuesdays and lost its first Monday. The reader's zone still decides what until
    August
    means to them.
  • Over a remote connection, show and uncomment see all of an item's comments. They read
    the first fifty, so an item commented on all day showed an old comment as its latest, and one
    past the fiftieth could not be withdrawn.
  • The change feed no longer says events were pruned on an instance that has pruned nothing.
    since=1 answered 410 once a second workspace existed, and on PostgreSQL whenever the
    sequence had a gap, which one rolled-back write leaves. Nothing prunes yet, so nothing is
    refused as expired; the refusal returns with the pruning, measured against what it pruned.
  • An all-day repeat moved from now on across a clock change stays on its day. It was moved by
    the hours in the move rather than the days, so a London series on Mondays moved from October
    into November landed on the Sunday, and the occurrence after the moved one came round on that
    same Monday again.
  • The terminal's first-run messages say what happened, and three crash reports and a hang are
    gone.
    init --workspace <name> on an instance that already has its first workspace says the
    name was not used and how to make another workspace, where it said nothing. Failing to open
    anything says Nothing could be opened., since a write meets it as well as a read. The
    missing-driver hint names uv tool install 'subroutine[postgres]' as well as pip, and
    user create says is now a member of. init where the system cannot say who is running it
    asks for --username; doc edit says so when the editor quits without saving, is not
    installed or has an unbalanced quote; and a token_command with an unbalanced quote is refused
    naming the setting. Each of those ended in a crash report. document create without --body
    reads standard input only when something is piped, so it no longer waits for ever under an
    agent's shell.
  • Odd values are refused by name, where each answered 500 or was stored on SQLite only. An
    agenda looking millions of days ahead, or reaching 31 December 9999 west of UTC; a rank filter
    past what a rank can hold, such as importance.gt=40000; a change-feed since or before
    past the largest sequence number; a zone name longer than a filename; an estimate of ²; a
    status position past two billion; and a cursor holding a character that is not ASCII each
    answered 500 on one backend or both. A NUL in a listing's filter or in an address, or in a
    task's assignee, project, type or status, was a 500 on PostgreSQL, and an agent's tools
    reported it as the database failing, with advice to check that it could be reached. A NUL in a
    tag's description or in a verification's summary or excerpt, and an instance name longer than
    255 characters, were stored on SQLite and a 500 on PostgreSQL. Each is refused now, saying
    what was wrong. An agenda can no longer be built for the calendar's last day, which no clock
    east of UTC can show.
  • Quick capture leaves a tag it cannot make in the title, and says why. Ship it #ops,web
    was refused whole, because a tag cannot hold a comma; it is filed as written now, with a
    note carrying the tag rule's own advice. A tag longer than 128 characters is left the same
    way.
  • Seven smaller gaps in who may do what are closed. A token sent without Bearer in front
    is no longer quoted back whole in the refusal, which put a live secret into a body an agent
    keeps. /v1/me calls a credential narrowed only in the projects it may write narrowed in
    every workspace, as the rest of its answer and /v1/tokens already did. A milestone refused
    a new type no longer says how many items it includes, a count of work the reader may not see
    and of work in the trash. local_user naming an agent whose person has left is refused, as
    the agent's own token is. A workspace's short name written in capitals reaches its members
    and its deletion, as it already reached its record. An account cannot be made with a time
    zone nothing knows. And a project's owner must be a member of its workspace, when the project
    is made and when it is handed over: an id naming nobody was a 500, and an account outside the
    workspace was taken, so a private project made that way was hidden from whoever made it.
  • A credential narrowed to some projects administers nothing beyond them. An owner's or
    administrator's token narrowed to one project could change the whole workspace: rename it,
    change its settings - pointing its OSC anywhere included - add and remove its members and
    administrators, curate its statuses, tags and link types, moderate other people's comments and
    shared views, and move it to the trash. A superuser's could make accounts, list and revoke
    other people's credentials, sign them out, and list every workspace on the instance. All of it
    is refused now, saying why, and /v1/me no longer offers it to such a credential. Work in its
    projects is unchanged, and so is each project's own administration. An agent that curates
    the vocabulary or moderates
    needs a credential that is not narrowed to projects.
  • Only an owner makes, demotes or removes an owner. An administrator could make anybody
    owner, themselves included, and then delete the workspace, or remove the owner who founded it,
    though deleting the workspace is the one thing an owner may do and an administrator may not.
    An administrator still grants roles up to administrator and removes anyone but an owner, and
    whoever runs the instance is not bound by roles.
  • A backup whose counts could not be taken no longer reads as empty. Counting what a backup
    holds stopped at the first table it could not read, and the listing then described the copy
    as an empty instance, not your work. Each kind is counted on its own now, and db backup
    and db backups name what could not be counted. A pg_dump, pg_restore or psql still
    running after ten minutes is stopped and reported in words, where it went on behind a crash
    report. POST /v1/admin/backups refuses a keep below 1 before taking the backup rather than
    after, and restoring a backup from the other engine says a PostgreSQL backup ends in .dump.
  • Three smaller faults in the browser are put right. A list whose project went away between
    a page and its Show more fell back to the whole workspace part way down, skipping its first
    rows until a reload; it starts from the top now. The note saying a project has gone stayed up
    after moving to a live project or another page, and goes now. And an Until time earlier than
    the start's, given no day of its own, ends the next day - 21:00 until 01:00 - where it took
    the start's day and was refused as finishing before it starts.
  • A series moved from now on across a clock change keeps its waiting occurrence on its
    grid.
    A weekly 09:00 series moved from October into November, past the clocks going back,
    left the occurrence it had already made standing for 10:00 that week, where the series is at
    09:00. A subscribed calendar then showed a 09:00 that week which nothing would ever offer as
    work.
  • One item's cursor is refused on another's. A cursor from one item's history, journal or
    comments was accepted on a different item's and carried on from where the first had stopped,
    leaving rows out. It is refused now, as a cursor from another listing is.
  • An agent is not made, or handed on, where it could never act. A chain of sixteen agents
    nested one below another was refused as runs in a circle, though it reached a person; it is
    called too long now. Making an agent at that depth, or handing one over where an agent below
    it would end up there, is refused before it happens, where each went ahead and every request
    the agent made was then refused. The API's description of adding a member names the
    permission it checks, and a worked example that promised one project now sends one.
  • A section goes where its document is, when nothing names a project, as a sub-task goes
    where its parent is. It was refused on every surface as belonging somewhere else.
  • Claiming a repeat by its own number is refused, naming the occurrence to claim, as a
    deferral or a skip is. It held the series, and the occurrence stayed ready for anybody else.
  • A pair joined both ways by one kind can be unlinked. A duplicates B and B duplicates
    A
    are two links, and withdrawing one from unlink or subroutine_link was refused, asking
    for the kind it had been given. The one withdrawn is the one that runs from the item named.
  • subroutine mcp takes -w, before or after it. One before it was dropped without a word,
    and one after it was not an option.
  • A workspace's last active administrator cannot be removed: an administrator who has been
    deactivated no longer counts as one staying.
  • A .subroutine file that is not UTF-8, or a working directory that has been deleted, is
    read as no marker, where the terminal and subroutine mcp stopped at it.
  • Quick capture sets nothing from a time beside a span it could not read, as beside a date it
    left whole. Conference October 2-12, 2024 at 9am started today at 09:00. And a repeat
    typed with two spaces is read
    : every monday was stored while its note said it had not
    been.
  • A calendar feed answers "not modified" again for an old repeat in a zone without summer
    time
    , where the feed changed at every poll.
  • A date within a day of the calendar's first or last is refused where some clock could not
    show it.
    For an account in Guam a deadline in the first hours of year 1 was stored, and then
    every answer about the item failed.
  • In the browser, the menu of saved views fits a short screen, where it opened partly off the
    left edge and ran past the bottom, and it no longer comes back marked as open after the last
    view was forgotten from inside it. And every project is offered: the project picker and
    the settings pages read the first two hundred and stopped.
  • A mistake in the configuration is said once, and the warning about a setting nothing reads
    names the right profile's file.
    One bad value was printed five times above the help, and
    with --profile the warning named the default instance's file. default_connection is read
    whatever its case, as every other connection name is, and its refusal is said once.
  • subroutine doctor changes nothing: it made the data and backup directories it was
    asked about. db copy prints the address to paste without its password, and
    user create with a role the workspace has not got says the account was made and how to
    finish, where a retry answered that the name was taken.
  • subroutine_call_api refuses a path that steps out of the API with .., where
    /v1/../mcp reached the transport that hosts it. The MCP server answers params that are
    not an object as invalid params rather than as an internal error. A connection's address is
    quoted in refusals without its user and password, and a response of the wrong shape from a
    remote instance is a refusal naming the connection wherever it is read, not a traceback.
  • A repeat's series is turned down by name wherever one occurrence is meant, on every
    surface.
    Moving it, putting work under it and linking it name the occurrence to act on
    instead, and deleting it says that a repeat is stopped by marking it done. The terminal turned
    all of these down on its own database, while the API, the browser and a remote connection
    moved, deleted and linked the series.
  • A repeating task deeper than ten levels gets its next occurrence on an instance that allows
    more: finishing one was refused, naming the setting already raised. A rule that repeats no
    times, COUNT=0, is refused
    rather than stored, and one on the last day of the month reads
    back as on the last day
    , not on the -1th.
  • A repeat can end on a date, written as calendars write one: UNTIL=20261210 was refused
    with a sentence about time zones, and is the whole of that day now. The calendar feed writes
    an all-day series' end as a date
    , as the standard requires beside a start that is one; it
    wrote a time there, which a strict calendar refuses.
  • An item in the trash is refused every change but restoring it, naming the trash: it could
    be edited, finished, skipped, claimed and moved as though it were live, and finishing a
    trashed occurrence of a repeat brought the next one. Moving a task or a document to another
    project takes what is in the trash beneath it too
    , so restoring a sub-task or a section no
    longer files it apart from what it is part of.
  • Help that described a program other than this one says what it does. subroutine_project
    told an agent nothing could share a private project, where its own description names the
    route that does; init --password-stdin stores a password nothing reads yet; login link
    spoke of signing in by email, which nothing sends; and user transfer said only a person
    could take an agent on, where an agent whose chain ends at a person may. explain dates,
    explain estimates and explain scripting printed Markdown's asterisks.
  • protected = true written below a [connections.…] table is named on every command, with
    the setting it would have been. TOML files it inside the table, where it protected nothing:
    db restore replaced a database without asking and config show said protected False.
  • setup claude says when its hook would find nothing to run: it runs subroutine by name,
    and gives nothing back where that is not on the PATH.
  • The hosting and connecting guides and the README no longer name upgrade alone, promise a
    calendar refresh every quarter of an hour, say the remote plugin asks for its address and
    token, or say help lists every command.
  • A credential narrowed to writing in some projects says so in token list, the API's
    compact rows and the browser's settings page, where each called it everything its owner can
    do
    . The roster of one workspace marks somebody who has left, as the instance's does.
  • calendar create and calendar reset say whose public_url is missing, the server's
    over a connection, and a reset prints the reference it leaves, which the next one needs.
  • A sign-in link for an account that has left is refused naming it, where the refusal read
    as the caller's own credential being wrong. use with nothing chosen says so, project rename
    and workspace rename no longer say a .subroutine file breaks, and the API's refusal of an
    unknown parameter speaks of fields only where that is what was meant.
  • A repeat whose parts no calendar reaches is refused by name. INTERVAL=0 was stored, and
    completing its occurrence never returned, holding the server; BYMONTHDAY=0 came round every
    day. An interval below one or past about a hundred years, a day of the month beyond 31, a month
    beyond 12, a part named twice, COUNT beside UNTIL and a weekday counted where a repeat
    cannot count one are refused as they are written, and a changed rule is asked whether it ever
    comes round, as a new one is.
  • serve refuses a port it may not use, or an address this machine does not have, in a
    sentence
    , where each ended in a crash report.
  • document edit on a document in the trash is refused before the editor opens, where the
    text typed there was thrown away.
  • The agent's tools name a new private project by its whole address when they say how to
    share it or open it, so the advice for alpha/web no longer reaches a project called web.
  • A timed series moved from now on keeps its time of day when the occurrence moved had been
    made all-day for itself alone, where it was put at midnight.
  • A whole-day series moved into a zone more than twelve hours away lands on the day given,
    where it landed a day early and could make its next occurrence on the same day.
  • A credential pinned to one workspace administers nothing on the installation, a
    superuser's included: it listed and revoked colleagues' credentials, made accounts, and could
    make a credential in a colleague's name.
  • An administrator may make an owner where no owner can still act, so a workspace whose only
    owner stepped down, left or was deactivated can be put right from inside it. While an owner can
    act, only an owner makes one.
  • A connection whose address nothing can use fails alone, and a configuration that cannot be
    read is said to the agent's tools when they start: either stopped every command, or left the
    agent with no tools and nothing said.
  • explain connecting names a use that works, and the hosting guide names the token variable
    of one connection rather than the default's.
  • The browser's add form keeps what was chosen after an item is added: the second item went
    to the Inbox with the first status, and a sub-task after it was refused.
  • The browser shows every comment on an item, where it showed the oldest hundred, so on a
    busy item a new comment never appeared.
  • A PostgreSQL restore that fails, or is stopped at its time limit, leaves the database as it
    was
    , and says so, where it left an empty database.
  • Capture's note on a time left in the title no longer contradicts the line: it said a day had
    not been read when it had, and quoted words that had been read.
  • A checkout's .subroutine file reaches the terminal and the agent's tools alike. An agent
    narrowed to one project files by it without being asked for project:read; a checkout marked
    for a nested project files there, not into a top-level project of the same key; document create files where the file says; and a file naming only a workspace reaches the agent's tools.