9 Workflows

Link

Show More

Places

  • new {"info":"Link extracted from a Page, not yet resolved","description":"Link extracted from a Page, not yet resolved"}
  • resolved {"info":"Final URL resolved (redirects followed). Landing here kicks off Article creation automatically.","description":"Final URL resolved (redirects followed). Landing here kicks off Article creation automatically.","next":["create_article"]}
  • article_exists {"info":"The resolved final URL already has (or now has) a matching Article","description":"The resolved final URL already has (or now has) a matching Article"}
  • pending_fetch {"info":"Queued for resolution (HEAD request \/ redirect-follow)","description":"Queued for resolution (HEAD request \/ redirect-follow)"}
  • error {"info":"Resolution failed (bad status, cache check failure)","description":"Resolution failed (bad status, cache check failure)"}

Transitions

  • resolve {"info":"HEAD request, follow redirects to the final URL","description":"HEAD request, follow redirects to the final URL","async":true}
  • create_article {"info":"Create (or find) the Article for this Link's final URL","description":"Auto-dispatched via PLACE_RESOLVED's next: cascade -- not called directly elsewhere.","async":true}
  • delete_article {"info":"Remove the Article this Link created (used to undo a bad create_article)","description":"Remove the Article this Link created (used to undo a bad create_article)","async":true}
  • error {"info":"Resolve failed (non-2xx \/ exception)","description":"Resolve failed (non-2xx \/ exception)"}
  • _bad_cache_check {"info":"Cached response for this URL is stale\/invalid","description":"Cached response for this URL is stale\/invalid"}

page

Show More

Places

  • new {"info":"Page registered (app:add-page), not yet activated","description":"Page registered (app:add-page), not yet activated"}
  • active {"info":"Scrapable. Can be scraped repeatedly (self-loop transition).","description":"Scrapable. Can be scraped repeatedly (self-loop transition)."}
  • inactive {"info":"Not scraped -- disabled or failed activation","description":"Not scraped -- disabled or failed activation"}

Transitions

  • activate {"info":"Activate a newly registered Page","description":"Activate a newly registered Page"}
  • scrape {"info":"Extract headline Links from the Page and dispatch each for resolution","description":"Extract headline Links from the Page and dispatch each for resolution","async":true}
  • scrape_fail {"info":"Scrape failed","description":"Scrape failed"}

project

Show More

Places

  • new {"info":"Project created, not yet active","description":"Project created, not yet active"}
  • active {"info":"Articles are being matched\/tagged against this Project","description":"Articles are being matched\/tagged against this Project"}
  • inactive {"info":"Not currently matching articles","description":"Not currently matching articles"}

Transitions

  • activate {"info":"Activate the Project","description":"Activate the Project"}
  • deactivate {"info":"Deactivate the Project","description":"Deactivate the Project"}

ArticleWorkflow

Show More

Places

  • new {"info":"Article row created, not yet fetched","description":"Article row created, not yet fetched"}
  • needs_review {"info":"Fetched (or re-fetched); metadata awaiting confirm\/block. Landing here auto-checks for a failed fetch.","description":"Fetched (or re-fetched); metadata awaiting confirm\/block. Landing here auto-checks for a failed fetch.","next":["_fetch_fail"]}
  • fetch_failed {"info":"Fetch failed with a non-200 status and no source date to salvage it","description":"Fetch failed with a non-200 status and no source date to salvage it"}
  • blocked {"info":"Blocked from appearing (login pages, individually excluded urls, etc.)","description":"Blocked from appearing (login pages, individually excluded urls, etc.)"}
  • confirmed {"info":"Metadata confirmed as publishable","description":"Metadata confirmed as publishable"}

