Show R code
source("npfmcSAFE.R")
library(dplyr)
library(gt)
library(scales)source("npfmcSAFE.R")
library(dplyr)
library(gt)
library(scales)This document builds a combined catalog from:
It is designed to audit naming consistency, link structure, and year anomalies, with special attention to the unusual 2025 groundfish page.
resource/data wrappers are dereferenced so the catalog keeps the underlying downloadable assessment files when those links are exposed on the wrapper page.catalog_path <- file.path("outputs", "safe_catalog.csv")
if (file.exists(catalog_path)) {
safe_catalog <- readr::read_csv(catalog_path, show_col_types = FALSE)
} else {
safe_catalog <- build_safe_catalog(crawl_noaa = TRUE, quietly = TRUE)
write_safe_outputs(safe_catalog, out_dir = "outputs")
}
safe_summaries <- summarise_safe_catalog(safe_catalog)These summary counts show the current size of the catalog, how many links were flagged as unusual, and how much temporal and stock coverage the combined crawl currently reaches.
headline <- tibble::tibble(
metric = c(
"Total unique linked documents",
"Anomalous links flagged",
"Distinct stocks inferred",
"Distinct effective years inferred"
),
value = c(
nrow(safe_catalog),
sum(safe_catalog$is_anomalous, na.rm = TRUE),
dplyr::n_distinct(stats::na.omit(safe_catalog$stock)),
dplyr::n_distinct(stats::na.omit(safe_catalog$true_year))
)
)
headline |>
gt() |>
fmt_number(columns = value, decimals = 0)| metric | value |
|---|---|
| Total unique linked documents | 1,326 |
| Anomalous links flagged | 3 |
| Distinct stocks inferred | 41 |
| Distinct effective years inferred | 32 |
This plot gives the fastest read on whether the crawl is reaching the expected historical range and whether any NOAA entry-point changes created visible gaps in year coverage.
These views group stocks by FMP first, then by the most relevant sub-area within that FMP. GOA entries are separated into GOA versus Both where needed, while BSAI entries are separated into EBS, AI, or Both.
This long table lists terminal assessment links that point to the actual downloadable files rather than wrapper pages. It is the main place to confirm that NOAA resource/data cover pages and the REFM historic archive are being converted into live end-document URLs.
resolved_noaa_links <- safe_catalog |>
filter(
source %in% c("NOAA", "NOAA_REFM"),
!grepl("fisheries.noaa.gov/resource/data", url, fixed = TRUE)
) |>
arrange(desc(true_year), filename, label) |>
mutate(
live_link = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">open</a>',
url
)
) |>
select(source, true_year, filename, live_link, label, stock)
DT::datatable(
resolved_noaa_links,
filter = "top",
escape = FALSE,
rownames = FALSE,
class = "compact stripe hover",
colnames = c("source", "true_year", "filename", "live_link", "label", "stock"),
options = list(
pageLength = 25,
autoWidth = TRUE,
order = list(list(1, "desc"), list(2, "asc"), list(4, "asc"))
),
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: left; font-weight: 600;",
"Resolved NOAA and REFM terminal assessment links"
)
) |>
DT::formatStyle(columns = names(resolved_noaa_links), `white-space` = "nowrap")The anomaly table focuses on links where the visible year, directory year, or reused filename pattern does not line up cleanly with the inferred effective year.
safe_summaries$anomalies |>
select(source, section, label, filename, source_year_dir, true_year, anomaly_flags, url) |>
gt() |>
fmt_missing(everything(), missing_text = "") |>
tab_header(title = "Flagged anomalies")| Flagged anomalies | |||||||
| source | section | label | filename | source_year_dir | true_year | anomaly_flags | url |
|---|---|---|---|---|---|---|---|
| NPFMC | 2025 Groundfish SAFEs | 2026 GOA Pacific cod | GOApcod.pdf | 2025 | 2026 | dir_year_differs_from_true_year; goapcod_filename_reused | https://files.npfmc.org/SAFE/2025/GOApcod.pdf |
| NPFMC | 2025 Groundfish SAFEs | 2026 GOA Pacific cod ESP | GOApcodESP.pdf | 2025 | 2026 | dir_year_differs_from_true_year | https://files.npfmc.org/SAFE/2025/GOApcodESP.pdf |
| NPFMC | 2025 Groundfish SAFEs | 2026 GOA Pacific cod ESP Report Card | GOApcodESP_Report_Card.pdf | 2025 | 2026 | dir_year_differs_from_true_year | https://files.npfmc.org/SAFE/2025/GOApcodESP_Report_Card.pdf |
Repeated filenames across multiple effective years are worth tracking because they can hide silent document replacement or directory reuse.
For this audit, the effective year is based on the assessment folder or page context, not on any file timestamp. For example, 2003/EBSpollock.pdf is treated as the 2003 assessment because of the folder name, regardless of the file’s later modification date.
The summary table below is meant to be read one filename at a time. Each row says that the same basename appears in multiple assessment years, shows the total number of distinct years, and lists those years explicitly. For example, if AIpcod.pdf has 8 years listed, that means the same filename was reused in eight separate assessment-year contexts.
filename_collision_summary <- safe_summaries$filename_collisions |>
group_by(source, filename, n_true_years) |>
summarise(
first_year = min(true_year, na.rm = TRUE),
last_year = max(true_year, na.rm = TRUE),
years = paste(sort(unique(true_year)), collapse = ", "),
.groups = "drop"
) |>
arrange(source, filename)
filename_collision_summary |>
gt() |>
cols_label(
n_true_years = "distinct_years",
first_year = "first_year",
last_year = "last_year",
years = "year_list"
) |>
fmt_missing(everything(), missing_text = "")| source | filename | distinct_years | first_year | last_year | year_list |
|---|---|---|---|---|---|
| NOAA | AIpcod.pdf | 8 | 2016 | 2024 | 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | AIpollock.pdf | 21 | 2013 | 2024 | 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BOGpollock.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAI.zip | 2 | 2017 | 2018 | 2017, 2018 |
| NOAA | BSAIatf.pdf | 23 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIatka.pdf | 22 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIflathead.pdf | 21 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIforage.pdf | 2 | 2021 | 2023 | 2021, 2023 |
| NOAA | BSAIgrenadier.pdf | 7 | 2013 | 2014 | 2013, 2014 |
| NOAA | BSAIintro.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIkamchatka.pdf | 16 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAInork.pdf | 12 | 2014 | 2024 | 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAInorthern.pdf | 8 | 2013 | 2013 | 2013 |
| NOAA | BSAIocto.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIoflat.pdf | 21 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIorock.pdf | 22 | 2013 | 2024 | 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIplaice.pdf | 21 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIpop.pdf | 23 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIrocksole.pdf | 19 | 2014 | 2024 | 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIrougheye.pdf | 17 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIsablefish.pdf | 13 | 2013 | 2018 | 2013, 2014, 2015, 2016, 2017, 2018 |
| NOAA | BSAIshark.pdf | 18 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIshortraker.pdf | 18 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIskate.pdf | 19 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIturbot.pdf | 19 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | BSAIyfin.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | EBSPollock.pdf | 5 | 2019 | 2023 | 2019, 2020, 2021, 2022, 2023 |
| NOAA | EBSmultispp.pdf | 8 | 2016 | 2024 | 2016, 2017, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | EBSpcod.pdf | 12 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | EBSpollock.pdf | 15 | 2013 | 2024 | 2013, 2014, 2015, 2017, 2024 |
| NOAA | GOAatf.pdf | 25 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAatka.pdf | 25 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAdeepflat.pdf | 18 | 2014 | 2024 | 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAdsr.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAdusky.pdf | 16 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAflathead.pdf | 20 | 2013 | 2024 | 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAforage.pdf | 10 | 2018 | 2022 | 2018, 2020, 2021, 2022 |
| NOAA | GOAintro.pdf | 21 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAnork.pdf | 11 | 2014 | 2024 | 2014, 2015, 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAnorthern.pdf | 7 | 2013 | 2013 | 2013 |
| NOAA | GOAnsrocksole.pdf | 13 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAocto.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAorock.pdf | 14 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023, 2024 |
| NOAA | GOApcod.pdf | 23 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOApollock.pdf | 23 | 2015 | 2024 | 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOApop.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOArex.pdf | 22 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOArougheye.pdf | 19 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAsablefish.pdf | 10 | 2016 | 2018 | 2016, 2017, 2018 |
| NOAA | GOAshallowflat.pdf | 19 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAshark.pdf | 18 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAshortraker.pdf | 18 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023, 2024 |
| NOAA | GOAskate.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | GOAthorny.pdf | 20 | 2013 | 2024 | 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 |
| NOAA | aipcod.pdf | 4 | 2013 | 2017 | 2013, 2014, 2015, 2017 |
| NOAA | north-pacific-groundfish-stock-assessments-and-fishery-evaluation | 2 | 2024 | 2024 | 2024 |
| NOAA | sablefish.pdf | 10 | 2019 | 2023 | 2019, 2020, 2021, 2022, 2023 |
| NOAA_REFM | AIpollock.pdf | 21 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BOGpollock.pdf | 20 | 2005 | 2012 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIGturbot.pdf | 2 | 2005 | 2006 | 2005, 2006 |
| NOAA_REFM | BSAIPcod.pdf | 2 | 2005 | 2006 | 2005, 2006 |
| NOAA_REFM | BSAISafe.pdf | 5 | 2007 | 2011 | 2007, 2008, 2009, 2010, 2011 |
| NOAA_REFM | BSAI_Intro.pdf | 2 | 2004 | 2005 | 2004, 2005 |
| NOAA_REFM | BSAIalaskaplaice.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | BSAIatf.pdf | 23 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIatka.pdf | 22 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIfhs.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | BSAIflathead.pdf | 21 | 2005 | 2012 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIgrenadier.pdf | 7 | 2008 | 2012 | 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIgturbot.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | BSAIintro.pdf | 20 | 2003 | 2012 | 2003, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIkamchatka.pdf | 16 | 2010 | 2012 | 2010, 2011, 2012 |
| NOAA_REFM | BSAInorthern.pdf | 8 | 2003 | 2012 | 2003, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAInortherns.pdf | 2 | 2004 | 2005 | 2004, 2005 |
| NOAA_REFM | BSAIocto.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIoflat.pdf | 21 | 2005 | 2012 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIoflats.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | BSAIorock.pdf | 22 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIpcod.pdf | 9 | 2003 | 2012 | 2003, 2004, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIplaice.pdf | 21 | 2005 | 2012 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIpop.pdf | 23 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIrocksole.pdf | 19 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIrougheye.pdf | 17 | 2008 | 2012 | 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIsablefish.pdf | 13 | 2004 | 2012 | 2004, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIsculpin.pdf | 7 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIshark.pdf | 18 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIsharks.pdf | 3 | 2004 | 2005 | 2004, 2005 |
| NOAA_REFM | BSAIshortraker.pdf | 18 | 2008 | 2012 | 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIskate.pdf | 19 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIsquid.pdf | 6 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIsrre.pdf | 5 | 2003 | 2007 | 2003, 2004, 2005, 2006, 2007 |
| NOAA_REFM | BSAIturbot.pdf | 19 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSAIyfin.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | BSatf.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSatka.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSfhs.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSgturb.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSoflats.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSorock.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSpcod.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSpollock.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | BSpop.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | EBSpollock.pdf | 15 | 2003 | 2012 | 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | EcoChpt.pdf | 2 | 2005 | 2006 | 2005, 2006 |
| NOAA_REFM | GOAPOP.pdf | 3 | 2003 | 2005 | 2003, 2004, 2005 |
| NOAA_REFM | GOAPcod.pdf | 2 | 2005 | 2006 | 2005, 2006 |
| NOAA_REFM | GOASafe.pdf | 5 | 2007 | 2011 | 2007, 2008, 2009, 2010, 2011 |
| NOAA_REFM | GOAatf.pdf | 25 | 2001 | 2012 | 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAatka.pdf | 25 | 2001 | 2012 | 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAdeepflat.pdf | 18 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAdemersalRF.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | GOAdsr.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAdusky.pdf | 16 | 2003 | 2012 | 2003, 2011, 2012 |
| NOAA_REFM | GOAfhs.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | GOAflathead.pdf | 20 | 2005 | 2012 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAforage.pdf | 10 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAgrenadier.pdf | 5 | 2008 | 2012 | 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAintro.pdf | 21 | 2003 | 2012 | 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAnorthern.pdf | 7 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAnorthernrf.pdf | 2 | 2003 | 2004 | 2003, 2004 |
| NOAA_REFM | GOAnsrocksole.pdf | 13 | 2012 | 2012 | 2012 |
| NOAA_REFM | GOAocto.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAorock.pdf | 14 | 2011 | 2012 | 2011, 2012 |
| NOAA_REFM | GOApcod.pdf | 23 | 2001 | 2012 | 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOApelshelf.pdf | 5 | 2006 | 2010 | 2006, 2007, 2008, 2009, 2010 |
| NOAA_REFM | GOApollock.pdf | 23 | 2001 | 2012 | 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOApollocksurvey.pdf | 2 | 2001 | 2002 | 2001, 2002 |
| NOAA_REFM | GOApop.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOArex.pdf | 22 | 2004 | 2012 | 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOArougheye.pdf | 19 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAsablefish.pdf | 10 | 2003 | 2012 | 2003, 2004, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAsculpin.pdf | 7 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAshallowflat.pdf | 19 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAshark.pdf | 18 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAsharks.pdf | 2 | 2006 | 2006 | 2006 |
| NOAA_REFM | GOAshortraker.pdf | 18 | 2007 | 2012 | 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAskate.pdf | 20 | 2003 | 2012 | 2003, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAskates.pdf | 3 | 2004 | 2006 | 2004, 2005, 2006 |
| NOAA_REFM | GOAsquid.pdf | 7 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAthorny.pdf | 20 | 2006 | 2012 | 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | GOAthornyheads.pdf | 3 | 2002 | 2004 | 2002, 2003, 2004 |
| NOAA_REFM | IPHC.pdf | 2 | 2008 | 2009 | 2008, 2009 |
| NOAA_REFM | ecochap.pdf | 2 | 2002 | 2003 | 2002, 2003 |
| NOAA_REFM | economic.pdf | 11 | 2002 | 2012 | 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 |
| NOAA_REFM | ecosystem.pdf | 5 | 2007 | 2012 | 2007, 2008, 2009, 2011, 2012 |
| NOAA_REFM | sablefish.pdf | 10 | 2001 | 2007 | 2001, 2002, 2003, 2006, 2007 |
| NOAA_REFM | sablefishgoa.pdf | 2 | 2007 | 2008 | 2007, 2008 |
| NPFMC | BSAIatf.pdf | 23 | 2025 | 2025 | 2025 |
| NPFMC | BSAIatka.pdf | 22 | 2025 | 2025 | 2025 |
| NPFMC | BSAIflathead.pdf | 21 | 2025 | 2025 | 2025 |
| NPFMC | BSAIkamchatka.pdf | 16 | 2025 | 2025 | 2025 |
| NPFMC | BSAInork.pdf | 12 | 2025 | 2025 | 2025 |
| NPFMC | BSAIocto.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | BSAIoflat.pdf | 21 | 2025 | 2025 | 2025 |
| NPFMC | BSAIorock.pdf | 22 | 2025 | 2025 | 2025 |
| NPFMC | BSAIpcod.pdf | 9 | 2025 | 2025 | 2025 |
| NPFMC | BSAIplaice.pdf | 21 | 2025 | 2025 | 2025 |
| NPFMC | BSAIpop.pdf | 23 | 2025 | 2025 | 2025 |
| NPFMC | BSAIrocksole.pdf | 19 | 2025 | 2025 | 2025 |
| NPFMC | BSAIsablefish.pdf | 13 | 2025 | 2025 | 2025 |
| NPFMC | BSAIsharks.pdf | 3 | 2025 | 2025 | 2025 |
| NPFMC | BSAIshortraker.pdf | 18 | 2025 | 2025 | 2025 |
| NPFMC | BSAIskate.pdf | 19 | 2025 | 2025 | 2025 |
| NPFMC | BSAIturbot.pdf | 19 | 2025 | 2025 | 2025 |
| NPFMC | BSAIyfin.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | CookInletSalmon.pdf | 3 | 2024 | 2026 | 2024, 2025, 2026 |
| NPFMC | GOAatf.pdf | 25 | 2025 | 2025 | 2025 |
| NPFMC | GOAatka.pdf | 25 | 2025 | 2025 | 2025 |
| NPFMC | GOAdeepflat.pdf | 18 | 2025 | 2025 | 2025 |
| NPFMC | GOAdsr.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | GOAdusky.pdf | 16 | 2025 | 2025 | 2025 |
| NPFMC | GOAflathead.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | GOAnork.pdf | 11 | 2025 | 2025 | 2025 |
| NPFMC | GOAocto.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | GOAorock.pdf | 14 | 2025 | 2025 | 2025 |
| NPFMC | GOApcod.pdf | 23 | 2026 | 2026 | 2026 |
| NPFMC | GOApollock.pdf | 23 | 2025 | 2025 | 2025 |
| NPFMC | GOApop.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | GOArex.pdf | 22 | 2025 | 2025 | 2025 |
| NPFMC | GOAsablefish.pdf | 10 | 2025 | 2025 | 2025 |
| NPFMC | GOAshallowflat.pdf | 19 | 2025 | 2025 | 2025 |
| NPFMC | GOAsharks.pdf | 2 | 2025 | 2025 | 2025 |
| NPFMC | GOAshortraker.pdf | 18 | 2025 | 2025 | 2025 |
| NPFMC | GOAskate.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | GOAthorny.pdf | 20 | 2025 | 2025 | 2025 |
| NPFMC | north-pacific-groundfish-stock-assessments-and-fishery-evaluation | 2 | 1998 | 1998 | 1998 |
This inventory is a compact reference for what the crawler currently infers about stock, area, and section coverage across the combined catalog.
safe_summaries$stock_inventory |>
arrange(section, stock, area) |>
gt() |>
fmt_number(columns = n, decimals = 0)| section | stock_group | stock | area | n |
|---|---|---|---|---|
| 2025 Groundfish SAFEs | groundfish | Alaska plaice | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Arrowtooth flounder | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Arrowtooth flounder | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Atka mackerel | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Atka mackerel | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Deep-water flatfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Demersal shelf rockfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Dusky rockfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Flathead sole | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Flathead sole | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Greenland turbot | BSAI | 1 |
| 2025 Groundfish SAFEs | other | Halibut discard mortality rates | NA | 1 |
| 2025 Groundfish SAFEs | groundfish | Kamchatka flounder | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Northern rock sole | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Northern rockfish | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Northern rockfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Octopus | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Octopus | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Other flatfish | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Other rockfish | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Other rockfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Pacific cod | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Pacific cod | GOA | 4 |
| 2025 Groundfish SAFEs | groundfish | Pacific ocean perch | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Pacific ocean perch | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Pollock | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Pollock | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Rex sole | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Rougheye/blackspotted complex | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Rougheye/blackspotted complex | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Sablefish | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Sablefish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Shallow-water flatfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Sharks | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Sharks | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Shortraker rockfish | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Shortraker rockfish | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Skates | BSAI | 1 |
| 2025 Groundfish SAFEs | groundfish | Skates | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Thornyheads | GOA | 1 |
| 2025 Groundfish SAFEs | groundfish | Yellowfin sole | BSAI | 1 |
| Cook Inlet Salmon SAFEs | salmon | Cook Inlet salmon | Cook Inlet | 3 |
| Crab SAFEs | crab | Aleutian Islands golden king crab | BSAI | 1 |
| Crab SAFEs | crab | Aleutian Islands golden king crab | NA | 5 |
| Crab SAFEs | crab | Bristol Bay red king crab | NA | 12 |
| Crab SAFEs | crab | Eastern Bering Sea snow crab | NA | 2 |
| Crab SAFEs | crab | Norton Sound red king crab | NA | 5 |
| Crab SAFEs | crab | Pribilof Islands blue king crab | NA | 6 |
| Crab SAFEs | crab | Pribilof Islands golden king crab | NA | 2 |
| Crab SAFEs | crab | Pribilof Islands red king crab | NA | 4 |
| Crab SAFEs | crab | Saint Matthew Island blue king crab | NA | 3 |
| Crab SAFEs | crab | Tanner crab | NA | 1 |
| Crab SAFEs | crab | West Aleutian Islands red king crab | BSAI | 1 |
| Crab SAFEs | crab | West Aleutian Islands red king crab | NA | 1 |
| Groundfish SAFEs | groundfish | Alaska plaice | BSAI | 3 |
| Groundfish SAFEs | groundfish | Alaska plaice | BSAI/GOA | 19 |
| Groundfish SAFEs | groundfish | Arrowtooth flounder | BSAI | 5 |
| Groundfish SAFEs | groundfish | Arrowtooth flounder | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Arrowtooth flounder | GOA | 5 |
| Groundfish SAFEs | groundfish | Arrowtooth flounder | NA | 27 |
| Groundfish SAFEs | groundfish | Atka mackerel | BSAI | 5 |
| Groundfish SAFEs | groundfish | Atka mackerel | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Atka mackerel | GOA | 5 |
| Groundfish SAFEs | groundfish | Atka mackerel | NA | 26 |
| Groundfish SAFEs | groundfish | Deep-water flatfish | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Deep-water flatfish | NA | 7 |
| Groundfish SAFEs | groundfish | Demersal shelf rockfish | BSAI/GOA | 1 |
| Groundfish SAFEs | groundfish | Demersal shelf rockfish | GOA | 3 |
| Groundfish SAFEs | groundfish | Demersal shelf rockfish | NA | 18 |
| Groundfish SAFEs | groundfish | Dusky rockfish | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Dusky rockfish | GOA | 1 |
| Groundfish SAFEs | groundfish | Dusky rockfish | NA | 3 |
| Groundfish SAFEs | groundfish | Flathead sole | BSAI | 5 |
| Groundfish SAFEs | groundfish | Flathead sole | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Flathead sole | GOA | 3 |
| Groundfish SAFEs | groundfish | Flathead sole | NA | 27 |
| Groundfish SAFEs | groundfish | Forage fish | BSAI/GOA | 4 |
| Groundfish SAFEs | groundfish | Forage fish | GOA | 1 |
| Groundfish SAFEs | groundfish | Forage fish | NA | 8 |
| Groundfish SAFEs | groundfish | Greenland turbot | BSAI | 7 |
| Groundfish SAFEs | groundfish | Greenland turbot | NA | 19 |
| Groundfish SAFEs | groundfish | Grenadier | BSAI/GOA | 3 |
| Groundfish SAFEs | groundfish | Grenadier | NA | 12 |
| Groundfish SAFEs | other | Halibut discard mortality rates | GOA | 1 |
| Groundfish SAFEs | other | Halibut discard mortality rates | NA | 5 |
| Groundfish SAFEs | groundfish | Kamchatka flounder | NA | 15 |
| Groundfish SAFEs | groundfish | Northern rock sole | BSAI/GOA | 8 |
| Groundfish SAFEs | groundfish | Northern rock sole | NA | 24 |
| Groundfish SAFEs | groundfish | Northern rockfish | BSAI | 3 |
| Groundfish SAFEs | groundfish | Northern rockfish | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Northern rockfish | GOA | 4 |
| Groundfish SAFEs | groundfish | Northern rockfish | NA | 27 |
| Groundfish SAFEs | groundfish | Octopus | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Octopus | NA | 27 |
| Groundfish SAFEs | groundfish | Other flatfish | BSAI | 5 |
| Groundfish SAFEs | groundfish | Other flatfish | NA | 19 |
| Groundfish SAFEs | groundfish | Other rockfish | BSAI | 6 |
| Groundfish SAFEs | groundfish | Other rockfish | BSAI/GOA | 10 |
| Groundfish SAFEs | groundfish | Other rockfish | NA | 21 |
| Groundfish SAFEs | groundfish | Pacific cod | BSAI | 19 |
| Groundfish SAFEs | groundfish | Pacific cod | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Pacific cod | GOA | 8 |
| Groundfish SAFEs | groundfish | Pacific cod | NA | 27 |
| Groundfish SAFEs | groundfish | Pacific ocean perch | BSAI | 6 |
| Groundfish SAFEs | groundfish | Pacific ocean perch | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Pacific ocean perch | GOA | 3 |
| Groundfish SAFEs | groundfish | Pacific ocean perch | NA | 27 |
| Groundfish SAFEs | groundfish | Pollock | BSAI | 24 |
| Groundfish SAFEs | groundfish | Pollock | BSAI/GOA | 10 |
| Groundfish SAFEs | groundfish | Pollock | GOA | 12 |
| Groundfish SAFEs | groundfish | Pollock | NA | 61 |
| Groundfish SAFEs | groundfish | Rex sole | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Rex sole | GOA | 2 |
| Groundfish SAFEs | groundfish | Rex sole | NA | 8 |
| Groundfish SAFEs | groundfish | Rougheye/blackspotted complex | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Rougheye/blackspotted complex | NA | 23 |
| Groundfish SAFEs | groundfish | Sablefish | BSAI/GOA | 18 |
| Groundfish SAFEs | groundfish | Sablefish | NA | 24 |
| Groundfish SAFEs | groundfish | Shallow-water flatfish | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Shallow-water flatfish | NA | 7 |
| Groundfish SAFEs | groundfish | Sharks | BSAI | 2 |
| Groundfish SAFEs | groundfish | Sharks | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Sharks | NA | 27 |
| Groundfish SAFEs | groundfish | Shortraker rockfish | BSAI | 3 |
| Groundfish SAFEs | groundfish | Shortraker rockfish | BSAI/GOA | 10 |
| Groundfish SAFEs | groundfish | Shortraker rockfish | GOA | 3 |
| Groundfish SAFEs | groundfish | Shortraker rockfish | NA | 27 |
| Groundfish SAFEs | groundfish | Skates | BSAI/GOA | 10 |
| Groundfish SAFEs | groundfish | Skates | GOA | 3 |
| Groundfish SAFEs | groundfish | Skates | NA | 28 |
| Groundfish SAFEs | groundfish | Thornyheads | BSAI/GOA | 11 |
| Groundfish SAFEs | groundfish | Thornyheads | GOA | 7 |
| Groundfish SAFEs | groundfish | Thornyheads | NA | 8 |
| Groundfish SAFEs | groundfish | Yellowfin sole | NA | 19 |
| Scallop SAFEs | scallop | Scallop | NA | 21 |
For full SAFE reports that cover the stocks included in this audit, use the NOAA SAFE library and the companion inventory sheet:
Pollock is a useful regression test because the file naming has changed over time and the same stock can appear through multiple NOAA and NPFMC entry points.
pollock_example <- safe_catalog |>
filter(
grepl("Pollock", stock %||% "") | grepl("pollock", label, ignore.case = TRUE),
grepl("BSAI|Bering", area %||% "", ignore.case = TRUE) |
grepl("BSAI", label, ignore.case = TRUE)
) |>
mutate(
access_note = case_when(
filename == "BSAIpollock.pdf" ~ "Current naming uses BSAIpollock.pdf rather than EBSpollock.pdf",
filename == "EBSpollock.pdf" ~ "Alternate or older filename found",
TRUE ~ ""
)
) |>
select(source, true_year, label, filename, access_note, url) |>
arrange(desc(true_year), source, label)
pollock_example |>
gt() |>
fmt_missing(everything(), missing_text = "")| source | true_year | label | filename | access_note | url |
|---|---|---|---|---|---|
| NPFMC | 2025 | BSAI Pollock | BSAIpollock.pdf | Current naming uses BSAIpollock.pdf rather than EBSpollock.pdf | https://files.npfmc.org/SAFE/2025/BSAIpollock.pdf |
| NOAA | 2024 | Pollock - Aleutian Islands | AIpollock.pdf | https://www.npfmc.org/wp-content/PDFdocuments/SAFE/2024/AIpollock.pdf | |
| NOAA | 2023 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2023/AIpollock.pdf | |
| NOAA | 2023 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2023/GOApollock.pdf | |
| NOAA | 2022 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2022/AIpollock.pdf | |
| NOAA | 2022 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2022/GOApollock.pdf | |
| NOAA | 2021 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2021/AIpollock.pdf | |
| NOAA | 2021 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2021/GOApollock.pdf | |
| NOAA | 2020 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2020/AIpollock.pdf | |
| NOAA | 2020 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2020/GOApollock.pdf | |
| NOAA | 2019 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2019/AIpollock.pdf | |
| NOAA | 2019 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2019/GOApollock.pdf | |
| NOAA | 2018 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2018/BSAI/AIpollock.pdf | |
| NOAA | 2018 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2018/GOA/GOApollock.pdf | |
| NOAA | 2017 | Pollock | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2017/GOApollock.pdf | |
| NOAA | 2017 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2017/AIpollock.pdf | |
| NOAA | 2017 | Pollock - Eastern Bering Sea | EBSpollock.pdf | Alternate or older filename found | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2017/EBSpollock.pdf |
| NOAA | 2016 | Pollock | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2016/GOApollock.pdf | |
| NOAA | 2015 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2015/AIpollock.pdf | |
| NOAA | 2015 | Pollock - Walleye | GOApollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2015/GOApollock.pdf | |
| NOAA | 2014 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2014/AIpollock.pdf | |
| NOAA | 2013 | Pollock - Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2013/AIpollock.pdf | |
| NOAA_REFM | 2012 | Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2012/AIpollock.pdf | |
| NOAA_REFM | 2011 | Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/docs/2011/AIpollock.pdf | |
| NOAA_REFM | 2010 | Aleutian Islands | AIpollock.pdf | http://apps-afsc.fisheries.noaa.gov/REFM/docs/2010/AIpollock.pdf | |
| NOAA_REFM | 2009 | Aleutian Islands | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/docs/2009/AIpollock.pdf | |
| NOAA_REFM | 2005 | Aleutian Islands Pollock | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2005/AIpollock.pdf | |
| NOAA_REFM | 2004 | Aleutian Islands Pollock | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2004/AIpollock.pdf | |
| NOAA_REFM | 2003 | Aleutian Islands Pollock | AIpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2003/AIpollock.pdf | |
| NOAA_REFM | 2002 | BSAI Pollock | BSpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2002/BSpollock.pdf | |
| NOAA_REFM | 2001 | BSAI Pollock | BSpollock.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2001/BSpollock.pdf | |
| NOAA_REFM | 2001 | BSAI Pollock Appendix | BSpollockapp.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2001/BSpollockapp.pdf | |
| NOAA_REFM | 2000 | BSAI Pollock | bsaipollock2000.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2000/bsaipollock2000.pdf | |
| NOAA_REFM | 1999 | BSAI Pollock | bsaiwp99.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/Historic_Assess/bsaiwp99.pdf | |
| NOAA_REFM | 1998 | BSAI Pollock | bsaiwp98.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/Historic_Assess/bsaiwp98.pdf |
GOA Pacific cod is a second targeted check because the current NPFMC page mixes ordinary 2025 material with visible 2026 update files under the 2025 directory.
pcod_example <- safe_catalog |>
filter(
grepl("Pacific cod", stock %||% "", ignore.case = TRUE) |
grepl("pcod", filename %||% "", ignore.case = TRUE) |
grepl("Pacific cod", label, ignore.case = TRUE),
grepl("GOA", area %||% "", ignore.case = TRUE) |
grepl("GOA", label, ignore.case = TRUE)
) |>
mutate(
access_note = case_when(
filename == "GOApcod.pdf" & grepl("\\b2026\\b", label) ~
"2026 GOA Pacific cod stored under /SAFE/2025/GOApcod.pdf",
filename == "GOApcod25.pdf" ~
"Explicit 2025 GOA Pacific cod filename",
TRUE ~ ""
)
) |>
select(source, true_year, source_year_dir, label, filename, access_note, url) |>
arrange(desc(true_year), source, label)
pcod_example |>
gt() |>
fmt_missing(everything(), missing_text = "")| source | true_year | source_year_dir | label | filename | access_note | url |
|---|---|---|---|---|---|---|
| NPFMC | 2026 | 2025 | 2026 GOA Pacific cod | GOApcod.pdf | 2026 GOA Pacific cod stored under /SAFE/2025/GOApcod.pdf | https://files.npfmc.org/SAFE/2025/GOApcod.pdf |
| NPFMC | 2026 | 2025 | 2026 GOA Pacific cod ESP | GOApcodESP.pdf | https://files.npfmc.org/SAFE/2025/GOApcodESP.pdf | |
| NPFMC | 2026 | 2025 | 2026 GOA Pacific cod ESP Report Card | GOApcodESP_Report_Card.pdf | https://files.npfmc.org/SAFE/2025/GOApcodESP_Report_Card.pdf | |
| NPFMC | 2025 | 2025 | 2025 GOA Pacific Cod | GOApcod25.pdf | Explicit 2025 GOA Pacific cod filename | https://files.npfmc.org/SAFE/2025/GOApcod25.pdf |
| NOAA | 2023 | 2023 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2023/GOApcod.pdf | |
| NOAA | 2022 | 2022 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/Plan_Team/2022/GOApcod.pdf | |
| NOAA | 2021 | 2021 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2021/GOApcod.pdf | |
| NOAA | 2020 | 2020 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2020/GOApcod.pdf | |
| NOAA | 2019 | 2019 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2019/GOApcod.pdf | |
| NOAA | 2018 | 2018 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2018/GOA/GOApcod.pdf | |
| NOAA | 2017 | 2017 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2017/GOApcod.pdf | |
| NOAA | 2016 | 2016 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2016/GOApcod.pdf | |
| NOAA | 2015 | 2015 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2015/GOApcod.pdf | |
| NOAA | 2014 | 2014 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2014/GOApcod.pdf | |
| NOAA | 2013 | 2013 | Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/REFM/Docs/2013/GOApcod.pdf | |
| NOAA_REFM | 2005 | 2005 | GOA Pacific Cod | GOAPcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2005/GOAPcod.pdf | |
| NOAA_REFM | 2004 | 2004 | GOA Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2004/GOApcod.pdf | |
| NOAA_REFM | 2003 | 2003 | GOA Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2003/GOApcod.pdf | |
| NOAA_REFM | 2002 | 2002 | GOA Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2002/GOApcod.pdf | |
| NOAA_REFM | 2001 | 2001 | GOA Pacific Cod | GOApcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2001/GOApcod.pdf | |
| NOAA_REFM | 2000 | 2000 | GOA Pacific Cod | goapcod2000.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/2000/goapcod2000.pdf | |
| NOAA_REFM | 1999 | GOA Pacific Cod | GOA1999Pcod.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/historic_assess/GOA1999Pcod.pdf | ||
| NOAA_REFM | 1998 | GOA Pacific Cod | goapcod98.pdf | https://apps-afsc.fisheries.noaa.gov/refm/docs/historic_assess/goapcod98.pdf |
The section below summarizes the 30 most recent HCR mentions from the NPFMC meetings document search output and provides direct links to both the document and its meeting page.
hcr_path <- "npfmc_hcr_mentions_top30.csv"
if (!file.exists(hcr_path)) {
cat(
"The file `npfmc_hcr_mentions_top30.csv` was not found. ",
"Run the HCR extraction step first, then re-render this report."
)
} else {
hcr_top30 <- readr::read_csv(hcr_path, show_col_types = FALSE) |>
mutate(
meeting_time = as.POSIXct(meeting_time, tz = "UTC"),
meeting_date = as.Date(meeting_time)
) |>
arrange(desc(meeting_time))
hcr_summary <- hcr_top30 |>
summarise(
n_mentions = n(),
n_meetings = dplyr::n_distinct(meeting_url),
newest = max(meeting_date, na.rm = TRUE),
oldest = min(meeting_date, na.rm = TRUE),
hcr_named_docs = sum(
grepl("\\\\bHCR\\\\b|Harvest Control Rule", document_title, ignore.case = TRUE),
na.rm = TRUE
)
)
cat(sprintf(
paste0(
"These %d entries span **%s** through **%s**, covering **%d** meetings. ",
"**%d** document titles explicitly include `HCR` or `Harvest Control Rule`."
),
hcr_summary$n_mentions,
format(hcr_summary$oldest, "%B %d, %Y"),
format(hcr_summary$newest, "%B %d, %Y"),
hcr_summary$n_meetings,
hcr_summary$hcr_named_docs
))
hcr_display <- hcr_top30 |>
mutate(
meeting_link = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">%s</a>',
meeting_url,
meeting
),
document_link = sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">%s</a>',
document_url,
document_title
)
) |>
select(meeting_date, meeting_link, document_link)
hcr_display |>
gt() |>
fmt_date(columns = meeting_date, date_style = 6) |>
fmt_markdown(columns = c(meeting_link, document_link)) |>
cols_label(
meeting_date = "Meeting Date",
meeting_link = "Meeting",
document_link = "Document"
)
}These 30 entries span **December 01, 2025** through **February 03, 2026**, covering **6** meetings. **2** document titles explicitly include `HCR` or `Harvest Control Rule`.