A postPublish hook knew the version and tag, but not where the release actually landed. To announce a release with a link, you had to reconstruct the URL by hand.

FerrFlow now hands it to you. Once the forge release is created, postPublish hooks receive releaseUrl: the canonical URL of the GitHub or GitLab release for that package's tag. Shell hooks read FERRFLOW_RELEASE_URL; JS/TS function hooks get ctx.releaseUrl.

export default {
  workspace: {
    hooks: {
      postPublish(ctx) {
        if (ctx.releaseUrl) notify(`${ctx.package}@${ctx.newVersion}${ctx.releaseUrl}`);
      },
    },
  },
};

It's null wherever the URL isn't known yet: at prePublish (the release isn't created until after), on --dry-run, and when no forge is configured.