Transitions

  • fetch {"icon":"mdi:bookmark","info":"Fetch the _contents_ of the URL. Might be cached (RFC 9111 HTTP cache + ScrapeService dedup).","description":"Fetch the _contents_ of the URL. Might be cached (RFC 9111 HTTP cache + ScrapeService dedup).","async":true,"next":["extract_meta"]}
  • approve_meta {"icon":"mdi:thumbs-up","info":"Confirm that the metadata is publishable","description":"Confirm that the metadata is publishable"}
  • extract_meta {"icon":"mdi:sync","info":"Extract article metadata (headline\/summary\/etc) from the fetched content","description":"Auto-dispatched via TRANSITION_FETCH's next: cascade once it completes."}
  • _fetch_fail {"info":"Fetch returned a non-200 status and we have no usable source date to fall back on","description":"Guarded, sync reaction to TRANSITION_FETCH -- triggered automatically via PLACE_NEEDS_REVIEW's next: cascade, not called directly."}
  • block {"icon":"mdi:thumbs-up","info":"Block this article from appearing","description":"Block this article from appearing"}

suggestion

Show More

Places

  • new {"temp":true}
  • queued

Transitions

  • queue

story

Show More

Places

  • new {"temp":true}
  • exists {"temp":true}
  • resolved {"temp":true,"description":"HEAD call, finalUrl set"}
  • scrape_problem {"temp":true,"bg_color":"red","description":"HEAD call, permission error, site dead "}
  • ignored {"temp":true,"description":"low score so ignored"}
  • scorable {"temp":true,"description":"Unique, mediaId set"}
  • fetchable {"temp":true,"description":"Fetch Criteria Met"}
  • subsite {"temp":true,"description":"Subsite"}
  • ready {"icon":"fad fa-chalkboard-teacher","label":"Waiting for Editor","description":"Reviewing Story, Ready for Tagging and Approval\/Rejection"}
  • pending_meta {"system":true,"label":"Waiting for Date\/Media","description":"GET call, has article"}
  • rejected {"arrow_color":"red","description":"Story has been rejected (not important or relevant)"}
  • similar_story {"description":"Too similar to existing story"}
  • posted {"description":"Posted on Website"}
  • promoted {"description":"Top Story on Website"}

Transitions

  • resolve
  • _bad_cache_check {"arrow_color":"#0088FF","color":"red"}
  • _duplicate_url
  • has_media
  • _final_exists {"label":"Mark Duplicate"}
  • low_fetch_score
  • high_fetch_score
  • create_story {"label":"Persist Story, Create Article"}
  • _meta_approved {"description":"Meta Data - date","summary,":"Article Meta Approved"}
  • tag {"description":"Tag Story","class":"btn-primary"}
  • reset {"class":"btn-primary","description":"Reset"}
  • post {"class":"btn-primary","description":"Post on Web"}
  • promote {"class":"btn-success","label":"Promote","description":"Promote on Web"}
  • reject {"class":"btn-danger","label":"Not relevant"}
  • too_similar {"class":"btn-secondary","label":"Too Similar"}

edition

Show More

Places

  • new
  • closed
  • archived
  • indexed

Transitions

  • close
  • archive
  • index

media

Show More

Places

  • new
  • healthy
  • automated
  • probation
  • problem
  • not_news
  • active

Transitions

  • activate
  • automate
  • not_news_website

site

Show More

Places

  • new
  • scrape_requested
  • active
  • inactive
  • maintenance
  • dead
  • unauthorized
  • probation

Transitions

  • maintain {"class":"bg-warning","icon":"fas fa-gear text-warning","description":"If basic fetch works, then start background fetching"}
  • deactivate {"class":"bg-warning","icon":"fas fa-gear text-warning"}
  • request_scrape {"class":"bg-warning","icon":"fas fa-download","description":"Background process will scrape the headlines"}
  • scrape_success {"class":"bg-warning","icon":"fas fa-download","description":"Background process will scrape the headlines"}
  • scrape_fail {"class":"bg-danger","icon":"fas fa-danger"}
  • bad_dns {"class":"bg-danger","icon":"fas fa-danger"}
  • activate
  • bad_login {"description":"Begin fetching headlines from this site"}
  • fix_credentials {"description":"Fix the login problem"}
  • fetch_okay {"description":"Starts working again (url fix, site up again, etc.)"}
  • repeated_failure
  • report_bad_fetch